Commit Graph

52 Commits

Author SHA1 Message Date
Akim Demaille
e503aa60d5 * src/parse-gram.y (add_param): Fix the truncation of trailing
spaces.
2004-10-06 15:52:24 +00:00
Paul Eggert
ead9e56eb2 (add_param): Fix bug where NUL was mishandled.
Avoid the use of strchr to avoid future recurrences.
2004-09-27 22:03:42 +00:00
Akim Demaille
b233d5558f * src/parse-gram.y (add_param): Strip the leading and trailing
blanks from a formal argument declaration.
(YY_LOCATION_PRINT): New.
2004-09-27 07:42:04 +00:00
Paul Eggert
62cb8a9920 * src/parse-gram.y (lloc_default): Rewrite to avoid compiler bug.
* configure.ac (AC_PREREQ): Bump to 2.58.
2004-05-27 07:38:17 +00:00
Paul Eggert
12ffdd2835 * src/parse-gram.y: Put copyright notice inside %{ %} so it
gets copied to the output file.
2004-05-03 07:57:06 +00:00
Paul Eggert
1f916a78e6 Update copyright to 2004. 2004-04-13 17:43:15 +00:00
Paul Hilfinger
d63282419d * src/parse-gram.y: Define PERCENT_EXPECT_RR.
(declaration): Replace expected_conflicts with expected_sr_conflicts.
Add %expect-rr rule.

* src/scan-gram.l: Recognize %expect-rr.

* src/conflicts.h (expected_sr_conflicts): Rename from
expected_conflicts.
(expected_rr_conflicts): Declare.

* src/conflicts.c (expected_sr_conflicts): Rename from
expected_conflicts.
(expected_rr_conflicts): Define.
(conflicts_print): Check r/r conflicts against expected_rr_conflicts
for GLR parsers.
Use expected_sr_conflicts in place of expected_conflicts.
Warn if expected_rr_conflicts used in non-GLR parser.

* doc/bison.texinfo: Add documentation for %expect-rr.
2004-03-26 22:41:16 +00:00
Paul Eggert
22fccf958f Use "%no-default-prec" instead of "%default-prec 0". 2003-10-01 21:33:24 +00:00
Paul Eggert
39a06c251a Add %default-prec. 2003-09-30 20:11:29 +00:00
Akim Demaille
cd3684cfa8 When reducing initial empty rules, Bison parser read an initial
location that is not defined.  This results in garbage, and that
affects Bison's own parser.  Therefore we need (i) to extend Bison
to support a means to initialize this location, and (ii) to use
this CVS Bison to fix CVS Bison's parser.
* src/reader.h, reader.c (epilogue_augment): Remove, replace
with...
* src/muscle_tab.h, src/muscle_tab.c (muscle_code_grow): this.
* src/parse-gram.y: Adjust.
(%initial-action): New.
(%error-verbose): Since we require CVS Bison, there is no reason
not to use it.
* src/scan-gram.l: Adjust.
* src/Makefile.am (YACC): New, to make sure we use our own parser.
* data/yacc.c (yyparse): Use b4_initial_action.
2003-08-25 15:16:25 +00:00
Paul Eggert
d08290769c Switch from 'int' to 'bool' where that makes sense. 2003-05-24 19:16:02 +00:00
Paul Eggert
8d0a98bb50 (rules_or_grammar_declaration): Require a
semicolon after a grammar declaration, in the interest of possible
future changes to the Bison input language.
Do not allow a stray semicolon at the start of the grammar.
(rhses.1): Allow one or more semicolons after any rule, including
just before "|" as required by POSIX.
2003-05-14 19:26:16 +00:00
Akim Demaille
916708d59e * src/gram.h, src/gram.c (pure_parser, glr_parser): Move to...
* src/getargs.c, src/getargs.h: here, as bool, not int.
(nondeterministic_parser): New.
* src/parse-gram.y, src/scan-gram.l: Support
%nondeterministic-parser.
* src/output.c (prepare): Use nondeterministic_parser instead
of glr_parser where appropriate.
* src/tables.c (conflict_row, action_row, save_row)
(token_actions, token_actions, pack_vector): Ditto.
2003-04-29 12:57:36 +00:00
Paul Eggert
a737b2163c Use more-consistent naming conventions for local vars. 2003-02-03 15:35:57 +00:00
Paul Eggert
9dd5b37815 (declaration): Use enum "report_states" rather
than its numeric value 1.
2002-12-26 06:51:42 +00:00
Paul Eggert
5320ca4d6f (lloc_default): Remove test for empty
nonterminals at the end, since it didn't change the result.
2002-12-24 08:08:18 +00:00
Paul Eggert
e9ce56889c (add_param): 2nd arg is now char * not char
const *, since it is now modified by stripping surrounding { }.
(current_braced_code): Remove.
(PERCENT_DESTRUCTOR, PERCENT_PRINTER, PERCENT_UNION,
PERCENT_LEX_PARAM, PERCENT_PARSE_PARAM): Change names to include
trailing " {...}".  Now of type <chars>.
(grammar_declaration): Adjust to bundled tokens.
(code_content): Remove; stripping is now done by add_param.
(print_token_value): Print contents of bundled tokens.
(token_name): New function.
2002-12-24 07:44:40 +00:00
Paul Eggert
3d2cbc2662 (<chars>): Renamed from <string>. 2002-12-11 06:40:51 +00:00
Paul Eggert
b729552289 (lloc_default): New function, which handles
empty locations more accurately.
(YYLLOC_DEFAULT): Use it.
(%token COLON): Remove.
(%token ID_COLON): New token.
(rules): Use it.
(declarations, rules): Remove trailing semicolon.
(declaration, rules_or_grammar_declaration):
Allow empty (";") declaration.
(symbol_def): Remove empty actions; no longer needed.
(rules_or_grammar_declaration): Remove trailing semicolon.
(semi_colon.opt): Remove.
2002-12-07 06:01:20 +00:00
Paul Eggert
1fec91df90 (gram_error): Now static. Add static decl.
(print_token_value): Omit parameter names from forward decl,
for consistency.
2002-11-30 09:16:54 +00:00
Paul Eggert
1773ceee65 (add_param): New function.
(COMMA): Remove.
(declaration): Implement new rule for %parse-param and %lex-param.
2002-11-29 08:44:04 +00:00
Paul Eggert
ad8a3efc5a (print_token_value): Renamed from yyprint.
All uses changed.
(YYPARSE_PARAM, YYLEX_PARAM, yycontrol): Remove.  All uses changed.
The name "yycontrol" violates the name space rules, and this stuff
wasn't being used anyway.
(input): Remove action; this stuff wasn't being used.
(gram_error): Rename local variable yylloc -> loc.
2002-11-27 18:33:18 +00:00
Paul Eggert
6e649e659e * data/glr.c, data/lalr1.cc, data/yacc.cc, doc/bison.texinfo,
src/conflicts.c, src/parse-gram.y, src/tables.c, src/tables.h,
tests/action.at, tests/calc.at, tests/conflicts.at,
tests/cxx-type.at, tests/regression.at:
"parse error" -> "syntax error" for POSIX compatibility.
"parsing stack overflow..." -> "parser stack overflow" so
that code matches Bison documentation.
2002-11-15 20:32:21 +00:00
Akim Demaille
0f39aab92a * src/parse-gram.y (declaration): Have %parse-param and %lex-param
take two BRACED_CODE, not two string_content.
Free the scanner's obstack when we are done.
(code_content): New.
* tests/calc.at: Adjust.
* doc/bison.texinfo: Adjust.
Also, make sure to include the `,' for these declarations.
2002-11-15 16:42:16 +00:00
Akim Demaille
7ec2d4cd39 * src/scan-gram.l, src/reader.h (scanner_last_string_free):
Restore.
* src/scan-gram.l (last_string): Is global to the file, not to
yylex.
* src/parse-gram.y (input): Don't append the epilogue here,
(epilogue.opt): do it here, and free the scanner's obstack.
* src/reader.c (epilogue_set): Rename as...
(epilogue_augment): this.
* data/c.m4 (b4_epilogue): Defaults to empty.
2002-11-12 08:26:38 +00:00
Akim Demaille
95612cfa60 * src/struniq.h, src/struniq.c (struniq_t): Is const.
(STRUNIQ_EQ, struniq_assert, struniq_assert_p): New.
Use struniq for symbols.
* src/symtab.h (symbol_t): The tag member is a struniq.
(symbol_type_set): Adjust.
* src/symtab.c (symbol_new): Takes a struniq.
(symbol_free): Don't free the tag member.
(hash_compare_symbol_t, hash_symbol_t): Rename as...
(hash_compare_symbol, hash_symbol): these.
Use the fact that tags as struniqs.
(symbol_get): Use struniq_new.
* src/symlist.h, src/symlist.c (symbol_list_n_type_name_get):
Returns a strniq.
* src/reader.h (merger_list, grammar_currentmerge_set): The name
and type members are struniqs.
* src/reader.c (get_merge_function)
(grammar_current_rule_merge_set): Adjust.
(TYPE, current_type): Are struniq.
Use struniq for file names.
* src/files.h, src/files.c (infile): Split into...
(grammar_file, current_file): these.
* src/scan-gram.c (YY_USER_INIT, handle_syncline): Adjust.
* src/reduce.c (reduce_print): Likewise.
* src/getargs.c (getargs): Likewise.
* src/complain.h, src/complain.c: Likewise.
* src/main.c (main): Call struniqs_new early enough to use it for
file names.
Don't free the input file name.
2002-11-12 08:05:59 +00:00
Akim Demaille
3e6656f9ab * src/symtab.c (symbol_free): Remove dead deactivated code:
type_name are properly removed.
Don't use XFREE to free items that cannot be NULL.
* src/struniq.h, src/struniq.c: New.
* src/main.c (main): Initialize/free struniqs.
* src/parse-gram.y (%union): Add astruniq member.
(yyprint): Adjust.
* src/scan-gram.l (<{tag}>): Return a struniq.
Free the obstack bit that used to store it.
* src/symtab.h (symbol_t): The 'type_name' member is a struniq.
2002-11-12 07:55:55 +00:00
Paul Eggert
87fbb0bffc (CHARACTER): Remove unused token. All uses removed. 2002-11-08 05:19:30 +00:00
Akim Demaille
ae7453f2ba Prototype support of %lex-param and %parse-param.
* src/parse-gram.y: Add the definition of the %lex-param and
%parse-param tokens, plus their rules.
Drop the `_' version of %glr-parser.
Add the "," token.
* src/scan-gram.l (INITIAL): Scan them.
* src/muscle_tab.c: Comment changes.
(muscle_insert, muscle_find): Rename `pair' as `probe'.
* src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
(muscle_entry_s): The `value' member is no longer const.
Adjust all dependencies.
* src/muscle_tab.c (muscle_init): Adjust: use
MUSCLE_INSERT_STRING.
Initialize the obstack earlier.
* src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
(muscle_pair_list_grow): New.
* data/c.m4 (b4_c_function_call, b4_c_args): New.
* data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
* tests/calc.at: Use %locations, not --locations.
(AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
2002-10-19 14:38:06 +00:00
Akim Demaille
3d38c03a86 * src/parse-gram.y: Associate a human readable string to each
token type.
* tests/regression.at (Invalid inputs): Adjust.
2002-09-10 13:52:33 +00:00
Paul Eggert
f9a85a156a Fix spelling in comment. 2002-08-12 14:49:45 +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
a945ec3929 * src/assoc.c, src/asssoc.h (assoc_t, assoc_to_string): New.
Adjust all former `associativity' dependencies.
* src/symtab.c (symbol_new): Default associativity is `undef', not
`right'.
(symbol_check_alias_consistence): Adjust.
2002-07-16 14:04:06 +00:00
Akim Demaille
a5d5099417 * src/complain.h, src/complain.c (warn, complain): Remove, unused.
* src/reader.c (lineno): Remove.
Adjust all dependencies.
(get_merge_function): Take a location and use complain_at.
* src/symtab.h, src/symtab.c (symbol_make_alias): Likewise.
* tests/regression.at (Invalid inputs, Mixing %token styles):
Adjust.
2002-07-09 15:54:39 +00:00
Akim Demaille
b275314e2d * src/parse-gram.y (rules_or_grammar_declaration): Add an error
recovery rule, and forbid extensions when --yacc.
(gram_error): Use complain_at.
* src/reader.c (reader): Exit if there were parse errors.
2002-07-09 14:48:01 +00:00
Akim Demaille
39f4191608 * src/reader.c (gensym): Rename as...
* src/symtab.h, src/symtab.c (dummy_symbol_get): this.
(getsym): Rename as...
(symbol_get): this.
2002-06-30 17:27:57 +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
Akim Demaille
1a31ed21b1 * src/symtab.h, src/symtab.c (symbol_type_set)
(symbol_destructor_set, symbol_precedence_set): The location is
the last argument.
Adjust all callers.
2002-06-20 11:20:25 +00:00
Akim Demaille
e776192e4f * src/parse-gram.y (YYPRINT, yyprint): Don't mess with the parser
internals.
* src/reader.h, src/reader.c (grammar_current_rule_prec_set):
Takes a location.
* src/symtab.h, src/symtab.c (symbol_class_set)
(symbol_user_token_number_set): Likewise.
Adjust all callers.
Promote complain_at.
* tests/input.at (Type Clashes): Adjust.
2002-06-20 11:10: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
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
dafdc66ff0 * src/symlist.h, src/symlist.c (symbol_list_length): New.
* src/scan-gram.l (handle_dollar, handle_at): Compute the
rule_length only when needed.
* src/output.c (actions_output, token_definitions_output): Output
the full M4 block.
* src/symtab.c: Don't access directly to the symbol tag, use
symbol_tag_get.
* src/parse-gram.y: Use symbol_list_free.
2002-06-17 07:05:12 +00:00
Akim Demaille
56c4720342 * src/reader.h, src/reader.c (symbol_list, symbol_list_new)
(symbol_list_prepend, get_type_name): Move to...
* src/symlist.h, src/symlist.c (symbol_list_t, symbol_list_new)
(symbol_list_prepend, symbol_list_n_type_name_get): here.
Adjust all callers.
(symbol_list_free): New.
* src/scan-gram.l (handle_dollar): Takes a location.
* tests/input.at (Invalid $n): Adjust.
2002-06-17 07:04:49 +00:00
Akim Demaille
1e0bab9276 * src/reader.h, src/reader.c (symbol_list_new): Export it.
(symbol_list_prepend): New.
* src/parse-gram.y (%union): `list' is a new member.
(symbols.1): New, replaces...
(terms_to_prec.1, nterms_to_type.1): these.
* src/symtab.h, src/symtab.c (symbol_type_set, symbol_precedence_set)
Take a location as additional argument.
Adjust all callers.
2002-06-17 07:04:24 +00:00
Akim Demaille
04e6065479 * src/parse-gram.y: Move %token in the declaration section so that
we don't depend upon CVS Bison.
2002-06-15 18:26:45 +00:00
Akim Demaille
ee000ba4fc Let symbols have a location.
* src/symtab.h, src/symtab.c (symbol_t): Location is a new member.
(getsym): Adjust.
Adjust all callers.
* src/complain.h, src/complain.c (complain_at, fatal_at, warn_at):
Use location_t, not int.
* src/symtab.c (symbol_check_defined): Take advantage of the
location.
* tests/regression.at (Invalid inputs): Adjust.
2002-06-15 18:21:46 +00:00
Akim Demaille
8efe435c05 * src/parse-gram.y (YYLLOC_DEFAULT, current_lhs_location): New.
(input): Don't try to initialize yylloc here, do it in the
scanner.
* src/scan-gram.l (YY_USER_INIT): Initialize yylloc.
* src/gram.h (rule_t): Change line and action_line into location
and action_location, of location_t type.
Adjust all dependencies.
* src/location.h, src/location.c (empty_location): New.
* src/reader.h, src/reader.c (grammar_start_symbol_set)
(grammar_symbol_append, grammar_rule_begin, grammar_rule_end)
(grammar_current_rule_symbol_append)
(grammar_current_rule_action_append): Expect a location as argument.
* src/reader.c (grammar_midrule_action): Adjust to attach an
action's location as dummy symbol location.
* src/symtab.h, src/symtab.c (startsymbol_location): New.
* tests/regression.at (Web2c Report, Rule Line Numbers): Adjust
the line numbers.
2002-06-15 18:21:11 +00:00
Akim Demaille
1921f1d7a4 Grammar declarations may be found in the grammar section.
* src/parse-gram.y (rules_or_grammar_declaration): New.
(declarations): Each declaration may end with a semicolon, not
just...
(grammar_declaration): `"%union"'.
(grammar): Branch to rules_or_grammar_declaration.
2002-06-14 17:38:14 +00:00
Akim Demaille
2c5690250c * src/parse-gram.y (directives, directive, gram)
(grammar_directives, precedence_directives, precedence_directive):
Rename as...
(declarations, declaration, grammar, grammar_declaration)
(precedence_declaration, precedence_declarator): these.
(symbol_declaration): New.
2002-06-14 17:36:44 +00:00
Akim Demaille
0c15323de7 * src/location.h: New, extracted from...
* src/reader.h: here.
* src/Makefile.am (noinst_HEADERS): Merge into
(bison_SOURCES): this.
Add location.h.
* src/parse-gram.y: Use location_t instead of Bison's.
* src/reader.h, src/reader.c (prologue_augment, epilogue_set):
Use location_t instead of ints.
2002-06-14 17:35:45 +00:00