* tests/calc.at (AT_CHECK_CALC): Check different scenarios of

error recovery, mixing with/without pops and discarding of the
lookahead.
Exercise YYERROR.
Disable the lalr1.cc tests as currently it doesn't support YYERROR.
This commit is contained in:
Akim Demaille
2003-02-19 13:40:53 +00:00
parent da99a5dc03
commit 0b86fc416c
2 changed files with 44 additions and 11 deletions

View File

@@ -1,3 +1,11 @@
2003-02-19 Akim Demaille <akim@epita.fr>
* tests/calc.at (AT_CHECK_CALC): Check different scenarios of
error recovery, mixing with/without pops and discarding of the
lookahead.
Exercise YYERROR.
Disable the lalr1.cc tests as currently it doesn't support YYERROR.
2003-02-17 Paul Eggert <eggert@twinsun.com> 2003-02-17 Paul Eggert <eggert@twinsun.com>
* tests/atlocal.in (LDFLAGS, LIBS): New vars. * tests/atlocal.in (LDFLAGS, LIBS): New vars.

View File

@@ -116,7 +116,8 @@ exp:
| '-' exp %prec NEG { $$ = -$2; } | '-' exp %prec NEG { $$ = -$2; }
| exp '^' exp { $$ = power ($1, $3); } | exp '^' exp { $$ = power ($1, $3); }
| '(' exp ')' { $$ = $2; } | '(' exp ')' { $$ = $2; }
| '(' error ')' { $$ = 0; } | '(' error ')' { $$ = 1111; }
| '!' { YYERROR; }
; ;
%% %%
/* The input. */ /* The input. */
@@ -559,9 +560,9 @@ _AT_CHECK_CALC([$1],
_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [11], _AT_CHECK_CALC_ERROR([$1], [1], [0 0], [11],
[1.2: syntax error, unexpected "number"]) [1.2: syntax error, unexpected "number"])
_AT_CHECK_CALC_ERROR([$1], [1], [1//2], [15], _AT_CHECK_CALC_ERROR([$1], [1], [1//2], [15],
[1.2: syntax error, unexpected '/', expecting "number" or '-' or '(']) [1.2: syntax error, unexpected '/', expecting "number" or '-' or '(' or '!'])
_AT_CHECK_CALC_ERROR([$1], [1], [error], [4], _AT_CHECK_CALC_ERROR([$1], [1], [error], [4],
[1.0: syntax error, unexpected $undefined, expecting "number" or '-' or '\n' or '(']) [1.0: syntax error, unexpected $undefined])
_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [22], _AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [22],
[1.6: syntax error, unexpected '=']) [1.6: syntax error, unexpected '='])
_AT_CHECK_CALC_ERROR([$1], [1], _AT_CHECK_CALC_ERROR([$1], [1],
@@ -571,16 +572,38 @@ _AT_CHECK_CALC_ERROR([$1], [1],
[2.0: syntax error, unexpected '+']) [2.0: syntax error, unexpected '+'])
# Exercise error messages with EOF: work on an empty file. # Exercise error messages with EOF: work on an empty file.
_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4], _AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4],
[1.0: syntax error, unexpected "end of input", expecting "number" or '-' or '\n' or '(']) [1.0: syntax error, unexpected "end of input"])
# Exercise the error token: without it, we die at the first error, # Exercise the error token: without it, we die at the first error,
# hence be sure i. to have several errors, ii. to test the action # hence be sure to
# associated to `error'. #
_AT_CHECK_CALC_ERROR([$1], [0], [(1 ++ 2) + (0 0) = 1], [82], # - have several errors which exercise different shift/discardings
[1.4: syntax error, unexpected '+', expecting "number" or '-' or '(' # - (): nothing to pop, nothing to discard
1.14: syntax error, unexpected "number" # - (1 + 1 + 1 +): a lot to pop, nothing to discard
calc: error: 0 != 1]) # - (* * *): nothing to pop, a lot to discard
# - (1 + 2 * *): some to pop and discard
#
# - test the action associated to `error'
#
# - check the lookahead that triggers an error is not discarded
# when we enter error recovery. Below, the lookahead causing the
# first error is ")", which is needed to recover from the error and
# produce the "0" that triggers the "0 != 1" error.
#
_AT_CHECK_CALC_ERROR([$1], [0],
[() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1],
[156],
[1.1: syntax error, unexpected ')', expecting "number" or '-' or '(' or '!'
1.17: syntax error, unexpected ')', expecting "number" or '-' or '(' or '!'
1.22: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!'
1.40: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!'
calc: error: 4444 != 1])
# The same, but this time exercising explicitly triggered syntax errors.
# POSIX says the lookahead causing the error should not be discarded.
_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [64],
[1.9: syntax error, unexpected "number"
calc: error: 2222 != 1])
AT_CHECK_POPDEFS AT_CHECK_POPDEFS
AT_CLEANUP AT_CLEANUP
@@ -673,7 +696,9 @@ m4_define([AT_CHECK_CALC_LALR1_CC],
# AT_CHECK_CALC_LALR1_CC() # AT_CHECK_CALC_LALR1_CC()
AT_CHECK_CALC_LALR1_CC([%defines %pure-parser %locations]) # FIXME: YYERROR is not supported
# AT_CHECK_CALC_LALR1_CC([%defines %pure-parser %locations])
# AT_CHECK_CALC_LALR1_CC([%defines]) # AT_CHECK_CALC_LALR1_CC([%defines])
# AT_CHECK_CALC_LALR1_CC([%locations]) # AT_CHECK_CALC_LALR1_CC([%locations])
# AT_CHECK_CALC_LALR1_CC([%name-prefix="calc"]) # AT_CHECK_CALC_LALR1_CC([%name-prefix="calc"])