X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/c932d6135ca3e508f7136810b9b0bf79725290b9..a0c45dd5d2697b726add2bbc81947e9cb98c2799:/tests/java.at diff --git a/tests/java.at b/tests/java.at index fd35cfd5..f822ec6e 100644 --- a/tests/java.at +++ b/tests/java.at @@ -32,6 +32,7 @@ AT_BANNER([[Java Calculator.]]) m4_define([_AT_DATA_JAVA_CALC_Y], [m4_if([$1$2$3], $[1]$[2]$[3], [], [m4_fatal([$0: Invalid arguments: $@])])dnl +AT_BISON_OPTION_PUSHDEFS([%language "Java" $4]) AT_DATA([Calc.y], [[/* Infix notation calculator--calc */ %language "Java" @@ -122,20 +123,8 @@ AT_LOCATION_IF([[ public Position getEndPos() { return yypos; } - - public void yyerror (Calc.Location l, String s) - { - if (l == null) - System.err.println (s); - else - System.err.println (l + ": " + s); - } -]], [[ - public void yyerror (String s) - { - System.err.println (s); - } ]])[ + ]AT_YYERROR_DEFINE[ Integer yylval; @@ -211,11 +200,12 @@ class Position { } ]]) +AT_BISON_OPTION_POPDEFS ])# _AT_DATA_JAVA_CALC_Y # AT_DATA_CALC_Y([BISON-OPTIONS]) -# ------------------------------------------------- +# ------------------------------- # Produce `calc.y'. m4_define([AT_DATA_JAVA_CALC_Y], [_AT_DATA_JAVA_CALC_Y($[1], $[2], $[3], [$1]) @@ -224,7 +214,7 @@ m4_define([AT_DATA_JAVA_CALC_Y], # _AT_CHECK_JAVA_CALC_ERROR(BISON-OPTIONS, INPUT, # [VERBOSE-AND-LOCATED-ERROR-MESSAGE]) -# --------------------------------------------------------- +# -------------------------------------------------------------- # Run `calc' on INPUT, and expect a `syntax error' message. # # If INPUT starts with a slash, it is used as absolute input file name, @@ -417,8 +407,8 @@ AT_JAVA_COMPILE([[YYParser.java]]) # AT_CHECK_JAVA_MINIMAL_W_LEXER([1:DIRECTIVES], [2:LEX_THROWS], -# [3:YYLEX_ACTION], [4:LEXER_BODY], [5:PARSER_ACTION], [6:STYPE], -# [7:POSITION_TYPE], [8:LOCATION_TYPE]) +# [3:YYLEX_ACTION], [4:LEXER_BODY], [5:PARSER_ACTION], [6:STYPE], +# [7:POSITION_TYPE], [8:LOCATION_TYPE]) # --------------------------------------------------------------------- # Check that a mininal parser with DIRECTIVES and a "%code lexer". # YYLEX is the body of yylex () which throws LEX_THROW. @@ -569,7 +559,7 @@ AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer) {]]) AT_CHECK_JAVA_MINIMAL([[%parse-param {int parse_param1}]]) AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]]) AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1) {]]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]]) AT_CHECK_JAVA_MINIMAL([[ %parse-param {int parse_param1} @@ -577,8 +567,8 @@ AT_CHECK_JAVA_MINIMAL([[ AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]]) AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]]) AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]]) AT_CHECK_JAVA_MINIMAL_W_LEXER([], [], [[return EOF;]]) AT_CHECK_JAVA_GREP([[ *public YYParser () {]]) @@ -589,7 +579,7 @@ AT_CHECK_JAVA_MINIMAL_W_LEXER([[%parse-param {int parse_param1}]], AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]]) AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1) {]]) AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1) {]]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2]) AT_CHECK_JAVA_MINIMAL_W_LEXER([[ %parse-param {int parse_param1} @@ -599,8 +589,8 @@ AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]]) AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]]) AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1, *long parse_param2) {]]) AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2]) AT_CHECK_JAVA_MINIMAL_W_LEXER([[%lex-param {char lex_param1}]], [], [[return EOF;]], [[YYLexer (char lex_param1) {}]]) @@ -625,8 +615,8 @@ AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]]) AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) {]]) AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1, *lex_param2);]]) AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2]) -AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param1 = parse_param1;]], [2]) +AT_CHECK_JAVA_GREP([[[ ]*this.parse_param2 = parse_param2;]], [2]) AT_CLEANUP @@ -749,3 +739,69 @@ AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Position']], [1], [ignore]) AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Location']], [1], [ignore]) AT_CLEANUP + + +# ----------------------------------------------- # +# Java syntax error handling without error token. # +# ----------------------------------------------- # + +AT_SETUP([Java syntax error handling without error token]) + +AT_DATA([[YYParser.y]], [[%language "Java" + +%lex-param { String s } + +%code imports { + import java.io.IOException; +} + +%code lexer { + String Input; + int Position; + + public YYLexer (String s) + { + Input = s; + Position = 0; + } + + public void yyerror (String s) + { + System.err.println (s); + } + + public Object getLVal () + { + return null; + } + + public int yylex () throws IOException + { + if (Position >= Input.length ()) + return EOF; + else + return Input.charAt (Position++); + } +} + +%code { + public static void main (String args []) throws IOException + { + YYParser p = new YYParser (args [0]); + p.parse (); + } +} +%% +input: + 'a' 'a' +; +]]) +AT_BISON_CHECK([[YYParser.y]]) +AT_JAVA_COMPILE([[YYParser.java]]) +AT_JAVA_PARSER_CHECK([[YYParser aa]], [[0]], [[]], [[]]) +AT_JAVA_PARSER_CHECK([[YYParser ab]], [[0]], [[]], [[syntax error +]]) +AT_JAVA_PARSER_CHECK([[YYParser ba]], [[0]], [[]], [[syntax error +]]) + +AT_CLEANUP