summaryrefslogtreecommitdiff
path: root/tests/regression.at
Commit message (Collapse)AuthorAgeFilesLines
* maint: don’t use \] in BREs and EREsPaul Eggert2022-07-311-4/+4
| | | | | | | | | * .travis.yml (jobs): * doc/local.mk ($(top_srcdir)/%D%/bison.help): * tests/regression.at (Web2c Actions, Useless Tokens): * tests/scanner.at (Token numbers: $1): Use plain ], not \], in a POSIX regular expression, as POSIX says the interpretation of \] is undefined.
* package: bump copyrights to 2022Paul Eggert2022-01-151-1/+1
| | | | Run "make update-copyright".
* tests: check symbol/token renumberingAkim Demaille2021-08-111-1/+297
| | | | | | | | | In some extreme situations, with lots of useless tokens, Bison was numbering them incorrectly, which resulted in a broken grammar. <https://lists.gnu.org/r/bison-patches/2021-03/msg00001.html> commit a774839ca873d1082f79ba3c4eecc1e242a28ce1. * tests/regression.at (Useless Tokens): New.
* yacc: comply with recent POSIX updates: declare yyerror and yylexAkim Demaille2021-08-091-2/+2
| | | | | | | | | | | | | | | | | | | | | In POSIX Yacc mode, declare yyerror and yylex unless already #defined, or if YYERROR_IS_DECLARED/YYLEX_IS_DECLARED are defined (for consistency with Bison's YYSTYPE_IS_DECLARED/YYLTYPE_IS_DECLARED). See <https://austingroupbugs.net/view.php?id=1388#c5220>. * data/skeletons/c.m4 (b4_function_declare): Resurect. (b4_lex_formals): Since we will possibly expose this prototype in the header, take the prefix into account. * data/skeletons/yacc.c (b4_declare_yyerror_and_yylex): New. (b4_shared_declarations): Use it. * tests/local.at (AT_YACC_IF): New. When in Yacc mode, set the `yacc` Autotest keyword. (AT_YYERROR_DECLARE(c)): Don't declare in Yacc mode, to avoid clashes (since this signature is static). (AT_YYERROR_DEFINE(c)): Don't define as static in Yacc mode. * tests/regression.at (Early token definitions with --yacc): Specify that we are in Yacc mode.
* d: prepare to be able to run LAC testsAkim Demaille2021-08-071-1/+9
| | | | | | | | | | Unfortunately it seems to be quite difficult to have "LAC: Exploratory stack" run for D. * data/skeletons/lalr1.d: We need File when traces are enabled. * tests/local.at (AT_YYLEX_DEFINE(d)): New. * tests/regression.at: Prepare for D, but don't run it, it does not work.
* tests: adjust to the removal of YYPRINTAkim Demaille2021-02-011-4/+0
| | | | * tests/regression.at: here.
* Update URLs to prefer https: to http:Paul Eggert2021-01-291-1/+1
| | | | Also, fix a few http: URLs that were no longer working.
* package: bump copyrights to 2021Akim Demaille2021-01-161-1/+1
| | | | Run 'make update-copyright'.
* tables: avoid warnings and save bitsAkim Demaille2020-12-031-1/+1
| | | | | | | | | | | | | | | | The yydefgoto table uses -1 as an invalid for an impossible case (we never use yydefgoto[0], since it corresponds to the reduction to $accept, which never happens). Since yydefgoto is a table of state numbers, this -1 forces a signed type uselessly, which (1) might trigger compiler warnings when storing a value from yydefgoto into a state number (nonnegative), and (2) wastes bits which might result in using a int16 where a uint8 suffices. Reported by Jot Dot <jotdot@shaw.ca>. https://lists.gnu.org/r/bug-bison/2020-11/msg00027.html * src/tables.c (default_goto): Use 0 rather than -1 as invalid value. * tests/regression.at: Adjust.
* java: lac: a stronger test for the exploratory stackAkim Demaille2020-11-061-4/+21
| | | | | | * tests/local.at (AT_YYLEX_DEFINE(java)): Fix overquoting issue. Style changes. * tests/regression.at (LAC: Exploratory stack): Run for lalr1.java too.
* deprecate %defines in favor of %headerAkim Demaille2020-09-191-1/+1
| | | | | | | | | | | | | | | | | This is consistent with --defines being deprecated in favor of --header. The directive %defines is also too similar to %define. And %header matches nicely with api.header.name. * src/scan-gram.l (%defines): Deprecate to %header. (%header): Scan it. * src/parse-gram.y (PERCENT_DEFINES): Replace with... (PERCENT_HEADER): this. * data/skeletons/lalr1.java * doc/bison.texi * tests/actions.at, tests/c++.at, tests/calc.at, tests/conflicts.at, * tests/input.at, tests/java.at, tests/local.at, tests/output.at, * tests/synclines.at, tests/types.at: Convert most tests to check %header instead of %defines.
* glr.cc, glr2.cc: don't publish compiler pragmasAkim Demaille2020-09-131-1/+2
| | | | | | | | | | | | | | | Currently the compiler attributes are defined in b4_shared_declarations (that can in the header if it exists, otherwise in the implementation file). This is not needed, only the implementation file needs them. Besides, glr2.cc was also defining these macros in the implementation file, so we had two definitions. * data/skeletons/glr.cc, data/skeletons/glr2.cc: Define the compiler attribute macros only in the implementation files. * tests/regression.at (Lex and parse params): Generate a header, to make it easy to check that the header is self-sufficient.
* glr2.cc: fork glr.cc to a c++ versionValentin Tolmer2020-08-301-0/+1
| | | | | | | | | | | | | This is a fork of glr.cc to be c++-first instead of a wrapper around glr.c. * data/skeletons/glr2.cc: New. * data/skeletons/bison.m4, data/skeletons/c++.m4: Adjust. * data/skeletons/c.m4 (b4_user_args_no_comma): New. * src/reader.c (grammar_rule_check_and_complete): glr2.cc is C++. * tests/actions.at, tests/c++.at, tests/calc.at, tests/conflicts.at, * tests/input.at, tests/local.at, tests/regression.at, tests/scanner.at, * tests/synclines.at, tests/types.at: Also check glr2.cc.
* parser: keep string aliases as the user wrote itAkim Demaille2020-06-131-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently our scanner decodes all the escapes in the strings, and we later reescape the strings when we emit them. This is troublesome, as we do not respect the user input. For instance, when the user writes in UTF-8, we destroy her string when we write it back. And this shows everywhere: in the reports we show the escaped string instead of the actual alias: 0 $accept: . exp $end 1 exp: . exp "\342\212\225" exp 2 | . exp "+" exp 3 | . exp "+" exp 4 | . "number" 5 | . "\303\221\303\271\341\271\203\303\251\342\204\235\303\264" "number" shift, and go to state 1 "\303\221\303\271\341\271\203\303\251\342\204\235\303\264" shift, and go to state 2 This commit preserves the user's exact spelling of the string aliases, instead of interpreting the escapes and then reescaping. The report now shows: 0 $accept: . exp $end 1 exp: . exp "⊕" exp 2 | . exp "+" exp 3 | . exp "+" exp 4 | . "number" 5 | . "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 Likewise, the XML (and therefore HTML) outputs are fixed. * src/scan-gram.l (STRING, TSTRING): Do not interpret the escapes in the resulting string. * src/parse-gram.y (unquote, parser_init, parser_free, unquote_free) (handle_defines, handle_language, obstack_for_unquote): New. Use them to unquote where needed. * tests/regression.at, tests/report.at: Update.
* CI: add GCC 10 and Clang 10Akim Demaille2020-05-171-6/+17
| | | | | * .travis.yml: Here. * tests/input.at, tests/regression.at: Beware of clang's -Wdocumentation.
* doc: spell checkAkim Demaille2020-04-131-1/+1
| | | | | * doc/bison.texi, NEWS, README-hacking.md: here. And elsewhere.
* doc: promote yytoken_kind_t, not yytokentypeAkim Demaille2020-04-121-2/+3
| | | | | | | | | | | | | | | | * data/skeletons/c.m4 (yytoken_kind_t): New. * data/skeletons/c++.m4, data/skeletons/lalr1.cc (yysymbol_kind_type): New. * examples/c/lexcalc/parse.y, examples/c/reccalc/parse.y, * tests/regression.at: Use them. * doc/bison.texi: Replace "enum yytokentype" by "yytoken_kind_t". (api.token.raw): Explain that it forces "yytoken_kind_t" to coincide with "yysymbol_kind_t". (Calling Convention): Mention YYEOF. (Table of Symbols): Add entries for "yytoken_kind_t" and "yysymbol_kind_t". (Glossary): Add entries for "Kind", "Token kind" and "Symbol kind".
* skeletons: use "invalid token" instead of "$undefined"Akim Demaille2020-04-121-5/+5
| | | | | * src/output.c (prepare_symbol_names): Also handle undeftoken. * tests/actions.at, tests/calc.at, tests/regression.at: Adjust.
* skeletons: use "end of file" instead of "$end"Akim Demaille2020-04-121-8/+9
| | | | | | | | | | | | | | | | | | | | | | | | The name "$end" is nice in the report, in particular it avoids that pointed-rules (aka items) be too long. It also helps keeping them "standard". But it is bad in error messages, we should report "end of file" (or maybe "end of input", this is debatable). So, unless the user already defined the alias for the error token herself, make it "end of file". It should even be translated if the user already translated some tokens, so that there is now no strong reason to redefine the $end token. * src/output.c (prepare_symbol_names): Issue "end of file" instead of "$end". * data/skeletons/lalr1.java (yytnamerr_): Remove the renaming hack. * build-aux/update-test: Accept files with names containing a "+", such as c++.at. * tests/actions.at, tests/c++.at, tests/conflicts.at, * tests/glr-regression.at, tests/regression.at, tests/skeletons.at: Adjust.
* yacc.c: revert to not using yysymbol_type_t in the yytranslate tableAkim Demaille2020-04-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This triggers warnings with several compilers. For instance ICC fills the logs with pages and pages of input.c(477): error: a value of type "int" cannot be used to initialize an entity of type "const yysymbol_type_t={yysymbol_type_t}" 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, ^ input.c(477): error: a value of type "int" cannot be used to initialize an entity of type "const yysymbol_type_t={yysymbol_type_t}" 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, ^ And so does G++9 when compiling yacc.c's (C) output input.c:545:8: error: invalid conversion from 'int' to 'yysymbol_type_t' [-fpermissive] 545 | 0, 5, 9, 2, 2, 2, 2, 2, 2, 2, | ^ | | | int input.c:545:15: error: invalid conversion from 'int' to 'yysymbol_type_t' [-fpermissive] 545 | 0, 5, 9, 2, 2, 2, 2, 2, 2, 2, | ^ | | | int Clang++ is no exception input.c:545:8: error: cannot initialize an array element of type 'const yysymbol_type_t' with an rvalue of type 'int' 0, 5, 9, 2, 2, 2, 2, 2, 2, 2, ^ input.c:545:15: error: cannot initialize an array element of type 'const yysymbol_type_t' with an rvalue of type 'int' 0, 5, 9, 2, 2, 2, 2, 2, 2, 2, ^ At some point we could use yysymbol_type_t's enumerators to define yytranslate. Meanwhile... * data/skeletons/yacc.c (yytranslate): Use the original integral type to define it. (YYTRANSLATE): Cast the result into yysymbol_type_t.
* yacc.c: also define a symbol number for the empty tokenAkim Demaille2020-04-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is not only cleaner, it also protects us from mixing signed values (YYEMPTY is #defined as -2) with unsigned types (the yysymbol_type_t enum is typically compiled as a small unsigned). For instance GCC 9: input.c: In function 'yyparse': input.c:1107:7: error: conversion to 'unsigned int' from 'int' may change the sign of the result [-Werror=sign-conversion] 1107 | yyn += yytoken; | ^~ input.c:1107:10: error: conversion to 'int' from 'unsigned int' may change the sign of the result [-Werror=sign-conversion] 1107 | yyn += yytoken; | ^~~~~~~ input.c:1108:47: error: comparison of integer expressions of different signedness: 'yytype_int8' {aka 'const signed char'} and 'yysymbol_type_t' {aka 'enum yysymbol_type_t'} [-Werror=sign-compare] 1108 | if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) | ^~ input.c:702:25: error: operand of ?: changes signedness from 'int' to 'unsigned int' due to unsignedness of other operand [-Werror=sign-compare] 702 | #define YYEMPTY (-2) | ^~~~ input.c:1220:33: note: in expansion of macro 'YYEMPTY' 1220 | yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); | ^~~~~~~ input.c:1220:41: error: unsigned conversion from 'int' to 'unsigned int' changes value from '-2' to '4294967294' [-Werror=sign-conversion] 1220 | yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); | ^ Eventually, it might be interesting to move away from -2 (which is the only possible negative symbol number) and use the next available number, to save bits. We could actually even simply use "0" and shift the rest, which would allow to write "!yytoken" to mean really "yytoken != YYEMPTY". * data/skeletons/c.m4 (b4_declare_symbol_enum): Define YYSYMBOL_YYEMPTY. * data/skeletons/yacc.c: Use it. * src/parse-gram.y (yyreport_syntax_error): Use YYSYMBOL_YYEMPTY, not YYEMPTY, when dealing with a symbol. * tests/regression.at: Adjust.
* diagnostics: modernize the display of submessagesVictor Morales Cayuela2020-02-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Since Bison 2.7, output was indented four spaces for explanatory statements. For example: input.y:2.7-13: error: %type redeclaration for exp input.y:1.7-11: previous declaration Since the introduction of caret-diagnostics, it became less clear. Remove the indentation and display submessages as in GCC: input.y:2.7-13: error: %type redeclaration for exp 2 | %type <float> exp | ^~~~~~~ input.y:1.7-11: note: previous declaration 1 | %type <int> exp | ^~~~~ * src/complain.h (SUB_INDENT): Remove. (warnings): Add "note" to the enum. * src/complain.h, src/complain.c (complain_indent): Replace by... (subcomplain): this. Adjust all dependencies. * tests/actions.at, tests/diagnostics.at, tests/glr-regression.at, * tests/input.at, tests/named-refs.at, tests/regression.at: Adjust expectations.
* traces: don't print the stack before the gotosAkim Demaille2020-02-051-1/+0
| | | | | | | | | | | | | | | | | | | | | The C, C++ and D skeletons used to show the stack right after popping the stack during the reduction. Now that the stack is printed after reaching a new state, that has become useless: Entering state 1 Stack now 0 1 Reducing stack by rule 5 (line 83): $1 = token "number" (1) -> $$ = nterm exp (1) Stack now 0 Entering state 8 Stack now 0 8 Remove the "Stack now 0" line. * data/skeletons/lalr1.cc, data/skeletons/lalr1.d, * data/skeletons/lalr1.java, data/skeletons/yacc.c: Here.
* traces: show the stack after reading a tokenAkim Demaille2020-02-051-0/+4
| | | | | | | | | | | | | | Currently, if we have long rules and series of shift, we stack states without showing stack. Let's be more incremental, and do how the Java skeleton does. * data/skeletons/lalr1.cc, data/skeletons/lalr1.d, * data/skeletons/yacc.c: Here. Adjust test cases. * tests/torture.at (AT_DATA_STACK_TORTURE): Disable stack traces: this test produces a very large stack, and showing the stack each time we shift a token goes quadatric.
* traces: write the "Reading a token" alone on its lineAkim Demaille2020-02-041-3/+6
| | | | | | | | | | | | | | | | | | | The Java skeleton displays Reading a token: Next token is token "number" (1) while the other display Reading a token: Next token is token "number" (1) When generating logs in the scanner, the first part is separated from the second, and the end of the scanner logs have the second part pasted in. So let's propagate the Java way, but with the colon. * data/skeletons/glr.c, data/skeletons/lalr1.cc, data/skeletons/lalr1.d, * data/skeletons/lalr1.java, data/skeletons/yacc.c: Do it. Adjust test cases and doc.
* tests: check that detailed error messages preserve UTF-8 charactersAkim Demaille2020-01-191-11/+4
| | | | * tests/regression.at: here.
* yacc.c: escape trigraphs in detailed parse.errorAkim Demaille2020-01-191-5/+16
| | | | | | | * src/output.c (escape_trigraphs, xescape_trigraphs): New. (prepare_symbol_names): Use it. * tests/regression.at: Check the handling of trigraphs with parse.error = detailed.
* package: bump copyrights to 2020Akim Demaille2020-01-051-1/+1
| | | | Run 'make update-copyright'.
* yacc: restructure and fix yysyntax_errorAkim Demaille2019-12-311-3/+17
| | | | | | | | | | | | | | | | | | | | | I would like to offer new ways to build the error message. As a first step, let's simplify yysyntax_error whose first loop does two things at the same time: (i) collect the tokens to be reported in the error message, and (ii) accumulate their sizes and possibly return "overflow". Let's pull (ii) in a second step. Then test 525 (regression.at:1193: parse.error=verbose overflow) failed. This test checks that we correctly report "memory overflow" when the error message is too large. However the test is mistaken: it is triggered in a place where there are five (large) expected tokens, so anyway we would not display them, so there is no (memory) overflow here! Transform this test to (i) check that indeed there is no overflow, and (ii) create syntax_error3 which does check the intended behavior, but with four expected tokens. * data/skeletons/yacc.c (yysyntax_error): First compute the list of arguments, then compute yysize. * tests/regression.at (parse.error=verbose overflow): Enhance and fix.
* tests: refactor the handling of PerlAkim Demaille2019-10-131-6/+5
| | | | | | | | | | | | | | Let's make a difference between places where Perl is required for the test (AT_PERL_REQUIRE), and the places where it's used to run the test, but it's not not to run the test (AT_PERL_CHECK). * tests/local.at (AT_REQUIRE): New. (AT_PERL_CHECK, AT_PERL_REQUIRE): New. Use them where appropriate. * tests/local.mk ($(TESTSUITE)): Beware not to start the line with '-pi' if Perl is empty, as Make understands this as "it's ok to fail". Which it is not.
* tests: be really robust to Perl missingAkim Demaille2019-10-111-3/+3
| | | | | | | | | | | My previous tests (with ./configure PERL=false) have been fooled by configure, that managed to find perl anyway. This time, I ran this on a Fedora in Docker, without Perl. * tests/calc.at, tests/diagnostics.at, tests/headers.at, * tests/input.at, tests/local.at, tests/named-refs.at, * tests/output.at, tests/regression.at, tests/skeletons.at, * tests/synclines.at, tests/torture.at: Don't require Perl.
* tests: add missing includesAkim Demaille2019-10-101-1/+3
| | | | | * tests/actions.at, tests/c++.at, tests/headers.at, * tests/regression.at: here.
* Prefer signed types for indexes in skeletonsPaul Eggert2019-10-021-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * NEWS: Mention this. * data/skeletons/c.m4 (b4_int_type): Prefer char if it will do, and prefer signed types to unsigned if either will do. * data/skeletons/glr.c (yy_reduce_print): No need to convert rule line to unsigned long. (yyrecoverSyntaxError): Put action into an int to avoid GCC warning of using a char subscript. * data/skeletons/lalr1.cc (yy_lac_check_, yysyntax_error_): Prefer ptrdiff_t to size_t. * data/skeletons/yacc.c (b4_int_type): Prefer signed types to unsigned if either will do. * data/skeletons/yacc.c (b4_declare_parser_state_variables): (YYSTACK_RELOCATE, YYCOPY, yy_lac_stack_realloc, yy_lac) (yytnamerr, yysyntax_error, yyparse): Prefer ptrdiff_t to size_t. (YYPTRDIFF_T, YYPTRDIFF_MAXIMUM): New macros. (YYSIZE_T): Fix "! defined YYSIZE_T" typo. (YYSIZE_MAXIMUM): Take the minimum of PTRDIFF_MAX and SIZE_MAX. (YYSIZEOF): New macro. (YYSTACK_GAP_MAXIMUM, YYSTACK_BYTES, YYSTACK_RELOCATE) (yy_lac_stack_realloc, yyparse): Use it. (YYCOPY, yy_lac_stack_realloc): Cast to YYSIZE_T to pacify GCC. (yy_reduce_print): Use int instead of unsigned long when int will do. (yy_lac_stack_realloc): Prefer long to unsigned long when either will do. * tests/regression.at: Adjust to these changes.
* diagnostics: fix use of complain_indentAkim Demaille2019-09-141-1/+1
| | | | | | * src/symtab.c (symbol_class_set): Here. * tests/diagnostics.at, tests/input.at, tests/regression.at: Adjust expectations.
* tests: check token redeclarationAkim Demaille2019-09-071-5/+4
| | | | | | * src/symtab.c (symbol_class_set): Report previous definitions when redeclared. * tests/input.at (Symbol redeclared): New.
* lalr1.cc: check LAC supportAkim Demaille2019-08-091-0/+2
| | | | * tests/conflicts.at, tests/input.at, tests/regression.at: here.
* tests: prepare LAC tests for more languagesAkim Demaille2019-08-091-24/+19
| | | | | | | | * tests/regression.at: Use %expect to avoid warnings. Set the keywords to facilitate running specific tests. Use macros such as AT_YYLEX_DECLARE to facilitate tests for other languages. Likewise for AT_FULL_COMPILE.
* tests: prefer %emptyAkim Demaille2019-06-111-3/+3
| | | | * tests/regression.at: here.
* diagnostics: copy GCC9's formatAkim Demaille2019-04-231-4/+4
| | | | | | | | | | | | | | | | | | | | | | | Currently, when we quote the source file, we indent it with one space, and preserve tabulations, so there is a discrepancy and the visual rendering is bad. One way out is to indent with a tab instead of a space, but then this space can be used for more information. This is what GCC9 does. Let's play copy cats. See https://lists.gnu.org/archive/html/bison-patches/2019-04/msg00025.html https://developers.redhat.com/blog/2019/03/08/usability-improvements-in-gcc-9/ https://gcc.gnu.org/onlinedocs/gccint/Guidelines-for-Diagnostics.html#Guidelines-for-Diagnostics * src/location.c (location_caret): Prefix quoted lines with the line number and a pipe, fitting 8 columns. * tests/actions.at, tests/c++.at, tests/conflicts.at, * tests/diagnostics.at, tests/input.at, tests/java.at, * tests/named-refs.at, tests/reduce.at, tests/regression.at, * tests/sets.at: Adjust expectations. Partly by "./build-aux/update-test tests/testsuite.dir/*/testsuite.log" repeatedly, and partly by hand.
* tests: remove duplicatesAkim Demaille2019-03-131-52/+0
| | | | | * tests/regression.at (Invalid inputs, Invalid inputs with {}): Remove, there are exact copies of them in input.at.
* tests: simplify AT_PARSER_CHECK usageAkim Demaille2019-02-211-11/+11
| | | | | | | | | Currently the caller must specify the ./ prefix to its command. Let's avoid that: it will be nicer to read, make it easier to have a version that works for Java and C/C++. * tests/local.at (AT_PARSER_CHECK): Prefix the command with ./. Adjust callers.
* report: clean up its formatAkim Demaille2019-02-091-29/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The format is inconsistent. For instance most sections are indented (including "Terminals unused in grammar" for instance), but the sections "Terminals, with rules where they appear" and "Nonterminals, with rules where they appear" are not. Let's indent them. Also, these two sections try to wrap the output to avoid lines too long. Yet we don't do that in the rest of the file, for instance when listing the lookaheads of an item. For instance in the case of Bison's parse-gram.output we go from: Terminals, with rules where they appear "end of file" (0) 0 error (256) 28 88 "string" <char*> (258) 9 13 16 17 20 23 24 109 116 [...] Nonterminals, with rules where they appear $accept (58) on left: 0 input (59) on left: 1, on right: 0 prologue_declarations (60) on left: 2 3, on right: 1 3 prologue_declaration (61) on left: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29, on right: 3 [...] to Terminals, with rules where they appear "end of file" (0) 0 error (256) 28 88 "string" <char*> (258) 9 13 16 17 20 23 24 109 116 [...] Nonterminals, with rules where they appear $accept (58) on left: 0 input (59) on left: 1 on right: 0 prologue_declarations (60) on left: 2 3 on right: 1 3 prologue_declaration (61) on left: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 on right: 3 [...] * src/print.c (END_TEST): Remove. (print_terminal_symbols): Don't try to wrap the output. (print_nonterminal_symbols): Likewise. Make two different lines for occurrences on the left, and occurrence on the rhs of the rules. Indent by 4 and 8, not 3. * src/reduce.c (reduce_output): Indent by 4, not 3. * tests/conflicts.at, tests/existing.at, tests/reduce.at, * tests/regression.at, tests/report.at: Adjust.
* diagnostics: prefer ^~~~ to ^^^^ to underline codeAkim Demaille2019-01-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | That's what both GCC and Clang do, and it is indeed much nicer to read. From: foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated] %error-verbose ^^^^^^^^^^^^^^ foo.y:4.1-20: warning: deprecated directive, use '%define api.prefix {foo}' [-Wdeprecated] %name-prefix = "foo" ^^^^^^^^^^^^^^^^^^^^ to: foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated] %error-verbose ^~~~~~~~~~~~~~ foo.y:4.1-20: warning: deprecated directive, use '%define api.prefix {foo}' [-Wdeprecated] %name-prefix = "foo" ^~~~~~~~~~~~~~~~~~~~ * src/location.c (location_caret): Use ^~~~. Adjust tests expectations.
* NEWS: updateAkim Demaille2019-01-121-2/+2
|
* tests: formatting changesAkim Demaille2019-01-121-0/+1
| | | | * tests/input.at, tests/regression.at: here.
* package: bump copyrights to 2019Akim Demaille2019-01-051-1/+1
|
* symbols: clean up their parsingAkim Demaille2018-12-161-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prompted by Rici Lake. http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html We have four classes of directives that declare symbols: %nterm, %type, %token, and the family of %left etc. Currently not all of them support the possibility to have several type tags (`<type>`), and not all of them support the fact of not having any type tag at all (%type). Let's unify this. - %type POSIX Yacc specifies that %type is for nonterminals only. However, some Bison users want to use it for both tokens and nterms (actually, Bison's own grammar does this in several places, e.g., CHAR). So it should accept char/string literals. As a consequence cannot be used to declare tokens with their alias: `%type foo "foo"` would be ambiguous (are we defining foo = "foo", or are these two different symbols?) POSIX specifies that it is OK to use %type without a type tag. I'm not sure what it means, but we support it. - %token Accept token declarations with number and string literal: (ID|CHAR) NUM? STRING?. - %left, etc. They cannot be the same as %token, because we accept to declare the symbol with %token, and to then qualify its precedence with %left. Then `%left foo "foo"` would also be ambiguous: foo="foo", or two symbols. They cannot be simply a list of identifiers, but POSIX Yacc says we can declare token numbers here. I personally think this is a bad idea, precedence management is tricky in itself and should not be cluttered with token declaration issues. We used to accept declaring a token number on a string literal here (e.g., `%left "token" 1`). This is abnormal. Either the feature is useful, and then it should be supported in %token, or it's useless and we should not support it in corner cases. - %nterm Obviously cannot accept tokens, nor char/string literals. Does not exist in POSIX Yacc, but since %type also works for terminals, it is a nice option to have. * src/parse-gram.y: Avoid relying on side effects. For instance, get rid of current_type, rather, build the list of symbols and iterate over it to assign the type. It's not always possible/convenient. For instance, we still use current_class. Prefer "decl" to "def", since in the rest of the implementation we actually "declare" symbols, we don't "define" them. (token_decls, token_decls_for_prec, symbol_decls, nterm_decls): New. Use them for %token, %left, %type and %nterm. * src/symlist.h, src/symlist.c (symbol_list_type_set): New. * tests/regression.at b/tests/regression.at (Token number in precedence declaration): We no longer accept to give a number to string literals.
* parser: improve location of string alias errorsAkim Demaille2018-11-291-32/+3
| | | | | | | * src/parse-gram.y (symbol_def): Pass the right location for symbol_make_alias. * tests/regression.at (Duplicate string): Move to... * tests/input.at: here. (Token collisions): New.
* diagnostics: complain about Bison directives when -WyaccAkim Demaille2018-11-291-1/+3
| | | | | | * src/complain.h, src/complain.c (bison_directive): New. * src/scan-gram.l (BISON_DIRECTIVE): New. Use it for Bison extensions.
* tests: migrate from %error-verbose to %define parse.error verboseAkim Demaille2018-11-121-7/+7
| | | | | | | | | * tests/actions.at, tests/c++.at, tests/conflicts.at, * tests/cxx-type.at, tests/existing.at, tests/glr-regression.at, * tests/headers.at, tests/input.at, tests/java.at, tests/javapush.at, * tests/local.at, tests/regression.at, tests/skeletons.at, * tests/torture.at: Here.