java: lac: a stronger test for the exploratory stack

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
I believe this was the last thing that needed to be done to complete LAC support in Java.

commit d49da0101a916edeaa2d9adf056a9ea5017ceb2e
Author: Akim Demaille <[email protected]>
Date:   Fri Nov 6 07:19:47 2020 +0100

    java: lac: a stronger test for the exploratory stack
    
    * tests/local.at (AT_YYLEX_DEFINE(java)): Fix overquoting issue.
    Style changes.
    * tests/regression.at (LAC: Exploratory stack): Run for lalr1.java too.

diff --git a/TODO b/TODO
index 72af014b..8b009d08 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,7 @@
 * Soon
+** yyerrok in Java
+And add tests in calc.at, to prepare work for D.
+
 ** YYERROR and yynerrs
 We are missing some cases.  Write a test case, and check all the skeletons.
 
diff --git a/tests/conflicts.at b/tests/conflicts.at
index c7c13147..fcd7821b 100644
--- a/tests/conflicts.at
+++ b/tests/conflicts.at
@@ -440,7 +440,7 @@ AT_DATA_GRAMMAR([input.y],
 ]$2[
 
 ]AT_JAVA_IF([[%code lexer {
-  ]AT_YYLEX_DEFINE([$3], [[return new Integer(1)]])[
+  ]AT_YYLEX_DEFINE(["$3"], [[return new Integer(1)]])[
   ]AT_YYERROR_DEFINE[
 };
 %%
diff --git a/tests/local.at b/tests/local.at
index d9b11f9a..22fae30a 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -1036,30 +1036,27 @@ m4_define([AT_YYLEX_DEFINE(java)],
   | yylex.  |
   `--------*/
 
-  public String input = "]$1[";
+  public String input = ]$1[;
   public int index = 0;
-  public int yylex ()
-  {
-    if (index < input.length ())
-      return input.charAt (index++);
+  public int yylex() {
+    if (index < input.length())
+      return input.charAt(index++);
     else
       return 0;
   }
-  public Object getLVal ()
-  {
-    ]$2[;
+  public Object getLVal() {
+    ]m4_ifval([$2], [$2], [return null])[;
   }
 ]])
 
 m4_define([AT_MAIN_DEFINE(java)],
 [[class input
 {
-  public static void main (String[] args) throws IOException
-  {
-    ]AT_API_prefix[Parser p = new ]AT_API_prefix[Parser ();
-    boolean success = p.parse ();
+  public static void main(String[] args) throws IOException {
+    ]AT_API_prefix[Parser p = new ]AT_API_prefix[Parser();
+    boolean success = p.parse();
     if (!success)
-      System.exit (1);
+      System.exit(1);
   }
 }]])
 
diff --git a/tests/regression.at b/tests/regression.at
index 293e8536..3e57e38a 100644
--- a/tests/regression.at
+++ b/tests/regression.at
@@ -1341,11 +1341,21 @@ m4_pushdef([AT_LAC_CHECK], [
 AT_BISON_OPTION_PUSHDEFS([%debug $1])
 
 AT_DATA_GRAMMAR([input.y],
+[AT_JAVA_IF([[%code imports {
+  import java.io.IOException;
+}
+
+%code lexer {
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["bbbbc"])[
+};
+]],
 [[%code {
 #include <stdio.h> /* printf */
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 }
+]])[
 %debug
 ]$1[
 %define parse.error verbose
@@ -1359,13 +1369,15 @@ S: A B A A B A A A A B A A A A A A A B C C A A A A A A A A A A A A B ;
 //       ^                     ^                               ^
 // LAC reallocs
 
-A: 'a' | %empty { printf ("inconsistent default reduction\n"); } ;
+A: 'a' | %empty { ]AT_JAVA_IF([System.out.print], [printf])[ ("inconsistent default reduction\n"); } ;
 B: 'b' ;
-C: %empty { printf ("consistent default reduction\n"); } ;
+C: %empty { ]AT_JAVA_IF([System.out.print], [printf])[ ("consistent default reduction\n"); } ;
 
 %%
-]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE(["bbbbc"])[
+]AT_JAVA_IF([], [[
+  ]AT_YYERROR_DEFINE[
+  ]AT_YYLEX_DEFINE(["bbbbc"])[
+]])[
 
 ]AT_MAIN_DEFINE[
 ]])
@@ -1402,13 +1414,18 @@ AT_PERL_CHECK([[-0777 -ne 'print s/\bconsistent default reduction//g;' stdout.tx
 AT_BISON_OPTION_POPDEFS
 ])
 
+# C.
 AT_LAC_CHECK([[%define api.push-pull pull]])
 AT_LAC_CHECK([[%define api.push-pull pull %define api.pure]])
 AT_LAC_CHECK([[%define api.push-pull both]])
 AT_LAC_CHECK([[%define api.push-pull both %define api.pure]])
 
+# C++.
 AT_LAC_CHECK([[%skeleton "lalr1.cc"]])
 
+# Java.
+AT_LAC_CHECK([[%skeleton "lalr1.java"]])
+
 m4_popdef([AT_LAC_CHECK])
 
 AT_CLEANUP
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.