Put PYACC.Text inside PYACC.BracedCode excluding the braces, except for the action...
authorNick Downing <downing.nick@gmail.com>
Fri, 3 Aug 2018 07:08:03 +0000 (17:08 +1000)
committerNick Downing <downing.nick@gmail.com>
Fri, 3 Aug 2018 07:08:03 +0000 (17:08 +1000)
ast.py
bison_lr1dfa.py

diff --git a/ast.py b/ast.py
index 3f0f119..85e212e 100644 (file)
--- a/ast.py
+++ b/ast.py
@@ -437,6 +437,7 @@ class PYACC(element.Element):
               last_action
             )
           )
+        assert isinstance(self[0], PYACC.Text) # temporary
         for i in self[0]:
           if isinstance(i, PYACC.Text.StackLocation):
             i.offset = -len(symbols)
@@ -970,14 +971,14 @@ class PYACC(element.Element):
         name = self[0].get_text()
         if len(name) == 0: # do the same as Section1.Prologue
           (
-            pyacc.before_union_code
-          if len(pyacc.union_code) == 0 else
-            pyacc.after_union_code
-          ).append(self[1])
+            pyacc.before_union_text
+          if len(pyacc.union_text) == 0 else
+            pyacc.after_union_text
+          ).append(self[1][0])
         elif name == 'top':
-          pyacc.top_code.append(self[1])
+          pyacc.top_text.append(self[1][0])
         elif name == 'requires':
-          pyacc.requires_code.append(self[1])
+          pyacc.requires_text.append(self[1][0])
         else:
           assert False
  
@@ -1388,7 +1389,7 @@ class PYACC(element.Element):
         if len(name):
           assert len(pyacc.union_name) == 0
           pyacc.union_name = name
-        pyacc.union_code.append(self[1])
+        pyacc.union_text.append(self[1][0])
 
     # GENERATE ELEMENT() BEGIN
     def __init__(
@@ -1513,11 +1514,11 @@ class PYACC(element.Element):
         value = (
           ''
         if len(self) < 2 else
-          self[1][0].get_text()
-        if isinstance(self[1], PYACC.String) else
-          self[1].get_text()[1:-1] # fix this later
-        if isinstance(self[1], PYACC.BracedCode) else
-          self[1].get_text() # ID
+          (
+            self[1]
+          if isinstance(self[1], PYACC.ID) else
+            self[1][0] # String or BracedCode
+          ).get_text()
         )
         if name == 'api.prefix':
           section.type_prefix = value.upper()
@@ -1830,7 +1831,8 @@ class PYACC(element.Element):
         string_to_symbol,
         name_to_tag
       ):
-        pyacc.initial_action_code.append(self[0])
+        assert isinstance(self[0], PYACC.Text) # temporary
+        pyacc.initial_action_text.append(self[0])
 
     class Language(Item):
       # GENERATE ELEMENT() BEGIN
@@ -2085,9 +2087,9 @@ class PYACC(element.Element):
         name_to_tag
       ):
         (
-          pyacc.before_union_code
-        if len(pyacc.union_code) == 0 else
-          pyacc.after_union_code
+          pyacc.before_union_text
+        if len(pyacc.union_text) == 0 else
+          pyacc.after_union_text
         ).append(self[0])
 
     class PureParser(Item):
@@ -3152,7 +3154,7 @@ class PYACC(element.Element):
         [element.get_text(self, len(self))]
       )
 
-  class BracedCode(Text):
+  class BracedCode(element.Element):
     # GENERATE ELEMENT() BEGIN
     def __init__(
       self,
@@ -3161,7 +3163,7 @@ class PYACC(element.Element):
       text = '',
       children = []
     ):
-      PYACC.Text.__init__(
+      element.Element.__init__(
         self,
         tag,
         attrib,
@@ -3169,7 +3171,7 @@ class PYACC(element.Element):
         children
       )
     def copy(self, factory = None):
-      result = PYACC.Text.copy(
+      result = element.Element.copy(
         self,
         BracedCode if factory is None else factory
       )
@@ -3245,20 +3247,20 @@ class PYACC(element.Element):
     ):
       pass
 
-  # GENERATE ELEMENT(list(ref) top_code, list(ref) before_union_code, list(ref) requires_code, str union_name, list(ref) union_code, list(ref) after_union_code, list(ref) initial_action_code, list(ref) tags, list(ref) symbols, int n_productions, list(ref) productions, int first_nonterminal, int start_nonterminal, list(int) associativities) BEGIN
+  # GENERATE ELEMENT(list(ref) top_text, list(ref) before_union_text, list(ref) requires_text, str union_name, list(ref) union_text, list(ref) after_union_text, list(ref) initial_action_text, list(ref) tags, list(ref) symbols, int n_productions, list(ref) productions, int first_nonterminal, int start_nonterminal, list(int) associativities) BEGIN
   def __init__(
     self,
     tag = 'PYACC',
     attrib = {},
     text = '',
     children = [],
-    top_code = [],
-    before_union_code = [],
-    requires_code = [],
+    top_text = [],
+    before_union_text = [],
+    requires_text = [],
     union_name = '',
-    union_code = [],
-    after_union_code = [],
-    initial_action_code = [],
+    union_text = [],
+    after_union_text = [],
+    initial_action_text = [],
     tags = [],
     symbols = [],
     n_productions = -1,
@@ -3274,13 +3276,13 @@ class PYACC(element.Element):
       text,
       children
     )
-    self.top_code = top_code
-    self.before_union_code = before_union_code
-    self.requires_code = requires_code
+    self.top_text = top_text
+    self.before_union_text = before_union_text
+    self.requires_text = requires_text
     self.union_name = union_name
-    self.union_code = union_code
-    self.after_union_code = after_union_code
-    self.initial_action_code = initial_action_code
+    self.union_text = union_text
+    self.after_union_text = after_union_text
+    self.initial_action_text = initial_action_text
     self.tags = tags
     self.symbols = symbols
     self.n_productions = (
@@ -3307,29 +3309,29 @@ class PYACC(element.Element):
   def serialize(self, ref_list):
     element.Element.serialize(self, ref_list)
     self.set(
-      'top_code',
-      ' '.join([element.serialize_ref(i, ref_list) for i in self.top_code])
+      'top_text',
+      ' '.join([element.serialize_ref(i, ref_list) for i in self.top_text])
     )
     self.set(
-      'before_union_code',
-      ' '.join([element.serialize_ref(i, ref_list) for i in self.before_union_code])
+      'before_union_text',
+      ' '.join([element.serialize_ref(i, ref_list) for i in self.before_union_text])
     )
     self.set(
-      'requires_code',
-      ' '.join([element.serialize_ref(i, ref_list) for i in self.requires_code])
+      'requires_text',
+      ' '.join([element.serialize_ref(i, ref_list) for i in self.requires_text])
     )
     self.set('union_name', element.serialize_str(self.union_name))
     self.set(
-      'union_code',
-      ' '.join([element.serialize_ref(i, ref_list) for i in self.union_code])
+      'union_text',
+      ' '.join([element.serialize_ref(i, ref_list) for i in self.union_text])
     )
     self.set(
-      'after_union_code',
-      ' '.join([element.serialize_ref(i, ref_list) for i in self.after_union_code])
+      'after_union_text',
+      ' '.join([element.serialize_ref(i, ref_list) for i in self.after_union_text])
     )
     self.set(
-      'initial_action_code',
-      ' '.join([element.serialize_ref(i, ref_list) for i in self.initial_action_code])
+      'initial_action_text',
+      ' '.join([element.serialize_ref(i, ref_list) for i in self.initial_action_text])
     )
     self.set(
       'tags',
@@ -3352,30 +3354,30 @@ class PYACC(element.Element):
     )
   def deserialize(self, ref_list):
     element.Element.deserialize(self, ref_list)
-    self.top_code = [
+    self.top_text = [
       element.deserialize_ref(i, ref_list)
-      for i in self.get('top_code', '').split()
+      for i in self.get('top_text', '').split()
     ]
-    self.before_union_code = [
+    self.before_union_text = [
       element.deserialize_ref(i, ref_list)
-      for i in self.get('before_union_code', '').split()
+      for i in self.get('before_union_text', '').split()
     ]
-    self.requires_code = [
+    self.requires_text = [
       element.deserialize_ref(i, ref_list)
-      for i in self.get('requires_code', '').split()
+      for i in self.get('requires_text', '').split()
     ]
     self.union_name = element.deserialize_str(self.get('union_name', ''))
-    self.union_code = [
+    self.union_text = [
       element.deserialize_ref(i, ref_list)
-      for i in self.get('union_code', '').split()
+      for i in self.get('union_text', '').split()
     ]
-    self.after_union_code = [
+    self.after_union_text = [
       element.deserialize_ref(i, ref_list)
-      for i in self.get('after_union_code', '').split()
+      for i in self.get('after_union_text', '').split()
     ]
-    self.initial_action_code = [
+    self.initial_action_text = [
       element.deserialize_ref(i, ref_list)
-      for i in self.get('initial_action_code', '').split()
+      for i in self.get('initial_action_text', '').split()
     ]
     self.tags = [
       element.deserialize_ref(i, ref_list)
@@ -3401,13 +3403,13 @@ class PYACC(element.Element):
       self,
       PYACC if factory is None else factory
     )
-    result.top_code = self.top_code
-    result.before_union_code = self.before_union_code
-    result.requires_code = self.requires_code
+    result.top_text = self.top_text
+    result.before_union_text = self.before_union_text
+    result.requires_text = self.requires_text
     result.union_name = self.union_name
-    result.union_code = self.union_code
-    result.after_union_code = self.after_union_code
-    result.initial_action_code = self.initial_action_code
+    result.union_text = self.union_text
+    result.after_union_text = self.after_union_text
+    result.initial_action_text = self.initial_action_text
     result.tags = self.tags
     result.symbols = self.symbols
     result.n_productions = self.n_productions
@@ -3418,44 +3420,44 @@ class PYACC(element.Element):
     return result
   def repr_serialize(self, params):
     element.Element.repr_serialize(self, params)
-    if len(self.top_code):
+    if len(self.top_text):
       params.append(
-        'top_code = [{0:s}]'.format(
-          ', '.join([repr(i) for i in self.top_code])
+        'top_text = [{0:s}]'.format(
+          ', '.join([repr(i) for i in self.top_text])
         )
       )
-    if len(self.before_union_code):
+    if len(self.before_union_text):
       params.append(
-        'before_union_code = [{0:s}]'.format(
-          ', '.join([repr(i) for i in self.before_union_code])
+        'before_union_text = [{0:s}]'.format(
+          ', '.join([repr(i) for i in self.before_union_text])
         )
       )
-    if len(self.requires_code):
+    if len(self.requires_text):
       params.append(
-        'requires_code = [{0:s}]'.format(
-          ', '.join([repr(i) for i in self.requires_code])
+        'requires_text = [{0:s}]'.format(
+          ', '.join([repr(i) for i in self.requires_text])
         )
       )
     if self.union_name != '':
       params.append(
         'union_name = {0:s}'.format(repr(self.union_name))
       )
-    if len(self.union_code):
+    if len(self.union_text):
       params.append(
-        'union_code = [{0:s}]'.format(
-          ', '.join([repr(i) for i in self.union_code])
+        'union_text = [{0:s}]'.format(
+          ', '.join([repr(i) for i in self.union_text])
         )
       )
-    if len(self.after_union_code):
+    if len(self.after_union_text):
       params.append(
-        'after_union_code = [{0:s}]'.format(
-          ', '.join([repr(i) for i in self.after_union_code])
+        'after_union_text = [{0:s}]'.format(
+          ', '.join([repr(i) for i in self.after_union_text])
         )
       )
-    if len(self.initial_action_code):
+    if len(self.initial_action_text):
       params.append(
-        'initial_action_code = [{0:s}]'.format(
-          ', '.join([repr(i) for i in self.initial_action_code])
+        'initial_action_text = [{0:s}]'.format(
+          ', '.join([repr(i) for i in self.initial_action_text])
         )
       )
     if len(self.tags):
@@ -3502,13 +3504,13 @@ class PYACC(element.Element):
 
   def post_process(self):
     # variables that will be serialized
-    self.top_code = []
-    self.before_union_code = []
-    self.requires_code = []
+    self.top_text = []
+    self.before_union_text = []
+    self.requires_text = []
     self.union_name = ''
-    self.union_code = []
-    self.after_union_code = []
-    self.initial_action_code = []
+    self.union_text = []
+    self.after_union_text = []
+    self.initial_action_text = []
     self.precedences = 0
     self.symbols = [
       PYACC.Symbol(
@@ -3591,7 +3593,7 @@ class PYACC(element.Element):
           # lookaheads (list of initial_set, can_be_empty)
           [([], False), ([], True)],
           # ref_data
-          PYACC.BracedCode()
+          PYACC.Text() # temporary
         )
       ],
       # precedences
index 9a44900..b655557 100644 (file)
@@ -416,8 +416,8 @@ def generate(pyacc, skel_file, out_file, defines_file = None):
 '''.format(
                 ''.join(
                   [
-                    '{0:s}\n'.format(i.get_text()[1:-1])
-                    for i in pyacc.top_code
+                    '{0:s}\n'.format(i.get_text())
+                    for i in pyacc.top_text
                   ]
                 )
               )
@@ -429,8 +429,8 @@ def generate(pyacc, skel_file, out_file, defines_file = None):
 '''.format(
                 ''.join(
                   [
-                    '{0:s}\n'.format(i.get_text()[1:-1])
-                    for i in pyacc.before_union_code
+                    '{0:s}\n'.format(i.get_text())
+                    for i in pyacc.before_union_text
                   ]
                 )
               )
@@ -456,8 +456,8 @@ def generate(pyacc, skel_file, out_file, defines_file = None):
 '''.format(
                 ''.join(
                   [
-                    '{0:s}\n'.format(i.get_text()[1:-1])
-                    for i in pyacc.requires_code
+                    '{0:s}\n'.format(i.get_text())
+                    for i in pyacc.requires_text
                   ]
                 )
               )
@@ -526,12 +526,12 @@ typedef union YYSTYPE YYSTYPE;
 '''.format(
                     ''.join(
                       [
-                        '{0:s}\n'.format(i.get_text()[1:-1])
-                        for i in pyacc.union_code
+                        '{0:s}\n'.format(i.get_text())
+                        for i in pyacc.union_text
                       ]
                     )
                   )
-                if len(pyacc.union_code) else
+                if len(pyacc.union_text) else
                   '''typedef int YYSTYPE;
 '''
               ).replace('YY', type_prefix).replace('yy', name_prefix) # hack
@@ -565,8 +565,8 @@ struct YYLTYPE
 '''.format(
                 ''.join(
                   [
-                    '{0:s}\n'.format(i.get_text()[1:-1])
-                    for i in pyacc.after_union_code
+                    '{0:s}\n'.format(i.get_text())
+                    for i in pyacc.after_union_text
                   ]
                 )
               )
@@ -937,7 +937,7 @@ static const yytype_int16 yyr2[] =
                 ''.join(
                   [
                     '{0:s}\n'.format(i.get_text())
-                    for i in pyacc.initial_action_code
+                    for i in pyacc.initial_action_text
                   ]
                 ).replace('(yyval)', '(yylval').replace('(yyloc)', '(yylloc)') # hack
               )