X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/60491a948b9339a6f68fafb63b51e9899d4e6aad..e0a13e7b3043411ba80b578fcf320a98024c376a:/data/lalr1.cc?ds=sidebyside diff --git a/data/lalr1.cc b/data/lalr1.cc index 4aa3689b..5f1490a5 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -1,5 +1,4 @@ m4_divert(-1) - # C++ skeleton for Bison # Copyright (C) 2002 Free Software Foundation, Inc. @@ -18,24 +17,7 @@ m4_divert(-1) # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # 02111-1307 USA - -# b4_sint_type(MAX) -# ----------------- -# Return the smallest signed int type able to handle the number MAX. -m4_define([b4_sint_type], -[m4_if(m4_eval([$1 <= 127]), [1], [signed char], - m4_eval([$1 <= 32767]), [1], [signed short], - [signed int])]) - - -# b4_uint_type(MAX) -# ----------------- -# Return the smallest unsigned int type able to handle the number MAX. -m4_define([b4_uint_type], -[m4_if(m4_eval([$1 <= 255]), [1], [unsigned char], - m4_eval([$1 <= 65535]), [1], [unsigned short], - [unsigned int])]) - +m4_include([c.m4]) # b4_lhs_value([TYPE]) # -------------------- @@ -51,6 +33,7 @@ m4_define([b4_lhs_value], m4_define([b4_rhs_value], [semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])]) +m4_define_default([b4_ltype], [Location]) # b4_lhs_location() # ----------------- @@ -67,20 +50,6 @@ 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 -]) - - -# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER) -# ------------------------------------------------------- -# Output the definition of the tokens as #define. -m4_define([b4_token_defines], -[m4_map([b4_token_define], [$@])]) - m4_define_default([b4_input_suffix], [.y]) m4_define_default([b4_output_parser_suffix], @@ -118,37 +87,11 @@ m4_define([b4_constructor], ], [])]) -m4_define([b4_copyright], - [/* -*- C++ -*- */ -/* A Bison parser, made from b4_filename, - by GNU bison b4_version. */ - -/* Skeleton output parser for bison, - Copyright 2002 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */]) m4_divert(0)dnl #output "b4_output_header_name" -b4_copyright +b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], + [2002]) #ifndef b4_header_guard # define b4_header_guard @@ -201,18 +144,6 @@ b4_post_prologue Current.last_column = Rhs[[N]].last_column; #endif -m4_if(b4_locations_flag, [0], [], -[#ifndef YYLTYPE -typedef struct yyltype -{ - int first_line; - int first_column; - int last_line; - int last_column; -} yyltype; -# define YYLTYPE yyltype -#endif]) - namespace yy { class b4_name; @@ -225,8 +156,8 @@ namespace yy template < > struct Traits< b4_name > { - typedef b4_uint_type(b4_translate_max) TokenNumberType; - typedef b4_sint_type(b4_rhs_max) RhsNumberType; + typedef b4_int_type_for([b4_translate]) TokenNumberType; + typedef b4_int_type_for([b4_rhs]) RhsNumberType; typedef int StateType; typedef yystype SemanticType; typedef b4_ltype LocationType; @@ -281,14 +212,16 @@ namespace yy LocationStack location_stack_; /* Tables. */ - static const short pact_[[]]; - static const short defact_[[]]; - static const short pgoto_[[]]; - static const short defgoto_[[]]; - static const short table_[[]]; - static const short check_[[]]; - static const b4_uint_type(b4_r1_max) r1_[[]]; - static const b4_uint_type(b4_r2_max) r2_[[]]; + static const b4_int_type_for([b4_pact]) pact_[[]]; + static const b4_int_type_for([b4_pact]) pact_ninf_; + static const b4_int_type_for([b4_defact]) defact_[[]]; + static const b4_int_type_for([b4_pgoto]) pgoto_[[]]; + static const b4_int_type_for([b4_defgoto]) defgoto_[[]]; + static const b4_int_type_for([b4_table]) table_[[]]; + static const b4_int_type_for([b4_table]) table_ninf_; + static const b4_int_type_for([b4_check]) check_[[]]; + static const b4_int_type_for([b4_r1]) r1_[[]]; + static const b4_int_type_for([b4_r2]) r2_[[]]; #if YYDEBUG || YYERROR_VERBOSE static const char* const name_[[]]; @@ -297,10 +230,10 @@ namespace yy /* More tables, for debugging. */ #if YYDEBUG static const RhsNumberType rhs_[[]]; - static const b4_uint_type(b4_prhs_max) prhs_[[]]; - static const b4_uint_type(b4_rline_max) rline_[[]]; - static const b4_uint_type(b4_stos_max) stos_[[]]; - static const short token_number_[[]]; + static const b4_int_type_for([b4_prhs]) prhs_[[]]; + static const b4_int_type_for([b4_rline]) rline_[[]]; + static const b4_int_type_for([b4_stos]) stos_[[]]; + static const b4_int_type_for([b4_toknum]) token_number_[[]]; #endif /* Even more tables. */ @@ -309,9 +242,7 @@ namespace yy /* Constants. */ static const int eof_; static const int last_; - static const int flag_; static const int nnts_; - static const int nsym_; static const int empty_; static const int final_; static const int terror_; @@ -351,9 +282,10 @@ namespace yy } #endif /* not b4_header_guard */ - +dnl #output "b4_output_prefix[]b4_output_infix[].cc" -b4_copyright +b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], + [2002]) #include "b4_output_header_name" @@ -394,7 +326,7 @@ yy::b4_name::parse () /* Try to take a decision without lookahead. */ n_ = pact_[[state_]]; - if (n_ == flag_) + if (n_ == pact_ninf_) goto yydefault; /* Read a lookahead token. */ @@ -433,7 +365,7 @@ yy::b4_name::parse () n_ = table_[[n_]]; if (n_ < 0) { - if (n_ == flag_) + if (n_ == table_ninf_) goto yyerrlab; else { @@ -493,7 +425,7 @@ yy::b4_name::parse () { YYCDEBUG << "Reducing via rule " << n_ - 1 << " (line " << rline_[[n_]] << "), "; - for (b4_uint_type(b4_prhs_max) i = prhs_[[n_]]; + for (b4_int_type_for([b4_prhs]) i = prhs_[[n_]]; rhs_[[i]] >= 0; ++i) YYCDEBUG << name_[[rhs_[i]]] << ' '; YYCDEBUG << "-> " << name_[[r1_[n_]]] << std::endl; @@ -550,20 +482,20 @@ yy::b4_name::parse () #if YYERROR_VERBOSE n_ = pact_[[state_]]; - if (n_ > flag_ && n_ < last_) + if (pact_ninf_ < n_ && n_ < last_) { message = "parse error, unexpected "; message += name_[[ilooka_]]; { int count = 0; for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x) - if (check_[[x + n_]] == x) + if (check_[[x + n_]] == x && x != terror_) ++count; if (count < 5) { count = 0; for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x) - if (check_[[x + n_]] == x) + if (check_[[x + n_]] == x && x != terror_) { message += (!count++) ? ", expecting " : " or "; message += name_[[x]]; @@ -601,7 +533,7 @@ yy::b4_name::parse () for (;;) { n_ = pact_[[state_]]; - if (n_ != flag_) + if (n_ != pact_ninf_) { n_ += terror_; if (0 <= n_ && n_ <= last_ && check_[[n_]] == terror_) @@ -686,7 +618,8 @@ yy::b4_name::lex_ () /* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing STATE-NUM. */ -const short +const b4_int_type_for([b4_pact]) yy::b4_name::pact_ninf_ = b4_pact_ninf; +const b4_int_type_for([b4_pact]) yy::b4_name::pact_[[]] = { b4_pact @@ -695,21 +628,21 @@ yy::b4_name::pact_[[]] = /* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ -const short +const b4_int_type_for([b4_defact]) yy::b4_name::defact_[[]] = { b4_defact }; /* YYPGOTO[[NTERM-NUM]]. */ -const short +const b4_int_type_for([b4_pgoto]) yy::b4_name::pgoto_[[]] = { b4_pgoto }; /* YYDEFGOTO[[NTERM-NUM]]. */ -const short +const b4_int_type_for([b4_defgoto]) yy::b4_name::defgoto_[[]] = { b4_defgoto @@ -718,14 +651,15 @@ yy::b4_name::defgoto_[[]] = /* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. */ -const short +const b4_int_type_for([b4_table]) yy::b4_name::table_ninf_ = b4_table_ninf; +const b4_int_type_for([b4_table]) yy::b4_name::table_[[]] = { b4_table }; /* YYCHECK. */ -const short +const b4_int_type_for([b4_check]) yy::b4_name::check_[[]] = { b4_check @@ -734,7 +668,7 @@ yy::b4_name::check_[[]] = #if YYDEBUG /* STOS_[[STATE-NUM]] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -const b4_uint_type(b4_stos_max) +const b4_int_type_for([b4_stos]) yy::b4_name::stos_[[]] = { b4_stos @@ -742,7 +676,7 @@ yy::b4_name::stos_[[]] = /* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding to YYLEX-NUM. */ -const short +const b4_int_type_for([b4_toknum]) yy::b4_name::token_number_[[]] = { b4_toknum @@ -750,14 +684,14 @@ yy::b4_name::token_number_[[]] = #endif /* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */ -const b4_uint_type(b4_r1_max) +const b4_int_type_for([b4_r1]) yy::b4_name::r1_[[]] = { b4_r1 }; /* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */ -const b4_uint_type(b4_r2_max) +const b4_int_type_for([b4_r2]) yy::b4_name::r2_[[]] = { b4_r2 @@ -783,14 +717,14 @@ yy::b4_name::rhs_[[]] = /* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ -const b4_uint_type(b4_prhs_max) +const b4_int_type_for([b4_prhs]) yy::b4_name::prhs_[[]] = { b4_prhs }; /* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */ -const b4_uint_type(b4_rline_max) +const b4_int_type_for([b4_rline]) yy::b4_name::rline_[[]] = { b4_rline @@ -815,23 +749,21 @@ yy::b4_name::translate_ (int token) const int yy::b4_name::eof_ = 0; const int yy::b4_name::last_ = b4_last; -const int yy::b4_name::flag_ = b4_flag; -const int yy::b4_name::nnts_ = b4_nnts; -const int yy::b4_name::nsym_ = b4_nsym; +const int yy::b4_name::nnts_ = b4_nterms_number; const int yy::b4_name::empty_ = -2; -const int yy::b4_name::final_ = b4_final; +const int yy::b4_name::final_ = b4_final_state_number; const int yy::b4_name::terror_ = 1; const int yy::b4_name::errcode_ = 256; -const int yy::b4_name::ntokens_ = b4_ntokens; +const int yy::b4_name::ntokens_ = b4_tokens_number; const int yy::b4_name::initdepth_ = b4_initdepth; const unsigned yy::b4_name::user_token_number_max_ = b4_user_token_number_max; const yy::b4_name::TokenNumberType yy::b4_name::undef_token_ = b4_undef_token_number; b4_epilogue - +dnl #output "stack.hh" -b4_copyright +b4_copyright([2002]) #ifndef BISON_STACK_HH # define BISON_STACK_HH @@ -926,9 +858,9 @@ namespace yy } #endif // not BISON_STACK_HH - +dnl #output "location.hh" -b4_copyright +b4_copyright([2002]) #ifndef BISON_LOCATION_HH # define BISON_LOCATION_HH