X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/aa0cb40d61cda5bfa9d325a45735439cbbd06327..44c2b42dbb835bba585086cdf50f2003fdbef7eb:/data/lalr1.cc diff --git a/data/lalr1.cc b/data/lalr1.cc index 8e79333e..e4cbf6f7 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -1,7 +1,6 @@ # C++ skeleton for Bison -# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. +# Copyright (C) 2002-2010 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 @@ -29,7 +28,7 @@ m4_define([b4_integral_parser_table_declare], ]) # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT) -# --------------------------------------------- +# ------------------------------------------------------------- # Define "parser::yy_" which contents is CONTENT. m4_define([b4_integral_parser_table_define], [ const b4_int_type_for([$2]) @@ -116,7 +115,7 @@ m4_popdef([b4_dollar_dollar])dnl m4_pushdef([b4_copyright_years], - [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009]) + [2002-2010]) m4_define([b4_parser_class_name], [b4_percent_define_get([[parser_class_name]])]) @@ -147,6 +146,7 @@ dnl FIXME: This is wrong, we want computed header guards. ]b4_percent_code_get([[requires]])[ ]b4_parse_assert_if([#include ])[ +#include #include #include #include "stack.hh" @@ -320,7 +320,7 @@ do { \ /// The state. state_type state; - /// Return the type corresponding to this state. + /// The type (corresponding to \a state). inline int type_get_ () const; }; @@ -397,7 +397,7 @@ m4_if(b4_prefix, [yy], [], b4_percent_code_get[]dnl [#ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* FIXME: INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -689,7 +689,7 @@ b4_percent_code_get[]dnl symbol_type yyla;]b4_locations_if([[ /// The locations where the error started and ended. - stack_symbol_type yyerror_range[2];]])[ + stack_symbol_type yyerror_range[3];]])[ /// $$ and @@$. stack_symbol_type yylhs; @@ -814,12 +814,21 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[ // Perform the reduction. YY_REDUCE_PRINT (yyn); - switch (yyn) + try + { + switch (yyn) { ]b4_user_actions[ default: break; } + } + catch (const syntax_error& yyexc) + { + error (]b4_args(b4_locations_if([yyexc.location]), + [[yyexc.what()]])[); + YYERROR; + } YY_SYMBOL_PRINT ("-> $$ =", yylhs); ]b4_variant_if([[ // Destroy the rhs symbols. @@ -857,7 +866,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[ } ]b4_locations_if([[ - yyerror_range[0].location = yyla.location;]])[ + yyerror_range[1].location = yyla.location;]])[ if (yyerrstatus_ == 3) { /* If just tried and failed to reuse lookahead token after an @@ -866,7 +875,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[ /* Return failure if at end of input. */ if (yyla.type == yyeof_) YYABORT; - else + else if (!yyempty) { yy_destroy_ ("Error: discarding", yyla); yyempty = true; @@ -888,7 +897,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[ code. */ if (false) goto yyerrorlab;]b4_locations_if([[ - yyerror_range[0].location = yystack_[yylen - 1].location;]])b4_variant_if([[ + yyerror_range[1].location = yystack_[yylen - 1].location;]])b4_variant_if([[ /* $$ was initialized before running the user action. */ yy_destroy_ ("Error: discarding", yylhs);]])[ /* Do not reclaim the symbols of the rule which action triggered @@ -922,14 +931,14 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[ if (yystack_.size () == 1) YYABORT; ]b4_locations_if([[ - yyerror_range[0].location = yystack_[0].location;]])[ + yyerror_range[1].location = yystack_[0].location;]])[ yy_destroy_ ("Error: popping", yystack_[0]); yypop_ (); YY_STACK_PRINT (); } ]b4_locations_if([[ - yyerror_range[1].location = yyla.location; - YYLLOC_DEFAULT (error_token.location, (yyerror_range - 1), 2);]])[ + yyerror_range[2].location = yyla.location; + YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[ /* Shift the error token. */ error_token.state = yyn;