mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
In order to make it easy to perform benchmarks to ensure that there are no performance loss, lalr1.cc is forked into lalr1-fusion.cc. Eventually, lalr1-fusion.cc will replace lalr1.cc. Meanwhile, to make sure that lalr1-fusion.cc is correctly exercized by the test suite, the user must install a symbolic link from lalr1.cc to it. Instead of having three stacks (state, value, location), use a stack of triples. This considerably simplifies the code (and it will be easier not to require locations as currently does the C++ parser), and also gives a 10% speedup according to etc/bench (probably mainly since memory allocation is done once instead of three times). Another motivation is to make it easier to destruct properly semantic values: now that they are bound to their state (hence symbol type) it will be easier to call the appropriate destructor. These changes should probably benefit the C parser too. * data/lalr1.cc: Copy as... * data/lalr1-fusion.cc: this new file. (b4_rhs_value, b4_rhs_location): New definitions overriding those from c++.m4. (state_stack_type, semantic_stack_type, location_stack_type) (yystate_stack_, yysemantic_stack_, yylocation_stack_): Remove. (data_type, stack_type, yystack_): New. (YYLLOC_DEFAULT, yypush_): Adjust. (yyerror_range): Now based on data_type, not location_type.
-*- outline -*- This directory contains Bison skeletons: the general shapes of the different parser kinds, that are specialized for specific grammars by the bison program. Currently, there are only three supported skeletons: - yacc.c It used to be named bison.simple: it corresponds to C Yacc compatible LALR(1) parsers. - lalr1.cc Produces a C++ parser class. It is still very experimental, and not yet supported. Please, subscribe to bison-patches@gnu.org. - glr.c A Generalized LR C parser based on Bison's LALR(1) tables. These skeletons are the only ones supported by the Bison team. Because the interface between skeletons and the bison program is not finished, *we are not bound to it*. In particular, Bison is not mature enough for us to consider that ``foreign skeletons'' are supported. ----- Copyright (C) 2002 Free Software Foundation, Inc. This file is part of GNU Bison. 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.