diff options
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/c/bistromathic/bistromathic.test | 4 | ||||
-rw-r--r-- | examples/c/bistromathic/parse.y | 4 | ||||
-rw-r--r-- | examples/java/calc/Calc.test | 4 | ||||
-rw-r--r-- | examples/java/calc/Calc.y | 26 |
4 files changed, 29 insertions, 9 deletions
diff --git a/examples/c/bistromathic/bistromathic.test b/examples/c/bistromathic/bistromathic.test index 89ebcb40..116c7575 100755 --- a/examples/c/bistromathic/bistromathic.test +++ b/examples/c/bistromathic/bistromathic.test @@ -45,9 +45,9 @@ run 0 '0.16 cat >input <<EOF * EOF -run 0 "err: 1.1: syntax error expected end of file or - or ( or end of line or double precision number or function or variable before *" +run 0 "err: 1.1: syntax error: expected end of file or - or ( or end of line or double precision number or function or variable before *" cat >input <<EOF 1 + 2 * * 3 EOF -run 0 "err: 1.9: syntax error expected - or ( or double precision number or function or variable before *" +run 0 "err: 1.9: syntax error: expected - or ( or double precision number or function or variable before *" diff --git a/examples/c/bistromathic/parse.y b/examples/c/bistromathic/parse.y index cac38f32..1fa9c081 100644 --- a/examples/c/bistromathic/parse.y +++ b/examples/c/bistromathic/parse.y @@ -200,8 +200,8 @@ yyreport_syntax_error (const yyparse_context_t *ctx) YY_LOCATION_PRINT (stderr, *yyparse_context_location (ctx)); fprintf (stderr, ": syntax error"); for (int i = 1; i < n; ++i) - fprintf (stderr, " %s %s", - i == 1 ? "expected" : "or", yysymbol_name (arg[i])); + fprintf (stderr, "%s %s", + i == 1 ? ": expected" : " or", yysymbol_name (arg[i])); if (n) fprintf (stderr, " before %s", yysymbol_name (arg[0])); fprintf (stderr, "\n"); diff --git a/examples/java/calc/Calc.test b/examples/java/calc/Calc.test index 8664e314..7d96015a 100644 --- a/examples/java/calc/Calc.test +++ b/examples/java/calc/Calc.test @@ -30,9 +30,9 @@ run 0 '7 cat >input <<EOF 1 + 2 * * 3 EOF -run 0 "err: 1.9-1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'" +run 0 "err: 1.9-1.10: syntax error: expected number or '-' or '(' or '!' before '*'" cat >input <<EOF 12 222 EOF -run 0 "err: 1.6-1.9: syntax error, unexpected number" +run 0 "err: 1.6-1.9: syntax error: expected end of line or '=' or '-' or '+' or '*' or '/' or '^' before number" diff --git a/examples/java/calc/Calc.y b/examples/java/calc/Calc.y index 2ae09bad..bc832aba 100644 --- a/examples/java/calc/Calc.y +++ b/examples/java/calc/Calc.y @@ -3,7 +3,7 @@ %define api.parser.class {Calc} %define api.parser.public -%define parse.error detailed +%define parse.error custom %define parse.trace %locations @@ -29,10 +29,17 @@ if (!p.parse ()) System.exit (1); } + + static String _ (String s) + { + return s; + } } /* Bison Declarations */ -%token <Integer> NUM "number" +%token + '\n' _("end of line") + <Integer> NUM _("number") %type <Integer> exp %nonassoc '=' /* comparison */ @@ -73,7 +80,6 @@ exp: | '-' error { $$ = 0; return YYERROR; } ; - %% class CalcLexer implements Calc.Lexer { @@ -100,6 +106,20 @@ class CalcLexer implements Calc.Lexer { return end; } + public void yyreportSyntaxError (Calc.Context ctx) + { + final int ARGMAX = 10; + int[] arg = new int[ARGMAX]; + int n = Calc.yysyntaxErrorArguments (ctx, arg, ARGMAX); + System.err.print (ctx.yylocation + ": syntax error"); + for (int i = 1; i < n; ++i) + System.err.print ((i == 1 ? ": expected " : " or ") + + Calc.yysymbolName (arg[i])); + if (n != 0) + System.err.print (" before " + Calc.yysymbolName (arg[0])); + System.err.println (""); + } + public void yyerror (Calc.Location l, String s) { if (l == null) |