* tests/sets.at (Broken Closure): Add the ending `;'.

* tests/input.at (Invalid $n, Invalid @n): Likewise.
* tests/output.at (AT_CHECK_OUTPUT): Likewise.
* src/reader.at (readgram): Complain if a rule is not ended with a
semi-colon.
This commit is contained in:
Akim Demaille
2002-03-04 14:57:46 +00:00
parent 6f8dd2075e
commit bae3c8d209
7 changed files with 36 additions and 16 deletions

View File

@@ -1,3 +1,11 @@
2002-03-04 Akim Demaille <akim@epita.fr>
* tests/sets.at (Broken Closure): Add the ending `;'.
* tests/input.at (Invalid $n, Invalid @n): Likewise.
* tests/output.at (AT_CHECK_OUTPUT): Likewise.
* src/reader.at (readgram): Complain if a rule is not ended with a
semi-colon.
2002-02-28 Akim Demaille <akim@epita.fr> 2002-02-28 Akim Demaille <akim@epita.fr>
* tests/Makefile.am (check_SCRIPTS): New. * tests/Makefile.am (check_SCRIPTS): New.

9
NEWS
View File

@@ -1,7 +1,14 @@
Bison News Bison News
---------- ----------
Changes in version 1.33a: Changes in version 1.33b:
* A missing `;' ending a rule triggers a warning
In accordance with POSIX, and in agreement with other
Yacc implementations, Bison will mandate this semicolon in a near
future. This eases the implementation of a Bison parser of Bison
grammars by making this grammar LALR(1) instead of LR(2). To
facilitate the transition, this release introduces a warning.
* Revert the C++ namespace changes introduced in 1.31, as they caused too * Revert the C++ namespace changes introduced in 1.31, as they caused too
many portability hassles. many portability hassles.

View File

@@ -1440,7 +1440,10 @@ readgram (void)
unlex (t1); unlex (t1);
symval = ssave; symval = ssave;
if (t1 == tok_colon) if (t1 == tok_colon)
break; {
complain (_("previous rule lacks an ending `;'"));
break;
}
if (!first_rhs) /* JF */ if (!first_rhs) /* JF */
first_rhs = symval; first_rhs = symval;
@@ -1549,6 +1552,8 @@ readgram (void)
/* Warn if there is no default for $$ but we need one. */ /* Warn if there is no default for $$ but we need one. */
else if (!xactions && !first_rhs && lhs->type_name != 0) else if (!xactions && !first_rhs && lhs->type_name != 0)
complain (_("empty rule for typed nonterminal, and no action")); complain (_("empty rule for typed nonterminal, and no action"));
if (t == tok_two_percents || t == tok_eof)
complain (_("previous rule lacks an ending `;'"));
if (t == tok_semicolon) if (t == tok_semicolon)
t = lex (); t = lex ();
} }
@@ -1585,7 +1590,7 @@ readgram (void)
} }
else if (t == tok_start) else if (t == tok_start)
{ {
parse_start_decl (); parse_start_decl (;)
t = lex (); t = lex ();
} }
#endif #endif

View File

@@ -29,7 +29,7 @@ AT_SETUP([Invalid $n])
AT_DATA([input.y], AT_DATA([input.y],
[[%% [[%%
exp: { $$ = $1 ; } exp: { $$ = $1 ; };
]]) ]])
AT_CHECK([bison input.y], [1], [], AT_CHECK([bison input.y], [1], [],
@@ -48,7 +48,7 @@ AT_SETUP([Invalid @n])
AT_DATA([input.y], AT_DATA([input.y],
[[%% [[%%
exp: { @$ = @1 ; } exp: { @$ = @1 ; };
]]) ]])
AT_CHECK([bison input.y], [1], [], AT_CHECK([bison input.y], [1], [],

View File

@@ -26,7 +26,7 @@ m4_define([AT_CHECK_OUTPUT],
AT_DATA([$1], AT_DATA([$1],
[[$2 [[$2
%% %%
foo: {} foo: {};
]]) ]])
AT_CHECK([bison $3 $1], 0) AT_CHECK([bison $3 $1], 0)

View File

@@ -103,7 +103,7 @@ AT_DATA([input.y],
[[/* Bison used to swallow the character after `}'. */ [[/* Bison used to swallow the character after `}'. */
%% %%
exp: { tests = {{{{{{{{{{}}}}}}}}}}; } exp: { tests = {{{{{{{{{{}}}}}}}}}}; };
%% %%
]]) ]])
@@ -382,7 +382,7 @@ expr:
{ {
} };
]]) ]])
AT_CHECK([bison input.y -o input.c -v], 0, [], []) AT_CHECK([bison input.y -o input.c -v], 0, [], [])

View File

@@ -161,14 +161,14 @@ AT_SETUP([Broken Closure])
AT_DATA([input.y], AT_DATA([input.y],
[[%% [[%%
a: b a: b;
b: c b: c;
c: d c: d;
d: e d: e;
e: f e: f;
f: g f: g;
g: h g: h;
h: 'h' h: 'h';
]]) ]])
AT_CHECK([bison --trace input.y 2>&1 | AT_CHECK([bison --trace input.y 2>&1 |