Remove %<flag> stuff in favour of explicit Section1.Debug|Locations|PureParser, imple...
authorNick Downing <downing.nick@gmail.com>
Sun, 29 Jul 2018 09:46:40 +0000 (19:46 +1000)
committerNick Downing <downing.nick@gmail.com>
Sun, 29 Jul 2018 09:48:09 +0000 (19:48 +1000)
ast.py
bison_lr1dfa.py
skel/y.tab.c.patch
skel/y.tab.h.patch

diff --git a/ast.py b/ast.py
index c2498fa..eb63314 100644 (file)
--- a/ast.py
+++ b/ast.py
@@ -1435,6 +1435,44 @@ class PYACC(element.Element):
         )
  
   class Section1(Section1Or2):
+    class Debug(Item):
+      # GENERATE ELEMENT() BEGIN
+      def __init__(
+        self,
+        tag = 'PYACC_Section1_Debug',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        Item.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = Item.copy(
+          self,
+          Debug if factory is None else factory
+        )
+        return result
+      def __repr__(self):
+        params = []
+        self.repr_serialize(params)
+        return 'ast.PYACC.Section1.Debug({0:s})'.format(', '.join(params))
+      # GENERATE END
+      def post_process(
+        self,
+        pyacc,
+        section,
+        character_to_symbol,
+        name_to_symbol,
+        string_to_symbol,
+        name_to_tag
+      ):
+       self.debug = True
+
     class Define(Item):
       # GENERATE ELEMENT() BEGIN
       def __init__(
@@ -1492,14 +1530,19 @@ class PYACC(element.Element):
           else:
             assert False
         elif name == 'parse.error':
-          section.parse_error = value
+          if value == 'verbose':
+            section.error_verbose = True
+          elif value == 'simple':
+            section.error_verbose = False
+          else:
+            assert False
         elif name == 'parse.lac':
           section.parse_lac = value
         elif name == 'parse.trace':
           if value == '' or value == 'true':
-            section.parse_trace = True
+            section.debug = True
           elif value == 'false':
-            section.parse_trace = False
+            section.debug = False
           else:
             assert False
         else:
@@ -1571,7 +1614,17 @@ class PYACC(element.Element):
         self.repr_serialize(params)
         return 'ast.PYACC.Section1.ErrorVerbose({0:s})'.format(', '.join(params))
       # GENERATE END
-
+      def post_process(
+        self,
+        pyacc,
+        section,
+        character_to_symbol,
+        name_to_symbol,
+        string_to_symbol,
+        name_to_tag
+      ):
+        section.error_verbose = True
     class Expect(Item):
       # GENERATE ELEMENT(int value) BEGIN
       def __init__(
@@ -1704,34 +1757,6 @@ class PYACC(element.Element):
         return 'ast.PYACC.Section1.FilePrefix({0:s})'.format(', '.join(params))
       # GENERATE END
 
-    class Flag(Item):
-      # GENERATE ELEMENT() BEGIN
-      def __init__(
-        self,
-        tag = 'PYACC_Section1_Flag',
-        attrib = {},
-        text = '',
-        children = []
-      ):
-        Item.__init__(
-          self,
-          tag,
-          attrib,
-          text,
-          children
-        )
-      def copy(self, factory = None):
-        result = Item.copy(
-          self,
-          Flag if factory is None else factory
-        )
-        return result
-      def __repr__(self):
-        params = []
-        self.repr_serialize(params)
-        return 'ast.PYACC.Section1.Flag({0:s})'.format(', '.join(params))
-      # GENERATE END
-
     class GLRParser(Item):
       # GENERATE ELEMENT() BEGIN
       def __init__(
@@ -1855,6 +1880,44 @@ class PYACC(element.Element):
         return 'ast.PYACC.Section1.Lines({0:s})'.format(', '.join(params))
       # GENERATE END
 
+    class Locations(Item):
+      # GENERATE ELEMENT() BEGIN
+      def __init__(
+        self,
+        tag = 'PYACC_Section1_Locations',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        Item.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = Item.copy(
+          self,
+          Locations if factory is None else factory
+        )
+        return result
+      def __repr__(self):
+        params = []
+        self.repr_serialize(params)
+        return 'ast.PYACC.Section1.Locations({0:s})'.format(', '.join(params))
+      # GENERATE END
+      def post_process(
+        self,
+        pyacc,
+        section,
+        character_to_symbol,
+        name_to_symbol,
+        string_to_symbol,
+        name_to_tag
+      ):
+        section.locations = True
+
     class NamePrefix(Item):
       # GENERATE ELEMENT() BEGIN
       def __init__(
@@ -2009,6 +2072,44 @@ class PYACC(element.Element):
           pyacc.after_union_code
         ).append(self[0])
 
+    class PureParser(Item):
+      # GENERATE ELEMENT() BEGIN
+      def __init__(
+        self,
+        tag = 'PYACC_Section1_PureParser',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        Item.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = Item.copy(
+          self,
+          PureParser if factory is None else factory
+        )
+        return result
+      def __repr__(self):
+        params = []
+        self.repr_serialize(params)
+        return 'ast.PYACC.Section1.PureParser({0:s})'.format(', '.join(params))
+      # GENERATE END
+      def post_process(
+        self,
+        pyacc,
+        section,
+        character_to_symbol,
+        name_to_symbol,
+        string_to_symbol,
+        name_to_tag
+      ):
+        section.api_pure = 1
+
     class Require(Item):
       # GENERATE ELEMENT() BEGIN
       def __init__(
@@ -2159,7 +2260,7 @@ class PYACC(element.Element):
         return 'ast.PYACC.Section1.YACC({0:s})'.format(', '.join(params))
       # GENERATE END
 
-    # GENERATE ELEMENT(str api_prefix, int api_pure, bool locations, str parse_error, str parse_lac, bool parse_trace, bool defines, int expect, bool verbose) BEGIN
+    # GENERATE ELEMENT(str api_prefix, int api_pure, bool locations, bool error_verbose, str parse_lac, bool debug, bool defines, int expect, bool verbose) BEGIN
     def __init__(
       self,
       tag = 'PYACC_Section1',
@@ -2169,9 +2270,9 @@ class PYACC(element.Element):
       api_prefix = '',
       api_pure = -1,
       locations = False,
-      parse_error = '',
+      error_verbose = False,
       parse_lac = '',
-      parse_trace = False,
+      debug = False,
       defines = False,
       expect = -1,
       verbose = False
@@ -2194,12 +2295,16 @@ class PYACC(element.Element):
       if isinstance(locations, str) else
         locations
       )
-      self.parse_error = parse_error
+      self.error_verbose = (
+        element.deserialize_bool(error_verbose)
+      if isinstance(error_verbose, str) else
+        error_verbose
+      )
       self.parse_lac = parse_lac
-      self.parse_trace = (
-        element.deserialize_bool(parse_trace)
-      if isinstance(parse_trace, str) else
-        parse_trace
+      self.debug = (
+        element.deserialize_bool(debug)
+      if isinstance(debug, str) else
+        debug
       )
       self.defines = (
         element.deserialize_bool(defines)
@@ -2221,9 +2326,9 @@ class PYACC(element.Element):
       self.set('api_prefix', element.serialize_str(self.api_prefix))
       self.set('api_pure', element.serialize_int(self.api_pure))
       self.set('locations', element.serialize_bool(self.locations))
-      self.set('parse_error', element.serialize_str(self.parse_error))
+      self.set('error_verbose', element.serialize_bool(self.error_verbose))
       self.set('parse_lac', element.serialize_str(self.parse_lac))
-      self.set('parse_trace', element.serialize_bool(self.parse_trace))
+      self.set('debug', element.serialize_bool(self.debug))
       self.set('defines', element.serialize_bool(self.defines))
       self.set('expect', element.serialize_int(self.expect))
       self.set('verbose', element.serialize_bool(self.verbose))
@@ -2232,9 +2337,9 @@ class PYACC(element.Element):
       self.api_prefix = element.deserialize_str(self.get('api_prefix', ''))
       self.api_pure = element.deserialize_int(self.get('api_pure', '-1'))
       self.locations = element.deserialize_bool(self.get('locations', 'false'))
-      self.parse_error = element.deserialize_str(self.get('parse_error', ''))
+      self.error_verbose = element.deserialize_bool(self.get('error_verbose', 'false'))
       self.parse_lac = element.deserialize_str(self.get('parse_lac', ''))
-      self.parse_trace = element.deserialize_bool(self.get('parse_trace', 'false'))
+      self.debug = element.deserialize_bool(self.get('debug', 'false'))
       self.defines = element.deserialize_bool(self.get('defines', 'false'))
       self.expect = element.deserialize_int(self.get('expect', '-1'))
       self.verbose = element.deserialize_bool(self.get('verbose', 'false'))
@@ -2246,9 +2351,9 @@ class PYACC(element.Element):
       result.api_prefix = self.api_prefix
       result.api_pure = self.api_pure
       result.locations = self.locations
-      result.parse_error = self.parse_error
+      result.error_verbose = self.error_verbose
       result.parse_lac = self.parse_lac
-      result.parse_trace = self.parse_trace
+      result.debug = self.debug
       result.defines = self.defines
       result.expect = self.expect
       result.verbose = self.verbose
@@ -2267,17 +2372,17 @@ class PYACC(element.Element):
         params.append(
           'locations = {0:s}'.format(repr(self.locations))
         )
-      if self.parse_error != '':
+      if self.error_verbose != False:
         params.append(
-          'parse_error = {0:s}'.format(repr(self.parse_error))
+          'error_verbose = {0:s}'.format(repr(self.error_verbose))
         )
       if self.parse_lac != '':
         params.append(
           'parse_lac = {0:s}'.format(repr(self.parse_lac))
         )
-      if self.parse_trace != False:
+      if self.debug != False:
         params.append(
-          'parse_trace = {0:s}'.format(repr(self.parse_trace))
+          'debug = {0:s}'.format(repr(self.debug))
         )
       if self.defines != False:
         params.append(
@@ -2307,9 +2412,9 @@ class PYACC(element.Element):
       self.api_prefix = ''
       self.api_pure = 0
       self.locations = False
-      self.parse_error = ''
+      self.error_verbose = False
       self.parse_lac = ''
-      self.parse_trace = False
+      self.debug = False
       self.defines = False
       self.expect = -1
       self.verbose = False
@@ -2326,13 +2431,13 @@ class PYACC(element.Element):
       #if self.api_pure != 0:
       #  sys.stderr.write('warning: ignoring %define api.pure\n')
       #if self.locations:
-      #  sys.stderr.write('warning: ignoring %define locations\n')
-      if len(self.parse_error):
-        sys.stderr.write('warning: ignoring %define parse.error\n')
+      #  sys.stderr.write('warning: ignoring %locations\n')
+      #if self.error_verbose:
+      #  sys.stderr.write('warning: ignoring %error-verbose\n')
       if len(self.parse_lac):
         sys.stderr.write('warning: ignoring %define parse.lac\n')
-      if self.parse_trace:
-        sys.stderr.write('warning: ignoring %define parse.trace\n')
+      #if self.debug:
+      #  sys.stderr.write('warning: ignoring %debug\n')
       if self.defines:
         sys.stderr.write('warning: ignoring %defines\n')
       if self.expect != -1:
@@ -3556,22 +3661,24 @@ tag_to_class = {
   'PYACC_Section1Or2_Type': PYACC.Section1Or2.Type,
   'PYACC_Section1Or2_Union': PYACC.Section1Or2.Union,
   'PYACC_Section1': PYACC.Section1,
+  'PYACC_Section1_Debug': PYACC.Section1.Debug,
   'PYACC_Section1_Define': PYACC.Section1.Define,
   'PYACC_Section1_Defines': PYACC.Section1.Defines,
   'PYACC_Section1_ErrorVerbose': PYACC.Section1.ErrorVerbose,
   'PYACC_Section1_Expect': PYACC.Section1.Expect,
   'PYACC_Section1_ExpectRR': PYACC.Section1.ExpectRR,
   'PYACC_Section1_FilePrefix': PYACC.Section1.FilePrefix,
-  'PYACC_Section1_Flag': PYACC.Section1.Flag,
   'PYACC_Section1_GLRParser': PYACC.Section1.GLRParser,
   'PYACC_Section1_InitialAction': PYACC.Section1.InitialAction,
   'PYACC_Section1_Language': PYACC.Section1.Language,
   'PYACC_Section1_Lines': PYACC.Section1.Lines,
+  'PYACC_Section1_Locations': PYACC.Section1.Locations,
   'PYACC_Section1_NamePrefix': PYACC.Section1.NamePrefix,
   'PYACC_Section1_NonDeterministicParser': PYACC.Section1.NonDeterministicParser,
   'PYACC_Section1_Output': PYACC.Section1.Output,
   'PYACC_Section1_Param': PYACC.Section1.Param,
   'PYACC_Section1_Prologue': PYACC.Section1.Prologue,
+  'PYACC_Section1_PureParser': PYACC.Section1.PureParser,
   'PYACC_Section1_Require': PYACC.Section1.Require,
   'PYACC_Section1_Skeleton': PYACC.Section1.Skeleton,
   'PYACC_Section1_TokenTable': PYACC.Section1.TokenTable,
index 1f1f118..b3d3214 100644 (file)
@@ -362,6 +362,20 @@ def generate(pyacc, skel_file, out_file, defines_file = None):
                 ''.join([i.get_text() for i in pyacc.before_union_code])
               )
             )
+          elif line == '/* GENERATE YYERROR_VERBOSE */\n':
+            fout.write(
+              '''/* GENERATE YYERROR_VERBOSE BEGIN */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE {0:d}
+#endif
+/* GENERATE YYERROR_VERBOSE END */
+'''.format(
+                int(pyacc[0].error_verbose)
+              )
+            )
           elif line == '/* GENERATE SECTION1REQUIRES */\n':
             fout.write(
               '''/* GENERATE SECTION1REQUIRES BEGIN */
@@ -370,6 +384,17 @@ def generate(pyacc, skel_file, out_file, defines_file = None):
                 ''.join([i.get_text() for i in pyacc.requires_code])
               )
             )
+          elif line == '/* GENERATE YYDEBUG */\n':
+            fout.write(
+              '''/* GENERATE YYDEBUG BEGIN */
+#ifndef YYDEBUG
+# define YYDEBUG {0:d}
+#endif
+/* GENERATE YYDEBUG END */
+'''.format(
+                int(pyacc[0].debug)
+              )
+            )
           elif line == '/* GENERATE TOKENSEQUAL */\n':
             fout.write(
               '''/* GENERATE TOKENSEQUAL BEGIN */{0:s}
@@ -541,11 +566,11 @@ static const yytype_int16 yyrline[] =
 }};
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || 0
+#if YYDEBUG || YYERROR_VERBOSE || {9:d}
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
-{{{9:s}
+{{{10:s}
 }};
 #endif
 
@@ -553,14 +578,14 @@ static const char *const yytname[] =
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_int16 yytoknum[] =
-{{{10:s}
+{{{11:s}
 }};
 # endif
 
-#define YYPACT_NINF {11:d}
+#define YYPACT_NINF {12:d}
 
 #define yypact_value_is_default(Yystate) \\
-  (!!((Yystate) == ({12:d})))
+  (!!((Yystate) == ({13:d})))
 
 #define YYTABLE_NINF -1
 
@@ -570,51 +595,51 @@ static const yytype_int16 yytoknum[] =
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
-{{{13:s}
+{{{14:s}
 }};
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
-{{{14:s}
+{{{15:s}
 }};
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
-{{{15:s}
+{{{16:s}
 }};
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
-{{{16:s}
+{{{17:s}
 }};
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
-{{{17:s}
+{{{18:s}
 }};
 
 static const yytype_int16 yycheck[] =
-{{{18:s}
+{{{19:s}
 }};
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_int16 yystos[] =
-{{{19:s}
+{{{20:s}
 }};
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
-{{{20:s}
+{{{21:s}
 }};
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int16 yyr2[] =
-{{{21:s}
+{{{22:s}
 }};
 /* GENERATE TABLES END */
 '''.format(
@@ -660,6 +685,8 @@ static const yytype_int16 yyr2[] =
                     for i in range(0, yyrline.shape[0], 10)
                   ]
                 ),
+                # YYERROR_VERBOSE (strangely the defined value is repeated)
+                int(pyacc[0].error_verbose),
                 # yytname
                 ','.join(
                   ['\n  {0:s}'.format(', '.join(i)) for i in yytname_lines]
index 86c6702..e2a1a8b 100644 (file)
@@ -1,5 +1,5 @@
---- y.tab.c.orig       2018-07-29 18:45:32.543635165 +1000
-+++ y.tab.c    2018-07-29 19:01:47.335660891 +1000
+--- y.tab.c.orig       2018-07-29 19:39:22.183720400 +1000
++++ y.tab.c    2018-07-29 19:40:01.175721429 +1000
 @@ -50,7 +50,7 @@
  #define YYSKELETON_NAME "yacc.c"
  
  
  # ifndef YY_NULLPTR
  #  if defined __cplusplus && 201103L <= __cplusplus
-@@ -97,28 +97,26 @@
+@@ -73,21 +73,14 @@
+ # endif
+ /* Enabling verbose error messages.  */
+-#ifdef YYERROR_VERBOSE
+-# undef YYERROR_VERBOSE
+-# define YYERROR_VERBOSE 1
+-#else
+-# define YYERROR_VERBOSE 0
+-#endif
++/* GENERATE YYERROR_VERBOSE */
+ /* In a future release of Bison, this section will be replaced
+    by #include "y.tab.h".  */
+ #ifndef YY_YY_Y_TAB_H_INCLUDED
+ # define YY_YY_Y_TAB_H_INCLUDED
+ /* Debug traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
++/* GENERATE YYDEBUG */
+ #if YYDEBUG
+ extern int yydebug;
+ #endif
+@@ -97,28 +90,26 @@
  # define YYTOKENTYPE
    enum yytokentype
    {
@@ -64,7 +88,7 @@
  
  int yyparse (void);
  
-@@ -126,6 +124,7 @@
+@@ -126,6 +117,7 @@
  
  /* Copy the second part of user declarations.  */
  
@@ -72,7 +96,7 @@
  
  #ifdef short
  # undef short
-@@ -306,13 +305,20 @@
+@@ -306,13 +298,20 @@
  
  #if (! defined yyoverflow \
       && (! defined __cplusplus \
  };
  
  /* The size of the maximum gap between one aligned stack and the next.  */
-@@ -320,9 +326,15 @@
+@@ -320,9 +319,15 @@
  
  /* The size of an array large to enough to hold all stacks, each with
     N elements.  */
  
  # define YYCOPY_NEEDED 1
  
-@@ -364,155 +376,7 @@
+@@ -364,155 +369,7 @@
  # endif
  #endif /* !YYCOPY_NEEDED */
  
  
  #define yyerrok         (yyerrstatus = 0)
  #define yyclearin       (yychar = YYEMPTY)
-@@ -526,7 +390,25 @@
+@@ -526,7 +383,25 @@
  
  #define YYRECOVERING()  (!!yyerrstatus)
  
  do                                                              \
    if (yychar == YYEMPTY)                                        \
      {                                                           \
-@@ -542,12 +424,39 @@
+@@ -542,12 +417,39 @@
        YYERROR;                                                  \
      }                                                           \
  while (0)
 +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
 +   If N is 0, then set CURRENT to the empty location which ends
 +   the previous symbol: RHS[0] (always defined).  */
-+
 +# ifndef YYLLOC_DEFAULT
 +#  define YYLLOC_DEFAULT(Current, Rhs, N)                               \
 +    do                                                                  \
 +        }                                                               \
 +    while (0)
 +# endif
++
 +# define YYRHSLOC(Rhs, K) ((Rhs)[K])
 +#endif
  
  /* Enable debugging if requested.  */
  #if YYDEBUG
-@@ -563,13 +472,64 @@
+@@ -563,13 +465,64 @@
      YYFPRINTF Args;                             \
  } while (0)
  
  do {                                                                      \
    if (yydebug)                                                            \
      {                                                                     \
-@@ -579,12 +539,29 @@
+@@ -579,12 +532,29 @@
        YYFPRINTF (stderr, "\n");                                           \
      }                                                                     \
  } while (0)
  static void
  yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
  {
-@@ -592,18 +569,32 @@
+@@ -592,18 +562,32 @@
    YYUSE (yyo);
    if (!yyvaluep)
      return;
  static void
  yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
  {
-@@ -613,6 +604,7 @@
+@@ -613,6 +597,7 @@
    yy_symbol_value_print (yyoutput, yytype, yyvaluep);
    YYFPRINTF (yyoutput, ")");
  }
  
  /*------------------------------------------------------------------.
  | yy_stack_print -- Print the state stack from its BOTTOM up to its |
-@@ -642,6 +634,33 @@
+@@ -642,6 +627,33 @@
  | Report that the YYRULE is going to be reduced.  |
  `------------------------------------------------*/
  
  static void
  yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
  {
-@@ -662,11 +681,12 @@
+@@ -662,11 +674,12 @@
      }
  }
  
  
  /* Nonzero means print parse trace.  It is left uninitialized so that
     multiple parsers can coexist.  */
-@@ -923,10 +943,12 @@
+@@ -923,10 +936,12 @@
  | Release the memory associated to this symbol.  |
  `-----------------------------------------------*/
  
    if (!yymsg)
      yymsg = "Deleting";
    YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-@@ -935,18 +957,38 @@
+@@ -935,18 +950,38 @@
    YYUSE (yytype);
    YY_IGNORE_MAYBE_UNINITIALIZED_END
  }
  
  /*----------.
  | yyparse.  |
-@@ -955,6 +997,27 @@
+@@ -955,6 +990,27 @@
  int
  yyparse (void)
  {
      int yystate;
      /* Number of tokens to shift before error messages enabled.  */
      int yyerrstatus;
-@@ -962,6 +1025,7 @@
+@@ -962,6 +1018,7 @@
      /* The stacks and their tools:
         'yyss': related to states.
         'yyvs': related to semantic values.
  
         Refer to the stacks through separate pointers, to allow yyoverflow
         to reallocate them elsewhere.  */
-@@ -976,6 +1040,16 @@
+@@ -976,6 +1033,16 @@
      YYSTYPE *yyvs;
      YYSTYPE *yyvsp;
  
      YYSIZE_T yystacksize;
  
    int yyn;
-@@ -985,6 +1059,9 @@
+@@ -985,6 +1052,9 @@
    /* The variables used to return semantic value and location from the
       action routines.  */
    YYSTYPE yyval;
  
  #if YYERROR_VERBOSE
    /* Buffer for error messages, and its allocated size.  */
-@@ -993,7 +1070,11 @@
+@@ -993,7 +1063,11 @@
    YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
  #endif
  
  
    /* The number of symbols on the RHS of the reduced rule.
       Keep to zero when no symbol should be popped.  */
-@@ -1001,6 +1082,9 @@
+@@ -1001,6 +1075,9 @@
  
    yyssp = yyss = yyssa;
    yyvsp = yyvs = yyvsa;
    yystacksize = YYINITDEPTH;
  
    YYDPRINTF ((stderr, "Starting parse\n"));
-@@ -1075,6 +1159,9 @@
+@@ -1075,6 +1152,9 @@
  
        yyssp = yyss + yysize - 1;
        yyvsp = yyvs + yysize - 1;
  
        YYDPRINTF ((stderr, "Stack size increased to %lu\n",
                    (unsigned long int) yystacksize));
-@@ -1109,7 +1196,15 @@
+@@ -1109,7 +1189,15 @@
    if (yychar == YYEMPTY)
      {
        YYDPRINTF ((stderr, "Reading a token: "));
      }
  
    if (yychar <= YYEOF)
-@@ -1152,7 +1247,9 @@
+@@ -1152,7 +1240,9 @@
    YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    *++yyvsp = yylval;
    YY_IGNORE_MAYBE_UNINITIALIZED_END
    goto yynewstate;
  
  
-@@ -1183,18 +1280,14 @@
+@@ -1183,18 +1273,14 @@
       GCC warning that YYVAL may be used uninitialized.  */
    yyval = yyvsp[1-yylen];
  
  
        default: break;
      }
-@@ -1216,6 +1309,9 @@
+@@ -1216,6 +1302,9 @@
    YY_STACK_PRINT (yyss, yyssp);
  
    *++yyvsp = yyval;
  
    /* Now 'shift' the result of the reduction.  Determine what state
       that goes to, based on the state we popped back to and the rule
-@@ -1245,7 +1341,11 @@
+@@ -1245,7 +1334,11 @@
      {
        ++yynerrs;
  #if ! YYERROR_VERBOSE
  #else
  # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
                                          yyssp, yytoken)
-@@ -1272,7 +1372,11 @@
+@@ -1272,7 +1365,11 @@
                  yymsgp = yymsg;
                }
            }
          if (yysyntax_error_status == 2)
            goto yyexhaustedlab;
        }
-@@ -1280,7 +1384,9 @@
+@@ -1280,7 +1377,9 @@
  #endif
      }
  
  
    if (yyerrstatus == 3)
      {
-@@ -1295,8 +1401,13 @@
+@@ -1295,8 +1394,13 @@
          }
        else
          {
            yychar = YYEMPTY;
          }
      }
-@@ -1317,6 +1428,9 @@
+@@ -1317,6 +1421,9 @@
    if (/*CONSTCOND*/ 0)
       goto yyerrorlab;
  
    /* Do not reclaim the symbols of the rule whose action triggered
       this YYERROR.  */
    YYPOPSTACK (yylen);
-@@ -1350,9 +1464,14 @@
+@@ -1350,9 +1457,14 @@
        if (yyssp == yyss)
          YYABORT;
  
        YYPOPSTACK (1);
        yystate = *yyssp;
        YY_STACK_PRINT (yyss, yyssp);
-@@ -1362,6 +1481,13 @@
+@@ -1362,6 +1474,13 @@
    *++yyvsp = yylval;
    YY_IGNORE_MAYBE_UNINITIALIZED_END
  
  
    /* Shift the error token.  */
    YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-@@ -1389,7 +1515,11 @@
+@@ -1389,7 +1508,11 @@
  | yyexhaustedlab -- memory exhaustion comes here.  |
  `-------------------------------------------------*/
  yyexhaustedlab:
    yyresult = 2;
    /* Fall through.  */
  #endif
-@@ -1400,8 +1530,13 @@
+@@ -1400,8 +1523,13 @@
        /* Make sure we have latest lookahead translation.  See comments at
           user semantic actions for why this is necessary.  */
        yytoken = YYTRANSLATE (yychar);
      }
    /* Do not reclaim the symbols of the rule whose action triggered
       this YYABORT or YYACCEPT.  */
-@@ -1409,8 +1544,13 @@
+@@ -1409,8 +1537,13 @@
    YY_STACK_PRINT (yyss, yyssp);
    while (yyssp != yyss)
      {
        YYPOPSTACK (1);
      }
  #ifndef yyoverflow
-@@ -1423,3 +1563,5 @@
+@@ -1423,3 +1556,5 @@
  #endif
    return yyresult;
  }
index f4078d4..bbb28bb 100644 (file)
@@ -1,6 +1,17 @@
---- y.tab.h.orig       2018-07-29 17:10:01.979483927 +1000
-+++ y.tab.h    2018-07-29 17:16:30.311494176 +1000
-@@ -45,26 +45,16 @@
+--- y.tab.h.orig       2018-07-29 19:39:22.199720400 +1000
++++ y.tab.h    2018-07-29 19:40:18.731721892 +1000
+@@ -33,9 +33,7 @@
+ #ifndef YY_YY_Y_TAB_H_INCLUDED
+ # define YY_YY_Y_TAB_H_INCLUDED
+ /* Debug traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
++/* GENERATE YYDEBUG */
+ #if YYDEBUG
+ extern int yydebug;
+ #endif
+@@ -45,26 +43,16 @@
  # define YYTOKENTYPE
    enum yytokentype
    {
  #endif
  /* Tokens.  */
 -#define TOKEN 258
-+/* GENERATE TOKENS */
+-
 -/* Value type.  */
 -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 -
 -union YYSTYPE
 -{
 - /* something */ 
--
++/* GENERATE TOKENS */
 -};
 -
 -typedef union YYSTYPE YYSTYPE;