X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9515e8a7f83cbb920491ceaef03f8e0fe0ce8108..ec3bc39:/data/bison.c%20%20/bison.git/blobdiff_plain/9515e8a7f83cbb920491ceaef03f8e0fe0ce8108..ec3bc39:/data/bison.c++ diff --git a/data/bison.c++ b/data/bison.c++ index a0908554..c418bad3 100644 --- a/data/bison.c++ +++ b/data/bison.c++ @@ -6,8 +6,7 @@ m4_divert(-1) m4_define([b4_sint_type], [m4_if(m4_eval([$1 <= 127]), [1], [signed char], m4_eval([$1 <= 32767]), [1], [signed short], - m4_eval([$1 <= 2147483647]), [1], [signed int], - [m4_fatal([no signed int type for $1])])]) + [signed int])]) # b4_uint_type(MAX) @@ -16,12 +15,41 @@ m4_define([b4_sint_type], m4_define([b4_uint_type], [m4_if(m4_eval([$1 <= 255]), [1], [unsigned char], m4_eval([$1 <= 65535]), [1], [unsigned short], - m4_eval([$1 <= 4294967295]), [1], [unsigned int], - [m4_fatal([no unsigned int type for $1])])]) + [unsigned int])]) -# b4_token_defines(TOKEN-NAME, TOKEN-NUMBER) -# ------------------------------------------ +# b4_lhs_value([TYPE]) +# -------------------- +# Expansion of $$. +m4_define([b4_lhs_value], +[yyval[]m4_ifval([$1], [.$1])]) + + +# b4_rhs_value(RULE-LENGTH, NUM, [TYPE]) +# -------------------------------------- +# Expansion of $NUM, where the current rule has RULE-LENGTH +# symbols on RHS. +m4_define([b4_rhs_value], +[semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])]) + + +# b4_lhs_location() +# ----------------- +# Expansion of @$. +m4_define([b4_lhs_location], +[yyloc]) + + +# b4_rhs_location(RULE-LENGTH, NUM) +# --------------------------------- +# Expansion of @NUM, where the current rule has RULE-LENGTH symbols +# on RHS. +m4_define([b4_rhs_location], +[location_stack_@<:@m4_eval([$1 - $2])@:>@]) + + +# b4_token_define(TOKEN-NAME, TOKEN-NUMBER) +# ----------------------------------------- # Output the definition of this token as #define. m4_define([b4_token_define], [#define $1 $2 @@ -113,7 +141,8 @@ b4_copyright /* Using locations. */ #define YYLSP_NEEDED b4_locations_flag -b4_prologue +/* Copy the first part of user declarations. */ +b4_pre_prologue /* Tokens. */ b4_token_defines(b4_tokens) @@ -137,6 +166,9 @@ yystype; # define YYSTYPE yystype #endif +/* Copy the second part of user declarations. */ +b4_post_prologue + #line __oline__ "__ofile__" #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ @@ -168,8 +200,8 @@ namespace yy template < > struct Traits< b4_name > { - typedef b4_uint_type(b4_token_number_max) TokenNumberType; - typedef b4_sint_type(b4_rhs_number_max) RhsNumberType; + typedef b4_uint_type(b4_translate_max) TokenNumberType; + typedef b4_sint_type(b4_rhs_max) RhsNumberType; typedef int StateType; typedef yystype SemanticType; typedef b4_ltype LocationType; @@ -228,8 +260,8 @@ namespace yy static const short defgoto_[[]]; static const short table_[[]]; static const short check_[[]]; - static const TokenNumberType r1_[[]]; - static const short r2_[[]]; + static const b4_uint_type(b4_r1_max) r1_[[]]; + static const b4_uint_type(b4_r2_max) r2_[[]]; #if YYDEBUG || YYERROR_VERBOSE static const char* const name_[[]]; @@ -238,8 +270,8 @@ namespace yy /* More tables, for debugging. */ #if YYDEBUG static const RhsNumberType rhs_[[]]; - static const short prhs_[[]]; - static const short rline_[[]]; + static const b4_uint_type(b4_prhs_max) prhs_[[]]; + static const b4_uint_type(b4_rline_max) rline_[[]]; #endif /* Even more tables. */ @@ -317,12 +349,6 @@ yy::b4_name::parse () semantic_stack_ = SemanticStack (1); location_stack_ = LocationStack (1); - /* Reserve initial space. The C parser needed that, but is it really - useful here? */ - state_stack_.reserve (initdepth_); - semantic_stack_.reserve (initdepth_); - location_stack_.reserve (initdepth_); - /* Start. */ state_ = 0; looka_ = empty_; @@ -425,8 +451,8 @@ yy::b4_name::parse () len_ = r2_[[n_]]; if (len_) { - yyval = semantic_stack_[[1 - len_]]; - yyloc = location_stack_[[1 - len_]]; + yyval = semantic_stack_[[len_ - 1]]; + yyloc = location_stack_[[len_ - 1]]; } else { @@ -438,7 +464,7 @@ yy::b4_name::parse () if (debug_) { YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n_ - 1, rline_[[n_]]); - for (unsigned i = prhs_[[n_]]; + for (b4_uint_type(b4_prhs_max) i = prhs_[[n_]]; rhs_[[i]] >= 0; ++i) YYFPRINTF (stderr, "%s ", name_[[rhs_[i]]]); YYFPRINTF (stderr, "-> %s\n", name_[[r1_[n_]]]); @@ -451,15 +477,10 @@ yy::b4_name::parse () YYLLOC_DEFAULT (yyloc, slice, len_); } - { - SemanticStack& yyvsp (semantic_stack_); - LocationStack& yylsp (location_stack_); - - switch (n_) - { - b4_actions - } - } + switch (n_) + { + b4_actions + } /* Line __line__ of __file__. */ #line __oline__ "__ofile__" @@ -666,14 +687,14 @@ yy::b4_name::check_[[]] = }; /* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */ -const yy::b4_name::TokenNumberType +const b4_uint_type(b4_r1_max) yy::b4_name::r1_[[]] = { b4_r1 }; /* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */ -const short +const b4_uint_type(b4_r2_max) yy::b4_name::r2_[[]] = { b4_r2 @@ -699,14 +720,14 @@ yy::b4_name::rhs_[[]] = /* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ -const short +const b4_uint_type(b4_prhs_max) yy::b4_name::prhs_[[]] = { b4_prhs }; /* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */ -const short +const b4_uint_type(b4_rline_max) yy::b4_name::rline_[[]] = { b4_rline @@ -752,11 +773,11 @@ b4_copyright #ifndef BISON_STACK_HH # define BISON_STACK_HH -#include +#include namespace yy { - template < class T, class S = std::vector< T > > + template < class T, class S = std::deque< T > > class Stack { public: @@ -774,23 +795,23 @@ namespace yy inline T& - operator [[]] (int index) + operator [[]] (unsigned index) { - return seq_[[height () - 1 + index]]; + return seq_[[index]]; } inline const T& - operator [[]] (int index) const + operator [[]] (unsigned index) const { - return seq_[[height () - 1 + index]]; + return seq_[[index]]; } inline void push (const T& t) { - seq_.push_back (t); + seq_.push_front (t); } inline @@ -798,14 +819,7 @@ namespace yy pop (unsigned n = 1) { for (; n; --n) - seq_.pop_back (); - } - - inline - void - reserve (unsigned n) - { - seq_.reserve (n); + seq_.pop_front (); } inline @@ -838,7 +852,7 @@ namespace yy const T& operator [[]] (unsigned index) const { - return stack_[[index - range_]]; + return stack_[[range_ - index]]; } private: