[PATCH 1/4] style: comment changes in the skeletons

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
* data/skeletons/lalr1.cc: Prepare for Java's LAC.
* data/skeletons/lalr1.java: Style fixes.
---
 README-hacking.md               |  8 ++--
 data/skeletons/lalr1.cc         | 12 +++---
 data/skeletons/lalr1.java       | 72 ++++++++++++++++++---------------
 examples/c/bistromathic/parse.y |  6 +--
 4 files changed, 53 insertions(+), 45 deletions(-)

diff --git a/README-hacking.md b/README-hacking.md
index 9c5d9a3e..f0bc4341 100644
--- a/README-hacking.md
+++ b/README-hacking.md
@@ -346,12 +346,14 @@ and [Google Java Style
 Guide](https://google.github.io/styleguide/javaguide.html).  Unfortunately
 at some point some GNU Coding Style was installed in Java, but it's an
 error.  So we should for instance stop putting spaces in function calls.
-Because we are standardizing the code, it is currently inconsistent.
+Because we are standardizing the code, it is currently inconsistent.  Treat
+acronyms as words: `yyLacCheck`, not `yyLACCheck`.
 
 Use a 2-space indentation (Google) rather than 4 (Oracle).
 
-Don't use the "yy" prefix for public members: "getExpectedTokens", not
-"yyexpectedTokens" or "yygetExpectedTokens".
+Don't use the `yy` prefix for public members: `getExpectedTokens`, not
+`yyexpectedTokens` or `yygetExpectedTokens`.  Keep the `yy` prefix though
+for private details.
 
 ## Commit Messages
 Imitate the style we use.  Use `git log` to get sources of inspiration.
diff --git a/data/skeletons/lalr1.cc b/data/skeletons/lalr1.cc
index 5c260d04..c593094a 100644
--- a/data/skeletons/lalr1.cc
+++ b/data/skeletons/lalr1.cc
@@ -20,8 +20,7 @@ m4_include(b4_skeletonsdir/[c++.m4])
 # api.value.type=variant is valid.
 m4_define([b4_value_type_setup_variant])
 
-# Check the value of %define parse.lac, where LAC stands for lookahead
-# correction.
+# parse.lac
 b4_percent_define_default([[parse.lac]], [[none]])
 b4_percent_define_check_values([[[[parse.lac]], [[full]], [[none]]]])
 b4_define_flag_if([lac])
@@ -935,7 +934,7 @@ b4_dollar_popdef])[]dnl
     if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
       {]b4_lac_if([[
         if (!yy_lac_establish_ (yyla.kind ()))
-           goto yyerrlab;]])[
+          goto yyerrlab;]])[
         goto yydefault;
       }
 
@@ -946,7 +945,7 @@ b4_dollar_popdef])[]dnl
         if (yy_table_value_is_error_ (yyn))
           goto yyerrlab;]b4_lac_if([[
         if (!yy_lac_establish_ (yyla.kind ()))
-           goto yyerrlab;
+          goto yyerrlab;
 ]])[
         yyn = -yyn;
         goto yyreduce;
@@ -1442,7 +1441,9 @@ b4_dollar_popdef])[]dnl
        follows.  If no initial context is currently established for the
        current lookahead, then check if that lookahead can eventually be
        shifted if syntactic actions continue from the current context.  */
-    if (!yy_lac_established_)
+    if (yy_lac_established_)
+      return true;
+    else
       {
 #if ]b4_api_PREFIX[DEBUG
         YYCDEBUG << "LAC: initial context established for "
@@ -1451,7 +1452,6 @@ b4_dollar_popdef])[]dnl
         yy_lac_established_ = true;
         return yy_lac_check_ (yytoken);
       }
-    return true;
   }
 
   // Discard any previous initial lookahead context.
diff --git a/data/skeletons/lalr1.java b/data/skeletons/lalr1.java
index 72bef4c5..c7004535 100644
--- a/data/skeletons/lalr1.java
+++ b/data/skeletons/lalr1.java
@@ -25,7 +25,10 @@ m4_define([b4_symbol_no_destructor_assert],
                               [%destructor does not make sense in Java])])])
 b4_symbol_foreach([b4_symbol_no_destructor_assert])
 
-# Setup some macros for api.push-pull.
+## --------------- ##
+## api.push-pull.  ##
+## --------------- ##
+
 b4_percent_define_default([[api.push-pull]], [[pull]])
 b4_percent_define_check_values([[[[api.push-pull]],
                                  [[pull]], [[push]], [[both]]]])
@@ -52,7 +55,8 @@ b4_use_push_for_pull_if([
 # Define a macro to encapsulate the parse state variables.  This
 # allows them to be defined either in parse() when doing pull parsing,
 # or as class instance variable when doing push parsing.
-m4_define([b4_define_state],[[
+m4_define([b4_define_state],
+[[
     /* Lookahead token kind.  */
     int yychar = YYEMPTY_;
     /* Lookahead symbol kind.  */
@@ -76,6 +80,10 @@ m4_define([b4_define_state],[[
     ]b4_yystype[ yylval = null;
 ]])[
 
+## ------------- ##
+## Parser File.  ##
+## ------------- ##
+
 ]b4_output_begin([b4_parser_file_name])[
 ]b4_copyright([Skeleton implementation for Bison LALR(1) parsers in Java],
               [2007-2015, 2018-2020])[
@@ -343,65 +351,63 @@ import java.text.MessageFormat;
     public int size = 16;
     public int height = -1;
 
-    public final void push (int state, ]b4_yystype[ value]b4_locations_if([, ]b4_location_type[ loc])[) {
+    public final void push(int state, ]b4_yystype[ value]b4_locations_if([, ]b4_location_type[ loc])[) {
       height++;
-      if (size == height)
-        {
-          int[] newStateStack = new int[size * 2];
-          System.arraycopy (stateStack, 0, newStateStack, 0, height);
-          stateStack = newStateStack;]b4_locations_if([[
-          ]b4_location_type[[] newLocStack = new ]b4_location_type[[size * 2];
-          System.arraycopy (locStack, 0, newLocStack, 0, height);
-          locStack = newLocStack;]])
-
-          b4_yystype[[] newValueStack = new ]b4_yystype[[size * 2];
-          System.arraycopy (valueStack, 0, newValueStack, 0, height);
-          valueStack = newValueStack;
-
-          size *= 2;
-        }
+      if (size == height) {
+        int[] newStateStack = new int[size * 2];
+        System.arraycopy(stateStack, 0, newStateStack, 0, height);
+        stateStack = newStateStack;]b4_locations_if([[
+        ]b4_location_type[[] newLocStack = new ]b4_location_type[[size * 2];
+        System.arraycopy(locStack, 0, newLocStack, 0, height);
+        locStack = newLocStack;]])
+
+        b4_yystype[[] newValueStack = new ]b4_yystype[[size * 2];
+        System.arraycopy(valueStack, 0, newValueStack, 0, height);
+        valueStack = newValueStack;
+
+        size *= 2;
+      }
 
       stateStack[height] = state;]b4_locations_if([[
       locStack[height] = loc;]])[
       valueStack[height] = value;
     }
 
-    public final void pop () {
-      pop (1);
+    public final void pop() {
+      pop(1);
     }
 
-    public final void pop (int num) {
+    public final void pop(int num) {
       // Avoid memory leaks... garbage collection is a white lie!
       if (0 < num) {
-        java.util.Arrays.fill (valueStack, height - num + 1, height + 1, null);]b4_locations_if([[
-        java.util.Arrays.fill (locStack, height - num + 1, height + 1, null);]])[
+        java.util.Arrays.fill(valueStack, height - num + 1, height + 1, null);]b4_locations_if([[
+        java.util.Arrays.fill(locStack, height - num + 1, height + 1, null);]])[
       }
       height -= num;
     }
 
-    public final int stateAt (int i) {
+    public final int stateAt(int i) {
       return stateStack[height - i];
     }
 ]b4_locations_if([[
 
-    public final ]b4_location_type[ locationAt (int i) {
+    public final ]b4_location_type[ locationAt(int i) {
       return locStack[height - i];
     }
 ]])[
-    public final ]b4_yystype[ valueAt (int i) {
+    public final ]b4_yystype[ valueAt(int i) {
       return valueStack[height - i];
     }
 
     // Print the state stack on the debug stream.
-    public void print (java.io.PrintStream out) {
+    public void print(java.io.PrintStream out) {
       out.print ("Stack now");
 
-      for (int i = 0; i <= height; i++)
-        {
-          out.print (' ');
-          out.print (stateStack[i]);
-        }
-      out.println ();
+      for (int i = 0; i <= height; i++) {
+        out.print(' ');
+        out.print(stateStack[i]);
+      }
+      out.println();
     }
   }
 
diff --git a/examples/c/bistromathic/parse.y b/examples/c/bistromathic/parse.y
index 718ec904..25c2c5ec 100644
--- a/examples/c/bistromathic/parse.y
+++ b/examples/c/bistromathic/parse.y
@@ -117,13 +117,13 @@
 // with TOK_ (e.g., TOK_EOF).
 %define api.token.prefix {TOK_}
 
-// Customized syntax error messages (see yyreport_syntax_error).
+// Customized syntax error messages (see yyreport_syntax_error)...
 %define parse.error custom
 
-// with locations.
+// ... with locations...
 %locations
 
-// and accurate list of expected tokens.
+// ... and accurate list of expected tokens.
 %define parse.lac full
 
 // Generate the parser description file (calc.output).
-- 
2.28.0
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.