Commit Graph

98 Commits

Author SHA1 Message Date
Paul Eggert
6b8c325436 (b4_token_defines): Protect against double-inclusion
by wrapping enum yytokentype's definition inside #ifndef
YYTOKENTYPE.  This undoes a bug I introduced on 2002-10-12.
2002-10-13 20:35:06 +00:00
Akim Demaille
6fed0802ee * data/glr.c (yyglrShiftDefer, yyaddDeferredAction, yydoAction):
Un yy- yyrhs to avoid the name clash with the global YYRHS.
2002-10-13 19:40:30 +00:00
Akim Demaille
ea99527d23 Let nondeterministic skeletons be usable with deterministic
tables.
With the patch, GAWK compiled by GCC without -O2 passes its test
suite using a GLR parser driven by LALR tables.  It fails with -O2
because `struct stat' gives two different answers on my machine:
88 (definition of an auto var) and later 96 (memset on this var).
Hence the stack is badly corrumpted.  The headers inclusion is to
blame: if I move the awk.h inclusion before GLR's system header
inclusion, the two struct stat have the same size.
* src/tables.c (pack_table): Always create conflict_table.
(token_actions): Always create conflict_list.
* data/glr.c (YYFLAG): Remove, unused.
2002-10-13 18:50:40 +00:00
Akim Demaille
2a1fe6ed6f * data/glr.c: Formatting changes.
Tweak some trace messages to match yacc.c's.
2002-10-13 14:25:55 +00:00
Akim Demaille
f50adbbdb0 GLR parsers sometimes raise parse errors instead of performing the
default reduction.
Reported by Charles-Henry de Boysson.
* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Don't
check the length of the	traces when %glr.
(_AT_CHECK_CALC_ERROR): Also skip `^Stack' lines, coming from
GLR's traces.
(AT_CHECK_CALC_LALR, AT_CHECK_CALC_GLR): New.
Test GLR parsers.
* data/glr.c (YYLEFTMOST_STATE): Fix its value.
(yyltype): Remove the yy prefix from the member names.
(yytable): Complete its comment.
(yygetLRActions): Map error action number from YYTABLE from
YYTABLE_NINF to 0.
(yyisErrorAction): No longer compare YYACTION to YYPACT_NINF
(which was a bug: it should have been YYTABEL_NINF, and yet it was
not satisfying as we could compare an YYACTION computed from
YYDEFACT to YYTABLE_NINF although they are unrelated): 0 is the
only value for error actions.
(yyreportParseError): In verbose parse error messages, don't issue
`error' in the list of expected tokens.
* data/yacc.c (yyparse) <yybackup>: Rewrite the decoding of the
next action to perform to match glr.c's decoding.
(yytable): Complete its comment.
2002-10-13 14:25:14 +00:00
Paul Eggert
17acead581 Output token definitions before the first part of user declarations. 2002-10-12 23:20:23 +00:00
Paul Eggert
095b9f05c3 (b4_token_enum): Do not define YYTOKENTYPE. 2002-10-12 23:18:52 +00:00
Paul Eggert
df5aed8c11 (yyreport_parse_error): Remove, putting its body into...
(yyparse): here.  This undoes some of the 2002-07-25 change.
Compatibility problem reported by Ralf S. Engelschall with
OSSP cfg <http://www.ossp.org/pkg/lib/cfg/>.
2002-10-11 20:53:39 +00:00
Paul Eggert
0252b55c07 data/yacc.c: Move the GPL exception comment from c.m4 (b4_copyright) to here. 2002-09-07 06:32:24 +00:00
Paul Eggert
ad66f664ef (b4_copyright): Move the GPL exception comment from here to yacc.c.
Patch by Akim Demaille.
2002-09-07 06:31:32 +00:00
Akim Demaille
21846f695d * data/lalr1.cc (struct yyltype): Don't define it, since we use
LocationType.
(b4_ltype): Default to yy::Location from location.hh.
2002-09-06 11:54:05 +00:00
Akim Demaille
c0ad8bf3c2 * data/yacc.c: Guard the declaration of yytoknum also with
`#ifdef YYPRINT', so it is declared only when used.
2002-09-04 12:03:01 +00:00
Paul Eggert
accea6db68 Fix comment about `$$ = $1': it can copy garbage. 2002-08-12 15:04:54 +00:00
Paul Eggert
cf126971ad Include string.h, for strlen.
(yyreportParseError): Use size_t for yysize.
(yy_yypstack): No longer nested inside yypstates, as nested
functions are not portable.  Do not assume size_t is the
same width as int.
(yypstates): Do not assume that ptrdiff_t is the same width
as int, and similarly for yyposn and YYINDEX.
2002-08-12 14:02:32 +00:00
Akim Demaille
217598dadc In verbose parse error message, don't report `error' as an
expected token.
* tests/actions.at (Printers and Destructors): Adjust.
* tests/calc.at (Calculator $1): Adjust.
* data/yacc.c, data/glr.c, data/lalr1.c: When making the verbose
error message, do not report the parser accepts the error token in
that state.
2002-07-30 11:56:44 +00:00
Akim Demaille
fc5734fe23 * src/reader.h, src/reader.c (gram_error): ... can't get
yycontrol without making too strong assumptions on the parser
itself.
* src/output.c (prepare_tokens): Use the real 0th value of
token_translations instead of `0'.
* src/parse-gram.y (yyerror): Don't rely on yycontrol being
visible here.
* data/yacc.c (yyreport_parse_error): Rename yylocation as yylloc
for the time being: %locations ought to provide it to yyerror.
2002-07-26 06:25:35 +00:00
Akim Demaille
4a2a22f4c0 * data/c.m4 (b4_c_function, b4_c_ansi_args, b4_c_ansi_arg)
(b4_c_knr_arg_names, b4_c_knr_arg_name, b4_c_knr_arg_decls)
(b4_c_knr_arg_decl): New.
* data/yacc.c: Use it to define yysymprint, yydestruct, and
yyreport_parse_error.
2002-07-25 19:34:54 +00:00
Akim Demaille
b8df32232a * data/yacc.c (yyreport_parse_error): New, extracted from...
(yyparse): here.
(yydestruct, yysymprint): Move above yyparse.
Be K&R compliant.
2002-07-25 19:33:36 +00:00
Akim Demaille
a762e609e7 * data/c.m4 (b4_ints_in, b4_int_type, b4_int_type_for): New,
replace...
(b4_sint_type, b4_uint_type): these.
* data/yacc.c, data/glr.c, data/lalr1.cc: Use b4_int_type_for.
* tests/regression.at (Web2c Actions): Adjust.
2002-07-25 17:32:34 +00:00
Akim Demaille
12b0043a6d * src/gram.h (TIEM_NUMBER_MAX): New.
(item_number_of_rule_number, rule_number_of_item_number): Rename
as...
(rule_number_as_item_number, item_number_as_rule_number): these.
Adjust dependencies.
* src/output.c (vector_number_t, VECTOR_NUMBER_MAX)
(VECTOR_NUMBER_MIN, state_number_to_vector_number)
(symbol_number_to_vector_number): New.
(order): Of vector_number_t* type.
(base_t, BASE_MAX, BASE_MIN): New.
(froms, tos, width, pos, check): Of base_t type.
(action_number_t, ACTION_MIN, ACTION_MAX): New.
(actrow): Of action_number_t type.
(conflrow): Of unsigned int type.
(table_ninf, base_ninf): New.
(GENERATE_MUSCLE_INSERT_TABLE): Also output the `*_min' value.
(muscle_insert_int_table, muscle_insert_base_table)
(muscle_insert_rule_number_table): New.
(prepare_tokens): Output `toknum' as int_table.
(action_row): Returns a rule_number_t.
Use ACTION_MIN, not SHRT_MIN.
(token_actions): yydefact is rule_number_t*.
(table_ninf_remap): New.
(pack_table): Use it for `base' and `table'.
* data/yacc.c, data/glr.c, data/lalr1.cc (YYFLAG): Remove,
replaced with...
(YYPACT_NINF, YYTABLE_NINF): these.
(yypact, yytable): Compute their types instead of hard-coded
`short'.
* tests/regression.at (Web2c Actions): Adjust.
2002-07-25 17:30:44 +00:00
Akim Demaille
c76e14da4b * data/yacc.c: Output the copyright notive in the header. 2002-07-09 09:43:22 +00:00
Akim Demaille
7db2ed2d82 * src/output.c (froms, tos): Are state_number_t.
(save_column): sp, sp1, and sp2 are state_number_t.
(prepare): Rename `final' as `final_state_number', `nnts' as
`nterms_number', `nrules' as `rules_number', `nstates' as
`states_number', and `ntokens' as `tokens_number'.  Remove `nsym',
unused.
* data/yacc.c, data/glr.c, data/lalr1.cc: Adjust.
* data/lalr1.cc (nsym_): Remove, unused.
2002-07-03 12:51:30 +00:00
Akim Demaille
1154ccedaf Have the GLR tests be `warning' checked, and fix the warnings.
* data/glr.c (YYFPRINTF): Always define it, not only when YYDEBUG
(yyuserAction, yyreportAmbiguity): `Use' all the arguments.
(yyremoveDeletes): `yyi' and `yyj' are size_t.
Use YYFPRINTF when under if (YYDEBUG) to avoid empty `if' bodies.
(yyaddDeferredAction): static.
(yyglrReduce): yyi, yyk, amd yyposn are size_t.
(yyreportParseError): yyprefix is const.
yytokenp is used only when verbose.
(yy__GNUC__): Replace with __GNUC__.
(yypdumpstack): yyi is size_t.
(yypreference): Un-yy local variables and arguments, to avoid
clashes with `yyr1'.  Anyway, we are not in the user name space.
(yytname_size): be an int, as is compared with ints.
* tests/testsuite.at (AT_COMPILE, AT_PARSER_CHECK): New.
Use them.
* tests/cxx-gram.at: Use quotation to protect $1.
Use AT_COMPILE to enable warnings hunts.
Prototype yylex and yyerror.
`Use' argc.
Include `string.h', not `strings.h'.
Produce and prototype stmtMerge only when used.
yylex takes a location.
2002-06-30 17:35:06 +00:00
Paul Hilfinger
720623af84 * data/glr.c: Correct typo in Emacs-mode directive. Slightly
reorganize first lines parallel to yacc.c.
2002-06-28 22:42:58 +00:00
Akim Demaille
fb8135fa99 * data/c.m4 (b4_copyright, b4_sint_type, b4_uint_type, b4_token_define)
(b4_token_enum, b4_token_defines): New, factored from...
* data/lalr1.cc, data/yacc.c, glr.c: here.
2002-06-28 17:27:29 +00:00
Akim Demaille
4144248075 * data/yacc.c (yydestruct, yysymprint): Pacify GCC warnings for
unused variables.
* src/output.c (merger_output): static.
2002-06-28 09:05:11 +00:00
Paul Hilfinger
676385e29c Initial check-in introducing experimental GLR parsing. See entry in
ChangeLog dated 2002-06-27 from Paul Hilfinger for details.
2002-06-28 02:26:44 +00:00
Paul Hilfinger
01241d47b4 Renamed file from bison.glr. 2002-06-28 01:51:33 +00:00
Paul Hilfinger
ba29c4ec25 Renaming file to glr.c. 2002-06-28 01:50:29 +00:00
Akim Demaille
60491a948b * data/bison.simple, data/bison.c++: Rename as...
* data/yacc.c, data/lalr1.cc: these.
* doc/bison.texinfo (Environment Variables): Remove.
2002-06-27 12:08:20 +00:00
Paul Hilfinger
febef6caec New file: skeleton for GLR (Generalized LR) parser. 2002-06-26 22:51:51 +00:00
Akim Demaille
1ae7286376 * data/bison.simple (b4_symbol_actions): New, replaces...
(b4_symbol_destructor, b4_symbol_printer): these.
(yysymprint): Be sure to call YYPRINT only for tokens, and using
user token numbers.
2002-06-20 11:46:59 +00:00
Akim Demaille
87542d29a5 * data/bison.simple (yydestructor): Rename as...
(yydestruct): this.
2002-06-20 11:28:33 +00:00
Akim Demaille
5c1180b3c4 * data/bison.simple (YYLEX): Fix the declaration when
%pure-parser.
2002-06-20 10:29:27 +00:00
Akim Demaille
e317006080 * data/bison.simple (yysymprint): Don't print the token number,
just its name.
* tests/actions.at (Destructors): Rename as...
(Printers and Destructors): this.
Also exercise %printer.
2002-06-20 09:47:44 +00:00
Akim Demaille
253862fd4c * data/bison.simple (YYDSYMPRINT): New.
Use it to remove many of the #if YYDEBUG/if (yydebug).
2002-06-20 09:22:56 +00:00
Akim Demaille
366eea36d3 * src/symtab.h, src/symtab.c (symbol_t): printer and
printer_location are new members.
(symbol_printer_set): New.
* src/parse-gram.y (PERCENT_PRINTER): New token.
Handle its associated rule.
* src/scan-gram.l: Adjust.
(handle_destructor_at, handle_destructor_dollar): Rename as...
(handle_symbol_code_at, handle_symbol_code_dollar): these.
* src/output.c (symbol_printers_output): New.
(output_skeleton): Call it.
* data/bison.simple (yysymprint): New.  Cannot be named yyprint
since there are already many grammar files with a user `yyprint'.
Replace the calls to YYPRINT to calls to yysymprint.
* tests/calc.at: Adjust.
* tests/torture.at (AT_DATA_STACK_TORTURE): Remove YYPRINT: it was
taking advantage of parser very internal details (stack size!).
2002-06-20 09:08:37 +00:00
Akim Demaille
93b68a0e09 * tests/actions.at (Destructors): Augment to test locations.
* data/bison.simple (yydestructor): Pass it the current location
if locations are enabled.
Prototype only when __STDC__ or C++.
Change the argument names to move into the yy name space: there is
user code here.
2002-06-19 12:03:22 +00:00
Akim Demaille
7431029172 * data/bison.simple (b4_pure_if): New.
Use it instead of #ifdef YYPURE.
2002-06-19 10:00:24 +00:00
Akim Demaille
58612f1de0 * data/bison.simple (m4_location_if): New.
Use it instead of #ifdef YYLSP_NEEDED.
2002-06-19 09:07:36 +00:00
Akim Demaille
f25bfb75aa Prepare @$ in %destructor, but currently don't bind it in the
skeleton, as %location use is not cleaned up yet.
* src/scan-gram.l (handle_dollar, handle_destructor_at)
(handle_action_at): New.
(handle_at, handle_action_dollar, handle_destructor_dollar): Take
a braced_code_t and a location as additional arguments.
(handle_destructor_dollar): Instead of requiring `b4_eval', just
unquote one when outputting `b4_dollar_dollar'.
Adjust callers.
* data/bison.simple (b4_eval): Remove.
(b4_symbol_destructor): Adjust.
* tests/input.at (Invalid @n): Adjust.
2002-06-19 08:22:49 +00:00
Akim Demaille
ca98bf5758 * data/bison.simple.new: Comment changes.
Reported by Andreas Schwab.
2002-06-18 11:37:20 +00:00
Akim Demaille
0bfb02fff7 * data/bison.simple (yyoverflowlab): #ifndef yyoverflow, so that
there are no `label `yyoverflowlab' defined but not used' warnings
when yyoverflow is defined.
2002-06-18 10:00:36 +00:00
Akim Demaille
24c0aad7e7 * src/symtab.h, src/symtab.c (symbol_t): destructor_location is a
new member.
(symbol_destructor_set): Adjust.
* src/output.c (symbol_destructors_output): Output the destructor
locations.
Output the symbol name.
* data/bison.simple (b4_symbol_destructor): Adjust.
2002-06-18 09:55:35 +00:00
Akim Demaille
5719c1092f and Akim Demaille <akim@epita.fr>
* data/bison.simple.new (yyerrlab1): Be sure to pop and destroy
what's left on the stack when the error recovery hits EOF.
* tests/actions.at (Destructors): Complete to exercise this case.
2002-06-18 09:12:58 +00:00
Akim Demaille
9280d3ef89 * data/m4sugar/m4sugar.m4 (m4_map): Recognize when the list of
arguments is really empty, not only equal to `[]'.
* src/symtab.h, src/symtab.c (symbol_t): `destructor' is a new
member.
(symbol_destructor_set): New.
* src/output.c (symbol_destructors_output): New.
* src/reader.h (brace_code_t, current_braced_code): New.
* src/scan-gram.l (BRACED_CODE): Use it to branch on...
(handle_dollar): Rename as...
(handle_action_dollar): this.
(handle_destructor_dollar): New.
* src/parse-gram.y (PERCENT_DESTRUCTOR): New.
(grammar_declaration): Use it.
* data/bison.simple (yystos): Is always defined.
(yydestructor): New.
* tests/actions.at (Destructors): New.
* tests/calc.at (_AT_CHECK_CALC_ERROR): Don't rely on egrep.
2002-06-17 08:43:12 +00:00
Akim Demaille
e96c9728da * data/bison.simple, data/bison.c++: Be sure to restore the
current #line when returning to the skeleton contents after having
exposed the input file's #line.
2002-06-14 17:29:17 +00:00
Akim Demaille
e9955c8373 Have Bison grammars parsed by a Bison grammar.
* src/reader.c, src/reader.h (prologue_augment): New.
* src/reader.c (copy_definition): Remove.
* src/reader.h, src/reader.c (gram_start_symbol_set, prologue_augment)
(grammar_symbol_append, grammar_rule_begin, grammar_midrule_action)
(grammar_current_rule_prec_set, grammar_current_rule_check)
(grammar_current_rule_symbol_append)
(grammar_current_rule_action_append): Export.
* src/parse-gram.y (symbol_list_new, symbol_list_symbol_append_
(symbol_list_action_append): Remove.
Hook the routines from reader.
* src/scan-gram.l: In INITIAL, characters and strings are tokens.
* src/system.h (ATTRIBUTE_NORETURN, ATTRIBUTE_UNUSED): Now.
* src/reader.c (read_declarations): Remove, unused.
* src/parse-gram.y: Handle the epilogue.
* src/reader.h, src/reader.c (gram_start_symbol_set): Rename as...
(grammar_start_symbol_set): this.
* src/scan-gram.l: Be sure to ``use'' yycontrol to keep GCC quiet.
* src/reader.c (readgram): Remove, unused.
(reader): Adjust to insert eoftoken and axiom where appropriate.
* src/reader.c (copy_dollar): Replace with...
* src/scan-gram.h (handle_dollar): this.
* src/parse-gram.y: Remove `%thong'.
* src/reader.c (copy_at): Replace with...
* src/scan-gram.h (handle_at): this.
* src/complain.h, src/complain.c (warn_at, complain_at, fatal_at):
New.
* src/scan-gram.l (YY_LINES): Keep lineno synchronized for the
time being.
* src/reader.h, src/reader.c (grammar_rule_end): New.
* src/parse.y (current_type, current_class): New.
Implement `%nterm', `%token' support.
Merge `%term' into `%token'.
(string_as_id): New.
* src/symtab.h, src/symtab.c (symbol_make_alias): Don't pass the
type name.
* src/parse-gram.y: Be sure to handle properly the beginning of
rules.
* src/parse-gram.y: Handle %type.
* src/reader.c (grammar_rule_end): Call grammar_current_rule_check.
* src/parse-gram.y: More directives support.
* src/options.c: No longer handle source directives.
* src/parse-gram.y: Fix %output.
* src/parse-gram.y: Handle %union.
Use the prologue locations.
* src/reader.c (parse_union_decl): Remove.
* src/reader.h, src/reader.c (epilogue_set): New.
* src/parse-gram.y: Use it.
* data/bison.simple, data/bison.c++: b4_stype is now either not
defined, then default to int, or to the contents of %union,
without `union' itself.
Adjust.
* src/muscle_tab.c (muscle_init): Don't predefine `stype'.
* src/output.c (actions_output): Don't output braces, as they are
already handled by the scanner.
* src/scan-gram.l (SC_CHARACTER): Set the user_token_number of
characters to themselves.
* tests/reduce.at (Reduced Automaton): End the grammars with %% so
that the epilogue has a proper #line.
* src/parse-gram.y: Handle precedence/associativity.
* src/symtab.c (symbol_precedence_set): Requires the symbol to be
a terminal.
* src/scan-gram.l (SC_BRACED_CODE): Catch strings and characters.
* tests/calc.at: Do not use `%token "foo"' as it makes not sense
at all to define terminals that cannot be emitted.
* src/scan-gram.l: Escape M4 characters.
* src/scan-gram.l: Working properly with escapes in user
strings/characters.
* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR)
(AT_DATA_HORIZONTAL_GRAMMAR): Respect the `%token ID NUM STRING'
grammar.
Use more modest sizes, as for the time being the parser does not
release memory, and therefore the process swallows a huge amount
of memory.
* tests/torture.at (AT_DATA_LOOKAHEADS_GRAMMAR): Adjust to the
stricter %token grammar.
* src/symtab.h (associativity): Add `undef_assoc'.
(symbol_precedence_set): Do nothing when passed an undef_assoc.
* src/symtab.c (symbol_check_alias_consistence): Adjust.
* tests/regression.at (Invalid %directive): Remove, as it is now
meaningless.
(Invalid inputs): Adjust to the new error messages.
(Token definitions): The new grammar doesn't allow too many
eccentricities.
* src/lex.h, src/lex.c: Remove.
* src/reader.c (lastprec, skip_to_char, read_signed_integer)
(copy_character, copy_string2, copy_string, copy_identifier)
(copy_comment, parse_token_decl, parse_type_decl, parse_assoc_decl)
(parse_muscle_decl, parse_dquoted_param, parse_skel_decl)
(parse_action): Remove.
* po/POTFILES.in: Adjust.
2002-06-11 20:16:05 +00:00
Akim Demaille
69078d4b3b GCJ's parser requires the tokens to be defined before the prologue.
* data/bison.simple: Output the token definition before the user's
prologue.
* tests/regression.at (Braces parsing, Duplicate string)
(Mixing %token styles): Check the output from bison.
(Early token definitions): New.
2002-06-11 08:01:41 +00:00
Akim Demaille
717be1971f * data/bison.c++: Use C++ ostreams.
(cdebug_): New member.
2002-05-28 12:09:02 +00:00