فهرست منبع

Add debug information to PrimitivesVisitor

Yentl Van Tendeloo 9 سال پیش
والد
کامیت
3405dcfb14

+ 0 - 27
integration/code/import_metamodel.alc

@@ -1,27 +0,0 @@
-Element function import_metamodel():
-	// TODO
-	//   For the moment, we make the assumption that it doesn't exist yet.
-	//   We create both the Simple Class Diagrams model, retype it, and then make the metamodel as an instance of this
-	//   In the future, this should already exist though...
-
-	// Instatiate as bottom
-	Element scd
-	Element scd_model
-	scd = create_node()
-	scd_model = create_node()
-	dict_add(scd, "model", scd_model)
-	instantiate_bottom_node(scd, "Class")
-	instantiate_bottom_value(scd, "__Type", Type)
-	instantiate_bottom_value(scd, "__String", String)
-	instantiate_bottom_edge(scd, "__Attribute_", dict_read(scd_model, "Class"), dict_read(scd_model, "__Type"))
-	instantiate_bottom_edge(scd, "__AttributeAttrs", dict_read(scd_model, "__Attribute_"), dict_read(scd_model, "__Type"))
-	instantiate_bottom_edge(scd, "__Attribute", dict_read(scd_model, "Class"), dict_read(scd_model, "__Type"))
-	instantiate_bottom_edge(scd, "__Name", dict_read(scd_model, "__Attribute"), dict_read(scd_model, "__String"))
-	instantiate_bottom_edge(scd, "Association", dict_read(scd_model, "Class"), dict_read(scd_model, "Class"))
-	instantiate_bottom_edge(scd, "Inheritance", dict_read(scd_model, "Class"), dict_read(scd_model, "Class"))
-	instantiate_bottom_edge(scd, "__inh_1", dict_read(scd_model, "Association"), dict_read(scd_model, "Class"))
-	instantiate_bottom_edge(scd, "__inh_2", dict_read(scd_model, "__Attribute_"), dict_read(scd_model, "Class"))
-
-	// Instantiated, now retype to make sure that everything is correct
-	Element mapping
-	mapping = create_node()

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

@@ -2,8 +2,8 @@ import string
 from primitives_visitor import PrimitivesVisitor
 
 class BootstrapVisitor(PrimitivesVisitor):
-    def __init__(self):
-        PrimitivesVisitor.__init__(self)
+    def __init__(self, args):
+        PrimitivesVisitor.__init__(self, args)
 
     def dump(self):
         call = self.value("call")

+ 3 - 3
interface/HUTN/hutn_compiler/compiler.py

@@ -185,12 +185,12 @@ def main(input_file, grammar_file, mode, args):
         from semantics_visitor import SemanticsVisitor
         from bootstrap_visitor import BootstrapVisitor
         visitor = SemanticsVisitor()
-        visitor2 = BootstrapVisitor()
+        visitor2 = BootstrapVisitor(args)
     elif mode == "PS":
         from semantics_visitor import SemanticsVisitor
         from primitives_visitor import PrimitivesVisitor
         visitor = SemanticsVisitor()
-        visitor2 = PrimitivesVisitor()
+        visitor2 = PrimitivesVisitor(args)
     elif mode == "PO":
         from semantics_visitor import SemanticsVisitor
         from primitives_object_visitor import PrimitivesObjectVisitor
@@ -200,7 +200,7 @@ def main(input_file, grammar_file, mode, args):
         from semantics_visitor import SemanticsVisitor
         from constructors_visitor import ConstructorsVisitor
         visitor = SemanticsVisitor()
-        visitor2 = ConstructorsVisitor()
+        visitor2 = ConstructorsVisitor(args)
     elif mode == "CO":
         from semantics_visitor import SemanticsVisitor
         from constructors_object_visitor import ConstructorsObjectVisitor

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

@@ -2,7 +2,7 @@ import cPickle as pickle
 from visitor import Visitor
 
 class ConstructorsVisitor(Visitor):
-    def __init__(self):
+    def __init__(self, args):
         self.constructors = []
         self.free_id = 0
 

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

@@ -110,6 +110,8 @@ class Tree(object):
             self.head, str((self.startpos, self.endpos)),
             ", ".join([str(i) for i in self.get_raw_tail()]))
 
+    def get_reference_line(self):
+        return "%s:%s" % (self.inputfile, self.startpos["line"])
 
 class Parser(object):
     class Constants(object):

+ 20 - 10
interface/HUTN/hutn_compiler/primitives_visitor.py

@@ -2,10 +2,15 @@ import string
 from visitor import Visitor
 
 class PrimitivesVisitor(Visitor):
-    def __init__(self):
+    def __init__(self, args):
         self.output = []
         self.free_id = 0
         self.function_values = dict()
+        self.debug_symbols = "--debug" in args
+
+    def debug(self, node, tree, msg=""):
+        if self.debug_symbols:
+            self.dict(node, "__debug", self.value("[%s] %s" % (tree.get_reference_line(), msg)))
 
     def node(self):
         self.output.append(("N", self.free_id))
@@ -102,6 +107,7 @@ class PrimitivesVisitor(Visitor):
 
         symbol.node = n
         self.dict(d, "var", n)
+        self.debug(d, tree)
 
         self.set_primitive(tree, d)
 
@@ -113,6 +119,7 @@ class PrimitivesVisitor(Visitor):
         value = self.get_primitive(tree.get_tail()[-1])
         self.dict(a, "var", var)
         self.dict(a, "value", value)
+        self.debug(a, tree)
 
         self.set_primitive(tree, a)
 
@@ -172,6 +179,8 @@ class PrimitivesVisitor(Visitor):
         c = self.value("constant")
         n = self.value(tree.get_text())
         self.dict(c, "node", n)
+        self.debug(c, tree)
+
         self.set_primitive(tree, c)
 
     def visit_integer(self, tree):
@@ -187,6 +196,7 @@ class PrimitivesVisitor(Visitor):
             return
         a = self.value("access")
         self.dict(a, "var", r)
+        self.debug(a, tree)
         self.set_primitive(tree, a)
 
     def visit_lvalue(self, tree):
@@ -196,6 +206,7 @@ class PrimitivesVisitor(Visitor):
         r = self.value("resolve")
         # print symbol.name, symbol.is_func(), symbol.node
         self.dict(r, "var", symbol.node)
+        self.debug(r, tree)
         self.set_primitive(tree, r)
 
     def visit_func_call(self, tree):
@@ -226,6 +237,7 @@ class PrimitivesVisitor(Visitor):
         c = self.value("call")
         a = self.get_primitive(tree.get_tail()[0])
         self.dict(c, "func", a)
+        self.debug(c, tree)
 
         if arg_nodes_reversed:
             self.dict(c, "params", arg_nodes_reversed[-1])
@@ -236,24 +248,17 @@ class PrimitivesVisitor(Visitor):
     def visit_input(self, tree):
         self.visit_children(tree)
         v = self.value("input")
+        self.debug(v, tree)
         self.set_primitive(tree, v)
 
     def visit_output(self, tree):
         self.visit_children(tree)
         v = self.value("output")
+        self.debug(v, tree)
         value = self.get_primitive(tree.get_child("expression"))
         self.dict(v, "value", value)
         self.set_primitive(tree, v)
 
-    def visit_dictionary(self, tree):
-        pass  # TODO dictionary and list
-
-    def visit_list(self, tree):
-        pass  # TODO dictionary and list
-
-    def visit_dict_item(self, tree):
-        pass
-
     def visit_ifelse(self, tree):
         self.visit_children(tree)
         expressions = [self.get_primitive(e) for e in
@@ -264,6 +269,7 @@ class PrimitivesVisitor(Visitor):
         prev = None
         for e, b in zip(expressions, blocks):
             v = self.value("if")
+            self.debug(v, tree)
             if first is None:
                 first = v
             self.dict(v, "cond", e)
@@ -281,6 +287,7 @@ class PrimitivesVisitor(Visitor):
         self.visit_children(tree)
 
         w = self.value("while")
+        self.debug(w, tree)
         c = self.get_primitive(tree.get_child("expression"))
         b = self.get_primitive(tree.get_child("block"))
 
@@ -370,6 +377,7 @@ class PrimitivesVisitor(Visitor):
 
             declare = self.value("global")
             self.dict(declare, "var", root)
+            self.debug(declare, tree)
 
             resolve = self.value("resolve")
             self.dict(resolve, "var", root)
@@ -389,6 +397,7 @@ class PrimitivesVisitor(Visitor):
 
         declare = self.value("global")
         self.dict(declare, "var", root)
+        self.debug(declare, tree)
 
         symbol.node = root
 
@@ -423,6 +432,7 @@ class PrimitivesVisitor(Visitor):
     def visit_return(self, tree):
         self.visit_children(tree)
         r = self.value("return")
+        self.debug(r, tree)
         if len(tree.get_tail()) > 1:
             v = self.get_primitive(tree.get_tail()[1])
             self.dict(r, "value", v)

+ 4 - 3
interface/HUTN/test/graph_compilation_action_language/test_simple.py

@@ -11,9 +11,10 @@ def compile_file(obj, filename):
     result = postproc(result)
     expected = postproc(expected)
     if result != expected:
-        f = open(util.get_expected_path(filename), 'w')
-        f.write(result)
-        f.close()
+        #f = open(util.get_expected_path(filename), 'w')
+        #f.write(result)
+        #f.close()
+        pass
     assert result == expected
 
 class TestSimple(unittest.TestCase):