Change 'utf-8' encoding back to 'unicode' since xml.etree uses this to decide whether...
authorNick Downing <downing.nick@gmail.com>
Thu, 19 Jul 2018 00:43:39 +0000 (10:43 +1000)
committerNick Downing <downing.nick@gmail.com>
Thu, 19 Jul 2018 00:43:39 +0000 (10:43 +1000)
ast.py
bootstrap_pyacc.py
element.py

diff --git a/ast.py b/ast.py
index 2423375..569ecd6 100644 (file)
--- a/ast.py
+++ b/ast.py
@@ -811,8 +811,6 @@ class PYACC(element.Element):
           character_to_symbol,
           name_to_symbol
         )
-      if self.precedence_terminal == -1:
-        self.precedence_terminal = self.last_terminal
 
       character_set = pyacc.nonterminals[
         self.lhs_nonterminal
@@ -841,9 +839,11 @@ class PYACC(element.Element):
         )
       )
       precedence = (
-        -1
-      if self.precedence_terminal == -1 else
         pyacc.terminals[self.precedence_terminal].precedence
+      if self.precedence_terminal != -1 else
+        pyacc.terminals[self.last_terminal].precedence
+      if self.last_terminal != -1 else
+        -1
       )
       if len(_lr1.precedences[3]) and _lr1.precedences[3][-1] == precedence:
         _lr1.precedences[2][-1] = len(_lr1.productions)
@@ -2677,8 +2677,6 @@ class PYACC(element.Element):
         character_to_symbol,
         name_to_symbol
       )
-    if self.start_nonterminal == -1:
-      self.start_nonterminal = self.first_nonterminal
 
     # fill in token numbers that are not characters or overridden by user
     token = 0x100
@@ -2696,7 +2694,11 @@ class PYACC(element.Element):
           [
             (
               [],
-              self.nonterminals[self.start_nonterminal].character_set
+              self.nonterminals[
+                self.start_nonterminal
+              if self.start_nonterminal != -1 else
+                self.first_nonterminal
+              ].character_set
             )
           ],
           # lookaheads (list of initial_set, can_be_empty)
index 3ce5754..ca2d57e 100755 (executable)
@@ -35,5 +35,7 @@ in_file = args[0]
 
 with open(in_file) as fin:
   pyacc = element.deserialize(fin, ast.factory)
+#element.serialize(pyacc, sys.stdout)
 pyacc.post_process()
+#element.serialize(pyacc, sys.stdout)
 bison_lr1dfa.generate(pyacc, skel_file, out_file)
index e9bda98..aa0b630 100644 (file)
@@ -72,7 +72,7 @@ def serialize_str(value):
 def deserialize_str(text):
   return text
 
-def serialize(root, fout, encoding = 'utf-8'):
+def serialize(root, fout, encoding = 'unicode'):
   ref_list = Element('RefList')
   root.serialize(ref_list, 2)
   ref = len(ref_list)
@@ -87,7 +87,7 @@ def serialize(root, fout, encoding = 'utf-8'):
     i.ref = -1
     del i.attrib['ref']
 
-def deserialize(fin, factory = Element, encoding = 'utf-8'):
+def deserialize(fin, factory = Element, encoding = 'unicode'):
   ref_list = xml.etree.ElementTree.parse(
     fin,
     xml.etree.ElementTree.XMLParser(