Browse Source

More porting of HUTN compiler to Python 3.

Bentley James Oakes 6 years ago
parent
commit
e0aff49ff0

+ 12 - 7
interface/HUTN/hutn_compiler/compiler.py

@@ -25,6 +25,11 @@ def read(filename):
 
 def md5digest(data):
     hasher = hashlib.md5()
+    try:
+        data = data.encode('utf-8')
+    except AttributeError:
+        pass
+
     hasher.update(data)
     return hasher.hexdigest()
 
@@ -174,13 +179,13 @@ def do_compile(inputfile, grammarfile, visitors=[], include_paths = [], mode="")
         return result
 
 def main(input_file, grammar_file, mode, args=[]):
-    from prettyprint_visitor import PrettyPrintVisitor
-    from prettyprint_visitor import PrintVisitor
-    from semantics_visitor import SemanticsVisitor
-    from bootstrap_visitor import BootstrapVisitor
-    from constructors_visitor import ConstructorsVisitor
-    from model_visitor import ModelVisitor
-    from model_bootstrap_visitor import ModelBootstrapVisitor
+    from interface.HUTN.hutn_compiler.prettyprint_visitor import PrettyPrintVisitor
+    from interface.HUTN.hutn_compiler.prettyprint_visitor import PrintVisitor
+    from interface.HUTN.hutn_compiler.semantics_visitor import SemanticsVisitor
+    from interface.HUTN.hutn_compiler.bootstrap_visitor import BootstrapVisitor
+    from interface.HUTN.hutn_compiler.constructors_visitor import ConstructorsVisitor
+    from interface.HUTN.hutn_compiler.model_visitor import ModelVisitor
+    from interface.HUTN.hutn_compiler.model_bootstrap_visitor import ModelBootstrapVisitor
 
     modes = {
         "N" : [],

+ 1 - 1
interface/HUTN/hutn_compiler/declare_functions_visitor.py

@@ -1,5 +1,5 @@
 import interface.HUTN.hutn_compiler.symbol_table as st
-import interface.HUTN.hutn_compiler.types_mv
+import interface.HUTN.hutn_compiler.types_mv as types_mv
 from interface.HUTN.hutn_compiler.visitor import Visitor
 
 

+ 7 - 3
interface/HUTN/hutn_compiler/grammar_compiler_visitor.py

@@ -79,8 +79,12 @@ class Visitor(object):
     def isToken(self,item):
         ret = False
         if isinstance(item, Tree):
-            if len(item.tail) == 1 and isinstance(item.tail[0], basestring):
-                ret = True
+            try:
+                if len(item.tail) == 1 and isinstance(item.tail[0], basestring):
+                    ret = True
+            except NameError:
+                if len(item.tail) == 1 and isinstance(item.tail[0], str):
+                    ret = True
         return ret
 
     def getTokenValue(self, item):
@@ -258,7 +262,7 @@ class GrammarCompilerVisitor(Visitor):
         return rhs , allowUnpack
 
     def addImplicit(self):
-        if self.implicit and self.rules.has_key('start'):
+        if self.implicit and 'start' in self.rules:
 
             t = str(time())
             t = t.replace('.','')[:-5]

+ 2 - 2
interface/HUTN/hutn_compiler/hutnparser.py

@@ -219,7 +219,7 @@ class Parser(object):
                     if l:
                         name = elem[1:]
                         if name in l:
-                            if not l[name].has_key('hidden'):
+                            if not 'hidden' in l[name]:
                                 #this method will not override anything the user has explicitly specified in the structure
                                 #if there is already a hidden value there it will be kept even if it is not the same one
                                 #an examples use case is whitespaces vs comments:
@@ -249,7 +249,7 @@ class Parser(object):
                         rulename = item [1:]
                         if rulename in self.rules:
                             rule = self.rules[rulename]
-                            if not rule.has_key('visited') or rule['visited'] == False:
+                            if not 'visited' in rule or rule['visited'] == False:
                                 self.interleave(rule, inter)
                         else:
                             raise Exception(rulename + ' rule not found in grammar rules.')

+ 5 - 5
interface/HUTN/hutn_compiler/model_bootstrap_visitor.py

@@ -147,11 +147,11 @@ class ModelBootstrapVisitor(Visitor):
     def visit_model_attr_instance(self, tree):
         def constructors_compile(code):
             code_fragments = code.split("\n")
-	    code_fragments = [i for i in code_fragments if i.strip() != ""]
-	    code_fragments = [i.replace("    ", "\t") for i in code_fragments]
-	    initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
-	    code_fragments = self.includes + [i[initial_tabs:] for i in code_fragments]
-	    code = "\n".join(code_fragments)
+            code_fragments = [i for i in code_fragments if i.strip() != ""]
+            code_fragments = [i.replace("    ", "\t") for i in code_fragments]
+            initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
+            code_fragments = self.includes + [i[initial_tabs:] for i in code_fragments]
+            code = "\n".join(code_fragments)
             code += "\n"
 
             with open(".code.alc", 'w') as f: