summaryrefslogtreecommitdiff
path: root/tests/java.at
diff options
context:
space:
mode:
authorTim Landscheidt <tim@tim-landscheidt.de>2012-02-12 01:29:41 +0000
committerAkim Demaille <akim@lrde.epita.fr>2012-03-27 15:21:28 +0200
commite34e97bcd736ab3193bfd3abd4162db3b159836d (patch)
tree3b21b42702572bd4e6ec24b562c059c96b0ede35 /tests/java.at
parentbbaf618c3e9a5645c5d71bf2ea0de2bdeb8a4976 (diff)
downloadbison-e34e97bcd736ab3193bfd3abd4162db3b159836d.tar.gz
Java: Fix syntax error handling without error token.
* data/lalr1.java (YYParser::parse): Here. * tests/java.at: Add test case.
Diffstat (limited to 'tests/java.at')
-rw-r--r--tests/java.at66
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/java.at b/tests/java.at
index e16701df..b9e9deee 100644
--- a/tests/java.at
+++ b/tests/java.at
@@ -749,3 +749,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