[PATCH 4/6] kinds: also define the possibly qualified symbol kinds

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
* data/skeletons/bison.m4 (b4_symbol_kind): Rename as...
(b4_symbol_kind_base): this.
(b4_symbol_kind): New, for fully qualified kind name.
* data/skeletons/lalr1.cc (b4_symbol_kind): New.
Adjust to use b4_symbol_kind where appropriate.
* src/parse-gram.h, src/parse-gram.c: regen.
---
 data/README.md            | 24 +++++++++++++--------
 data/skeletons/bison.m4   | 18 +++++++++++-----
 data/skeletons/c++.m4     |  8 +++----
 data/skeletons/c.m4       |  4 ++--
 data/skeletons/d.m4       | 11 ++++++++--
 data/skeletons/glr.cc     | 20 ++++++++----------
 data/skeletons/java.m4    |  9 +++++++-
 data/skeletons/lalr1.cc   | 29 ++++++++++++++++----------
 data/skeletons/lalr1.d    | 26 +++++++++++------------
 data/skeletons/lalr1.java | 44 +++++++++++++++++++--------------------
 10 files changed, 113 insertions(+), 80 deletions(-)

diff --git a/data/README.md b/data/README.md
index 9d0b0c50..95140216 100644
--- a/data/README.md
+++ b/data/README.md
@@ -84,19 +84,20 @@ field), where field can `has_id`, `id`, etc.: see
 The macro `b4_symbol(NUM, FIELD)` gives access to the following FIELDS:
 
 - `has_id`: 0 or 1
-  Whether the symbol has an id.
+  Whether the symbol has an `id`.
 
 - `id`: string
-  If has_id, the id (prefixed by api.token.prefix if defined), otherwise
-  defined as empty.  Guaranteed to be usable as a C identifier.  This is
-  used to define the token kind (i.e., the enum used by the return value of
-  yylex).
+  If `has_id`, the name of the token kind (prefixed by api.token.prefix if
+  defined), otherwise empty.  Guaranteed to be usable as a C identifier.
+  This is used to define the token kind (i.e., the enum used by the return
+  value of yylex).  Should be named `token_kind`.
 
 - `tag`: string
-  A human representation of the symbol.  Can be 'foo', 'foo.id', '"foo"' etc.
+  A human readable representation of the symbol.  Can be `'foo'`,
+  `'foo.id'`, `'"foo"'` etc.
 
 - `code`: integer
-  The token code associated to the `id`.
+  The token code associated to the token kind `id`.
   The external number as used by yylex.  Can be ASCII code when a character,
   some number chosen by bison, or some user number in the case of `%token
   FOO <NUM>`.  Corresponds to `yychar` in `yacc.c`.
@@ -104,9 +105,14 @@ The macro `b4_symbol(NUM, FIELD)` gives access to the following FIELDS:
 - `is_token`: 0 or 1
   Whether this is a terminal symbol.
 
+- `kind_base`: string
+  The base of the symbol kind, i.e., the enumerator of this symbol (token or
+  nonterminal) which is mapping to its `number`.
+
 - `kind`: string
-  The symbol kind, i.e., the enumerator of this symbol (token or nonterminal)
-  which is mapping to its `number`.
+  Same as `kind_base`, but possibly with a prefix in some languages.  E.g.,
+  EOF's `kind_base` and `kind` are `YYSYMBOL_YYEOF` in C, but are
+  `S_YYEMPTY` and `symbol_kind::S_YYEMPTY` in C++.
 
 - `number`: integer
   The code associated to the `kind`.
diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4
index 359d6923..2b42d1b5 100644
--- a/data/skeletons/bison.m4
+++ b/data/skeletons/bison.m4
@@ -438,14 +438,14 @@ m4_define([b4_symbol_token_kind],
 _b4_symbol([$1], [id])])
 
 
-# b4_symbol_kind(NUM)
-# -------------------
+# b4_symbol_kind_base(NUM)
+# ------------------------
 # Build the name of the kind of this symbol.  It must always exist,
 # otherwise some symbols might not be represented in the enum, which
 # might be compiled into too small a type to contain all the symbol
 # numbers.
 m4_define([b4_symbol_prefix], [b4_percent_define_get([api.symbol.prefix])])
-m4_define([b4_symbol_kind],
+m4_define([b4_symbol_kind_base],
 [b4_percent_define_get([api.symbol.prefix])dnl
 m4_case([$1],
   [-2],                             [[YYEMPTY]],
@@ -458,6 +458,13 @@ m4_case([$1],
                                     [m4_bpatsubst([$1-][]_b4_symbol([$1], [tag]), [[^a-zA-Z_0-9]+], [_])])])])])
 
 
+# b4_symbol_kind(NUM)
+# -------------------
+# Same as b4_symbol_kind, but possibly with a prefix in some
+# languages.  E.g., EOF's kind_base and kind are YYSYMBOL_YYEOF in C,
+# but are S_YYEMPTY and symbol_kind::S_YYEMPTY in C++.
+m4_copy([b4_symbol_kind_base], [b4_symbol_kind])
+
 # b4_symbol(NUM, FIELD)
 # ---------------------
 # Fetch FIELD of symbol #NUM (or "orig NUM").  Fail if undefined.
@@ -465,8 +472,9 @@ m4_case([$1],
 # If FIELD = id, prepend the token prefix.
 m4_define([b4_symbol],
 [m4_case([$2],
-         [id],    [b4_symbol_token_kind([$1])],
-         [kind],  [b4_symbol_kind([$1])],
+         [id],        [b4_symbol_token_kind([$1])],
+         [kind_base], [b4_symbol_kind_base([$1])],
+         [kind],      [b4_symbol_kind([$1])],
          [_b4_symbol($@)])])
 
 
diff --git a/data/skeletons/c++.m4 b/data/skeletons/c++.m4
index 91518033..1d41c4c8 100644
--- a/data/skeletons/c++.m4
+++ b/data/skeletons/c++.m4
@@ -193,7 +193,7 @@ m4_define([b4_declare_symbol_enum],
 [[enum symbol_kind_type
       {
         YYNTOKENS = ]b4_tokens_number[, ///< Number of tokens.
-        ]b4_symbol_kind([-2])[ = -2,
+        ]b4_symbol(-2, kind_base)[ = -2,
 ]b4_symbol_foreach([      b4_symbol_enum])dnl
 [      };]])
 
@@ -507,7 +507,7 @@ m4_define([b4_public_types_define],
   bool
   ]b4_parser_class[::basic_symbol<Base>::empty () const YY_NOEXCEPT
   {
-    return this->kind () == symbol_kind::]b4_symbol_prefix[YYEMPTY;
+    return this->kind () == ]b4_symbol(-2, kind)[;
   }
 
   template <typename Base>
@@ -523,7 +523,7 @@ m4_define([b4_public_types_define],
 
   // by_kind.
   ]b4_inline([$1])b4_parser_class[::by_kind::by_kind ()
-    : kind_ (symbol_kind::]b4_symbol_prefix[YYEMPTY)
+    : kind_ (]b4_symbol(-2, kind)[)
   {}
 
 #if 201103L <= YY_CPLUSPLUS
@@ -545,7 +545,7 @@ m4_define([b4_public_types_define],
   ]b4_inline([$1])[void
   ]b4_parser_class[::by_kind::clear ()
   {
-    kind_ = symbol_kind::]b4_symbol_prefix[YYEMPTY;
+    kind_ = ]b4_symbol(-2, kind)[;
   }
 
   ]b4_inline([$1])[void
diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4
index 5e7530fb..6bf1e660 100644
--- a/data/skeletons/c.m4
+++ b/data/skeletons/c.m4
@@ -572,7 +572,7 @@ m4_define([b4_symbol_translate],
 m4_define([b4_symbol_enum],
 [m4_format([  %-40s %s],
            m4_format([[%s = %s%s%s]],
-                     b4_symbol([$1], [kind]),
+                     b4_symbol([$1], [kind_base]),
                      [$1],
                      m4_if([$1], b4_last_symbol, [], [[,]])),
            [b4_symbol_tag_comment([$1])])])
@@ -587,7 +587,7 @@ m4_define([b4_declare_symbol_enum],
 [[/* Symbol kind.  */
 enum yysymbol_kind_t
 {
-  ]b4_symbol_kind([-2])[ = -2,
+  ]b4_symbol([-2], kind_base)[ = -2,
 ]b4_symbol_foreach([b4_symbol_enum])dnl
 [};
 typedef enum yysymbol_kind_t yysymbol_kind_t;
diff --git a/data/skeletons/d.m4 b/data/skeletons/d.m4
index 3041ac78..c19f7d86 100644
--- a/data/skeletons/d.m4
+++ b/data/skeletons/d.m4
@@ -152,6 +152,8 @@ private static immutable b4_int_type_for([$2])[[]] yy$1_ =
 ## Token kinds.  ##
 ## ------------- ##
 
+m4_define([b4_symbol(-2, id)],  [[YYEMPTY]])
+
 # b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
 # ---------------------------------------
 # Output the definition of this token as an enum.
@@ -178,6 +180,11 @@ b4_symbol_foreach([b4_token_enum])dnl
 
 b4_percent_define_default([[api.symbol.prefix]], [[S_]])
 
+# b4_symbol_kind(NUM)
+# -------------------
+m4_define([b4_symbol_kind],
+[SymbolKind.b4_symbol_kind_base($@)])
+
 
 # b4_symbol_enum(SYMBOL-NUM)
 # --------------------------
@@ -185,7 +192,7 @@ b4_percent_define_default([[api.symbol.prefix]], [[S_]])
 m4_define([b4_symbol_enum],
 [m4_format([    %-30s %s],
            m4_format([[%s = %s,]],
-                     b4_symbol([$1], [kind]),
+                     b4_symbol([$1], [kind_base]),
                      [$1]),
            [b4_symbol_tag_comment([$1])])])
 
@@ -199,7 +206,7 @@ m4_define([b4_declare_symbol_enum],
 [[  /* Symbol kinds.  */
   public enum SymbolKind
   {
-    ]b4_symbol_kind([-2])[ = -2,  /* No symbol.  */
+    ]b4_symbol(-2, kind_base)[ = -2,  /* No symbol.  */
 ]b4_symbol_foreach([b4_symbol_enum])dnl
 [  };
 ]])])
diff --git a/data/skeletons/glr.cc b/data/skeletons/glr.cc
index 95053a2f..a294fb20 100644
--- a/data/skeletons/glr.cc
+++ b/data/skeletons/glr.cc
@@ -66,12 +66,6 @@ m4_defn([b4_parse_param]))],
            [[b4_namespace_ref::b4_parser_class[& yyparser], [[yyparser]]]])
 ])
 
-# b4_declare_symbol_enum
-# ----------------------
-m4_append([b4_declare_symbol_enum],
-[[typedef symbol_kind_type yysymbol_kind_t;
-]])
-
 
 # b4_yy_symbol_print_define
 # -------------------------
@@ -354,13 +348,17 @@ b4_percent_define_flag_if([[global_tokens_and_yystype]],
 # define ]b4_api_PREFIX[LTYPE ]b4_namespace_ref[::]b4_parser_class[::location_type
 #endif
 
+]m4_define([b4_define_symbol_kind],
+  [m4_format([#define %-15s %s],
+             b4_symbol($][1, kind_base),
+             b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol($][1, kind_base))
+])[
 ]m4_define([b4_declare_symbol_enum],
 [[typedef ]b4_namespace_ref[::]b4_parser_class[::symbol_kind_type yysymbol_kind_t;
-#define ]b4_symbol_prefix[YYEMPTY  ]b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol_prefix[YYEMPTY
-#define ]b4_symbol_prefix[YYerror  ]b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol_prefix[YYerror
-#define ]b4_symbol_prefix[YYEOF    ]b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol_prefix[YYEOF
-#define ]b4_symbol_prefix[YYUNDEF  ]b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol_prefix[YYUNDEF
-]])[
+
+// Expose C++ symbol kinds to C.
+]b4_define_symbol_kind(-2)dnl
+b4_symbol_foreach([b4_define_symbol_kind])])[
 ]b4_percent_code_get([[provides]])[
 ]m4_popdef([b4_parse_param])dnl
 ])
diff --git a/data/skeletons/java.m4 b/data/skeletons/java.m4
index 106f4721..af38ccc3 100644
--- a/data/skeletons/java.m4
+++ b/data/skeletons/java.m4
@@ -159,13 +159,20 @@ b4_symbol_foreach([b4_token_enum])])])
 ## Symbol kinds.  ##
 ## -------------- ##
 
+
+# b4_symbol_kind(NUM)
+# -------------------
+m4_define([b4_symbol_kind],
+[SymbolKind.b4_symbol_kind_base($@)])
+
+
 # b4_symbol_enum(SYMBOL-NUM)
 # --------------------------
 # Output the definition of this symbol as an enum.
 m4_define([b4_symbol_enum],
 [m4_format([    %-30s %s],
            m4_format([[%s(%s)%s]],
-                     b4_symbol([$1], [kind]),
+                     b4_symbol([$1], [kind_base]),
                      [$1],
                      m4_if([$1], b4_last_symbol, [[;]], [[,]])),
            [b4_symbol_tag_comment([$1])])])
diff --git a/data/skeletons/lalr1.cc b/data/skeletons/lalr1.cc
index 204b82d9..c5d6377f 100644
--- a/data/skeletons/lalr1.cc
+++ b/data/skeletons/lalr1.cc
@@ -59,6 +59,13 @@ m4_define([b4_integral_parser_table_define],
   };dnl
 ])
 
+
+# b4_symbol_kind(NUM)
+# -------------------
+m4_define([b4_symbol_kind],
+[symbol_kind::b4_symbol_kind_base($@)])
+
+
 # b4_symbol_value_template(VAL, SYMBOL-NUM, [TYPE])
 # -------------------------------------------------
 # Same as b4_symbol_value, but used in a template method.  It makes
@@ -666,7 +673,7 @@ m4_if(b4_prefix, [yy], [],
   ]b4_parser_class[::by_state::kind () const YY_NOEXCEPT
   {
     if (state == empty_state)
-      return symbol_kind::]b4_symbol(-2, kind)[;
+      return ]b4_symbol(-2, kind)[;
     else
       return YY_CAST (symbol_kind_type, yystos_[+state]);
   }
@@ -691,7 +698,7 @@ m4_if(b4_prefix, [yy], [],
     b4_symbol_variant([that.kind ()],
                       [value], [move], [YY_MOVE (that.value)])])[
     // that is emptied.
-    that.kind_ = symbol_kind::]b4_symbol(-2, kind)[;
+    that.kind_ = ]b4_symbol(-2, kind)[;
   }
 
 #if YY_CPLUSPLUS < 201103L
@@ -920,13 +927,13 @@ b4_dollar_popdef])[]dnl
       }
     YY_SYMBOL_PRINT ("Next token is", yyla);
 
-    if (yyla.kind () == ]symbol_kind::b4_symbol(1, kind)[)
+    if (yyla.kind () == ]b4_symbol(1, kind)[)
     {
       // The scanner already issued an error message, process directly
       // to error recovery.  But do not keep the error token as
       // lookahead, it is too special and may lead us to an endless
       // loop in error recovery. */
-      yyla.kind_ = ]symbol_kind::b4_symbol(2, kind)[;
+      yyla.kind_ = ]b4_symbol(2, kind)[;
       goto yyerrlab1;
     }
 
@@ -1063,7 +1070,7 @@ b4_dollar_popdef])[]dnl
            error, discard it.  */
 
         // Return failure if at end of input.
-        if (yyla.kind () == symbol_kind::]b4_symbol_prefix[YYEOF)
+        if (yyla.kind () == ]b4_symbol(0, kind)[)
           YYABORT;
         else if (!yyla.empty ())
           {
@@ -1104,9 +1111,9 @@ b4_dollar_popdef])[]dnl
         yyn = yypact_[+yystack_[0].state];
         if (!yy_pact_value_is_default_ (yyn))
           {
-            yyn += symbol_kind::]b4_symbol(1, kind)[;
+            yyn += ]b4_symbol(1, kind)[;
             if (0 <= yyn && yyn <= yylast_
-                && yycheck_[yyn] == symbol_kind::]b4_symbol(1, kind)[)
+                && yycheck_[yyn] == ]b4_symbol(1, kind)[)
               {
                 yyn = yytable_[yyn];
                 if (0 < yyn)
@@ -1298,8 +1305,8 @@ b4_dollar_popdef])[]dnl
     for (int yyx = 0; yyx < YYNTOKENS; ++yyx)
       {
         symbol_kind_type yysym = YY_CAST (symbol_kind_type, yyx);
-        if (yysym != symbol_kind::]b4_symbol(1, kind)[
-            && yysym != symbol_kind::]b4_symbol_prefix[YYUNDEF
+        if (yysym != ]b4_symbol(1, kind)[
+            && yysym != ]b4_symbol(2, kind)[
             && yyparser_.yy_lac_check_ (yysym))
           {
             if (!yyarg)
@@ -1321,7 +1328,7 @@ b4_dollar_popdef])[]dnl
         int yychecklim = yylast_ - yyn + 1;
         int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
         for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
-          if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::]b4_symbol(1, kind)[
+          if (yycheck_[yyx + yyn] == yyx && yyx != ]b4_symbol(1, kind)[
               && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
             {
               if (!yyarg)
@@ -1334,7 +1341,7 @@ b4_dollar_popdef])[]dnl
       }
 ]])[
     if (yyarg && yycount == 0 && 0 < yyargn)
-      yyarg[0] = symbol_kind::]b4_symbol(-2, kind)[;
+      yyarg[0] = ]b4_symbol(-2, kind)[;
     return yycount;
   }
 
diff --git a/data/skeletons/lalr1.d b/data/skeletons/lalr1.d
index bc1bcf0a..85001b72 100644
--- a/data/skeletons/lalr1.d
+++ b/data/skeletons/lalr1.d
@@ -430,7 +430,7 @@ b4_locations_if([, ref ]b4_location_type[ yylocationp])[)
   {
     /// Lookahead and lookahead in internal form.
     int yychar = TokenKind.YYEMPTY;
-    SymbolKind yytoken = SymbolKind.]b4_symbol(-2, kind)[;
+    SymbolKind yytoken = ]b4_symbol(-2, kind)[;
 
     /* State.  */
     int yyn = 0;
@@ -509,14 +509,14 @@ m4_popdef([b4_at_dollar])])dnl
         yytoken = yytranslate_ (yychar);]b4_parse_trace_if([[
         yy_symbol_print ("Next token is", yytoken, yylval]b4_locations_if([, yylloc])[);]])[
 
-        if (yytoken == SymbolKind.]b4_symbol(1, kind)[)
+        if (yytoken == ]b4_symbol(1, kind)[)
         {
           // The scanner already issued an error message, process directly
           // to error recovery.  But do not keep the error token as
           // lookahead, it is too special and may lead us to an endless
           // loop in error recovery. */
-          yychar = TokenKind.YYUNDEF;
-          yytoken = SymbolKind.]b4_symbol_prefix[YYUNDEF;]b4_locations_if([[
+          yychar = TokenKind.]b4_symbol(2, id)[;
+          yytoken = ]b4_symbol(2, kind)[;]b4_locations_if([[
           yyerrloc = yylloc;]])[
           label = YYERRLAB1;
         }
@@ -587,8 +587,8 @@ m4_popdef([b4_at_dollar])])dnl
         if (yyerrstatus_ == 0)
         {
           ++yynerrs_;
-          if (yychar == TokenKind.YYEMPTY)
-            yytoken = SymbolKind.]b4_symbol(-2, kind)[;
+          if (yychar == TokenKind.]b4_symbol(-2, id)[)
+            yytoken = ]b4_symbol(-2, kind)[;
           yyerror (]b4_locations_if([yylloc, ])[yysyntax_error (yystate, yytoken));
         }
 ]b4_locations_if([
@@ -638,8 +638,8 @@ m4_popdef([b4_at_dollar])])dnl
           yyn = yypact_[yystate];
           if (!yy_pact_value_is_default_ (yyn))
           {
-            yyn += SymbolKind.]b4_symbol(1, kind)[;
-            if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == SymbolKind.]b4_symbol(1, kind)[)
+            yyn += ]b4_symbol(1, kind)[;
+            if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == ]b4_symbol(1, kind)[)
             {
               yyn = yytable_[yyn];
               if (0 < yyn)
@@ -726,7 +726,7 @@ m4_popdef([b4_at_dollar])])dnl
          will still contain any token that will not be accepted due
          to an error action in a later state.
       */
-    if (tok != SymbolKind.]b4_symbol(-2, kind)[)
+    if (tok != ]b4_symbol(-2, kind)[)
     {
       // FIXME: This method of building the message is not compatible
       // with internationalization.
@@ -745,14 +745,14 @@ m4_popdef([b4_at_dollar])])dnl
         int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
         int count = 0;
         for (int x = yyxbegin; x < yyxend; ++x)
-          if (yycheck_[x + yyn] == x && x != SymbolKind.]b4_symbol(1, kind)[
+          if (yycheck_[x + yyn] == x && x != ]b4_symbol(1, kind)[
               && !yy_table_value_is_error_ (yytable_[x + yyn]))
              ++count;
           if (count < 5)
           {
              count = 0;
              for (int x = yyxbegin; x < yyxend; ++x)
-               if (yycheck_[x + yyn] == x && x != SymbolKind.]b4_symbol(1, kind)[
+               if (yycheck_[x + yyn] == x && x != ]b4_symbol(1, kind)[
                    && !yy_table_value_is_error_ (yytable_[x + yyn]))
                {
                   res ~= count++ == 0 ? ", expecting " : " or ";
@@ -844,14 +844,14 @@ m4_popdef([b4_at_dollar])])dnl
     immutable int code_max_ = ]b4_code_max[;
 
     if (t <= 0)
-      return SymbolKind.]b4_symbol_prefix[YYEOF;
+      return ]b4_symbol(0, kind)[;
     else if (t <= code_max_)
       {
         import std.conv : to;
         return to!SymbolKind (translate_table[t]);
       }
     else
-      return SymbolKind.]b4_symbol_prefix[YYUNDEF;]])[
+      return ]b4_symbol(2, kind)[;]])[
   }
 
   private static immutable int yylast_ = ]b4_last[;
diff --git a/data/skeletons/lalr1.java b/data/skeletons/lalr1.java
index 307cfa6c..73df2e7a 100644
--- a/data/skeletons/lalr1.java
+++ b/data/skeletons/lalr1.java
@@ -602,9 +602,9 @@ b4_dollar_popdef[]dnl
             push_token_consumed = false;]], [b4_parse_trace_if([[
             yycdebug ("Reading a token");]])[
             yychar = yylexer.yylex ();
-            yylval = yylexer.getLVal ();]b4_locations_if([
-            yylloc = new b4_location_type (yylexer.getStartPos (),
-                            yylexer.getEndPos ());])[
+            yylval = yylexer.getLVal();]b4_locations_if([[
+            yylloc = new ]b4_location_type[(yylexer.getStartPos(),
+                                          yylexer.getEndPos());]])[
 ]])[
           }
 
@@ -613,14 +613,14 @@ b4_dollar_popdef[]dnl
         yySymbolPrint("Next token is", yytoken,
                       yylval]b4_locations_if([, yylloc])[);]])[
 
-        if (yytoken == SymbolKind.]b4_symbol_prefix[YYerror)
+        if (yytoken == ]b4_symbol(1, kind)[)
           {
             // The scanner already issued an error message, process directly
             // to error recovery.  But do not keep the error token as
             // lookahead, it is too special and may lead us to an endless
             // loop in error recovery. */
-            yychar = Lexer.]b4_percent_define_get([api.token.prefix])[YYUNDEF;
-            yytoken = SymbolKind.]b4_symbol_prefix[YYUNDEF;]b4_locations_if([[
+            yychar = Lexer.]b4_symbol(2, id)[;
+            yytoken = ]b4_symbol(2, kind)[;]b4_locations_if([[
             yyerrloc = yylloc;]])[
             label = YYERRLAB1;
           }
@@ -628,8 +628,8 @@ b4_dollar_popdef[]dnl
           {
             /* If the proper action on seeing token YYTOKEN is to reduce or to
                detect an error, take that action.  */
-            yyn += yytoken.getCode ();
-            if (yyn < 0 || YYLAST_ < yyn || yycheck_[yyn] != yytoken.getCode ())
+            yyn += yytoken.getCode();
+            if (yyn < 0 || YYLAST_ < yyn || yycheck_[yyn] != yytoken.getCode())
               label = YYDEFAULT;
 
             /* <= 0 means reduce or error.  */
@@ -744,9 +744,9 @@ b4_dollar_popdef[]dnl
             yyn = yypact_[yystate];
             if (!yyPactValueIsDefault (yyn))
               {
-                yyn += SymbolKind.]b4_symbol(1, kind)[.getCode ();
+                yyn += ]b4_symbol(1, kind)[.getCode();
                 if (0 <= yyn && yyn <= YYLAST_
-                    && yycheck_[yyn] == SymbolKind.]b4_symbol(1, kind)[.getCode ())
+                    && yycheck_[yyn] == ]b4_symbol(1, kind)[.getCode())
                   {
                     yyn = yytable_[yyn];
                     if (0 < yyn)
@@ -779,7 +779,7 @@ b4_dollar_popdef[]dnl
         yystack.pop (2);]])[
 
         /* Shift the error token.  */]b4_parse_trace_if([[
-        yySymbolPrint("Shifting", SymbolKind.get (yystos_[yyn]),
+        yySymbolPrint("Shifting", SymbolKind.get(yystos_[yyn]),
                       yylval]b4_locations_if([, yyloc])[);]])[
 
         yystate = yyn;
@@ -933,15 +933,15 @@ b4_dollar_popdef[]dnl
           int yychecklim = YYLAST_ - yyn + 1;
           int yyxend = yychecklim < NTOKENS ? yychecklim : NTOKENS;
           for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck_[yyx + yyn] == yyx && yyx != SymbolKind.]b4_symbol(1, kind)[.getCode ()
-                && !yyTableValueIsError (yytable_[yyx + yyn]))
+            if (yycheck_[yyx + yyn] == yyx && yyx != ]b4_symbol(1, kind)[.getCode()
+                && !yyTableValueIsError(yytable_[yyx + yyn]))
               {
                 if (yyarg == null)
                   yycount += 1;
                 else if (yycount == yyargn)
                   return 0; // FIXME: this is incorrect.
                 else
-                  yyarg[yycount++] = SymbolKind.get (yyx);
+                  yyarg[yycount++] = SymbolKind.get(yyx);
               }
         }
       if (yyarg != null && yycount == yyoffset && yyoffset < yyargn)
@@ -981,12 +981,12 @@ b4_dollar_popdef[]dnl
          to an error action in a later state.
     */
     int yycount = 0;
-    if (yyctx.getToken () != null)
+    if (yyctx.getToken() != null)
       {
         if (yyarg != null)
-          yyarg[yycount] = yyctx.getToken ();
+          yyarg[yycount] = yyctx.getToken();
         yycount += 1;
-        yycount += yyctx.getExpectedTokens (yyarg, 1, yyargn);
+        yycount += yyctx.getExpectedTokens(yyarg, 1, yyargn);
       }
     return yycount;
   }
@@ -1071,7 +1071,7 @@ b4_dollar_popdef[]dnl
     /* The symbols being reduced.  */
     for (int yyi = 0; yyi < yynrhs; yyi++)
       yySymbolPrint("   $" + (yyi + 1) + " =",
-                    SymbolKind.get (yystos_[yystack.stateAt (yynrhs - (yyi + 1))]),
+                    SymbolKind.get(yystos_[yystack.stateAt (yynrhs - (yyi + 1))]),
                     ]b4_rhs_data(yynrhs, yyi + 1)b4_locations_if([,
                     b4_rhs_location(yynrhs, yyi + 1)])[);
   }]])[
@@ -1081,17 +1081,17 @@ b4_dollar_popdef[]dnl
   private static final SymbolKind yytranslate_ (int t)
 ]b4_api_token_raw_if(dnl
 [[  {
-    return SymbolKind.get (t);
+    return SymbolKind.get(t);
   }
 ]],
 [[  {
     int code_max_ = ]b4_code_max[;
     if (t <= 0)
-      return SymbolKind.]b4_symbol_prefix[YYEOF;
+      return ]b4_symbol(0, kind)[;
     else if (t <= code_max_)
-      return SymbolKind.get (yytranslate_table_[t]);
+      return SymbolKind.get(yytranslate_table_[t]);
     else
-      return SymbolKind.]b4_symbol_prefix[YYUNDEF;
+      return ]b4_symbol(2, kind)[;
   }
   ]b4_integral_parser_table_define([translate_table], [b4_translate])[
 ]])[
-- 
2.26.2
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.