|
@@ -2,9 +2,6 @@ from visitor import Visitor
|
|
|
from compiler import main as do_compile
|
|
|
import os
|
|
|
|
|
|
-def jsonstr(s):
|
|
|
- return '"%s"' % s
|
|
|
-
|
|
|
def empty(s):
|
|
|
return None
|
|
|
|
|
@@ -37,19 +34,19 @@ class ModelVisitor(Visitor):
|
|
|
def visit_import(self, tree):
|
|
|
url = tree.get_children("MV_URL")[0]
|
|
|
target = tree.get_children("MODEL_ID")[0]
|
|
|
- self.constructors.extend(['"import_node"', jsonstr(url.get_text()), jsonstr(target.get_text())])
|
|
|
+ self.constructors.extend(["import_node", url.get_text(), target.get_text()])
|
|
|
|
|
|
def visit_export(self, tree):
|
|
|
url = tree.get_children("MV_URL")[0]
|
|
|
target = tree.get_children("MODEL_ID")[0]
|
|
|
- self.constructors.extend(['"export_node"', jsonstr(target.get_text()), jsonstr(url.get_text())])
|
|
|
+ self.constructors.extend(["export_node", target.get_text(), url.get_text()])
|
|
|
|
|
|
def visit_model(self, tree):
|
|
|
children = tree.get_children("MODEL_ID")
|
|
|
model_type = children[0].get_text()
|
|
|
model_name = children[1].get_text()
|
|
|
- self.constructors.extend(['"instantiate_model"', jsonstr(model_type), jsonstr(model_name)])
|
|
|
- self.constructors.extend(['"define_inheritance"', jsonstr(model_name), jsonstr("Inheritance")])
|
|
|
+ self.constructors.extend(["instantiate_model", model_type, model_name])
|
|
|
+ self.constructors.extend(["define_inheritance", model_name, "Inheritance"])
|
|
|
self.current_model = model_name
|
|
|
for element in tree.get_children("model_element"):
|
|
|
self.visit(element)
|
|
@@ -67,9 +64,9 @@ class ModelVisitor(Visitor):
|
|
|
# So we have a source and target; but aren't sure which is which, because the name is optional!
|
|
|
source_name = children[-2].get_text()
|
|
|
target_name = children[-1].get_text()
|
|
|
- self.constructors.extend(['"instantiate_link"', jsonstr(self.current_model), jsonstr(element_type), jsonstr(element_name), jsonstr(source_name), jsonstr(target_name)])
|
|
|
+ self.constructors.extend(["instantiate_link", self.current_model, element_type, element_name, source_name, target_name])
|
|
|
else:
|
|
|
- self.constructors.extend(['"instantiate_node"', jsonstr(self.current_model), jsonstr(element_type), jsonstr(element_name)])
|
|
|
+ self.constructors.extend(["instantiate_node", self.current_model, element_type, element_name])
|
|
|
self.current_element = element_name
|
|
|
|
|
|
if tree.get_children("inheritance"):
|
|
@@ -81,7 +78,7 @@ class ModelVisitor(Visitor):
|
|
|
def visit_inheritance(self, tree):
|
|
|
for token in tree.get_children("MODEL_ID"):
|
|
|
superclass = token.get_text()
|
|
|
- self.constructors.extend(['"instantiate_link"', jsonstr(self.current_model), jsonstr("Inheritance"), jsonstr("%s_inherits_from_%s" % (self.current_element, superclass)), jsonstr(self.current_element), jsonstr(superclass)])
|
|
|
+ self.constructors.extend(["instantiate_link", self.current_model, "Inheritance", "%s_inherits_from_%s" % (self.current_element, superclass), self.current_element, superclass])
|
|
|
|
|
|
def visit_model_attribute(self, tree):
|
|
|
children = tree.get_children("MODEL_ID")
|
|
@@ -92,9 +89,9 @@ class ModelVisitor(Visitor):
|
|
|
if is_definition:
|
|
|
attr_name = children[0].get_text()
|
|
|
attr_type = children[1].get_text()
|
|
|
- self.constructors.extend(['"instantiate_link"', jsonstr(self.current_model), jsonstr("Association"), jsonstr(self.current_element + "_" + attr_name), jsonstr(self.current_element), jsonstr(attr_type)])
|
|
|
+ self.constructors.extend(["instantiate_link", self.current_model, "Association", self.current_element + "_" + attr_name, self.current_element, attr_type])
|
|
|
full_attribute_name = self.current_element + "_" + attr_name
|
|
|
- self.constructors.extend(['"instantiate_attribute"', jsonstr(self.current_model), jsonstr(full_attribute_name), jsonstr("name"), jsonstr(attr_name)])
|
|
|
+ self.constructors.extend(["instantiate_attribute", self.current_model, full_attribute_name, "name", attr_name])
|
|
|
if is_assign:
|
|
|
# There are also some attributes to set!
|
|
|
old_element = self.current_element
|
|
@@ -117,10 +114,22 @@ class ModelVisitor(Visitor):
|
|
|
f.write(constraint)
|
|
|
f.flush()
|
|
|
directory = os.path.realpath(__file__).rsplit(os.sep, 1)[0]
|
|
|
- self.constructors.extend(['"add_constraint"', jsonstr(self.current_model), jsonstr(self.current_element)] + do_compile(".constraint.alc", directory + "/../grammars/actionlanguage.g", "CS"))
|
|
|
+ self.constructors.extend(["add_constraint", self.current_model, self.current_element] + do_compile(".constraint.alc", directory + "/../grammars/actionlanguage.g", "CS"))
|
|
|
|
|
|
def visit_model_attr_instance(self, tree):
|
|
|
children = tree.get_children("MODEL_ID")
|
|
|
attr_name = children[0].get_text()
|
|
|
- attr_value = tree.get_children("value")[0]
|
|
|
- self.constructors.extend(['"instantiate_attribute"', jsonstr(self.current_model), jsonstr(self.current_element), jsonstr(attr_name), jsonstr(attr_value.get_text()) if attr_value.head == "STRVALUE" else attr_value.get_text()])
|
|
|
+ attr_value = tree.get_children("value")[0].get_tail()[0]
|
|
|
+ if attr_value.head == "STRVALUE":
|
|
|
+ attr_value = attr_value.get_text()[1:-1]
|
|
|
+ elif attr_value.head == "TRUE":
|
|
|
+ attr_value = True
|
|
|
+ elif attr_value.head == "FALSE":
|
|
|
+ attr_value = False
|
|
|
+ elif attr_value.head == "DEC_NUMBER":
|
|
|
+ attr_value = int(attr_value.get_text())
|
|
|
+ elif attr_value.head == "FLOAT_NUMBER":
|
|
|
+ attr_value = float(attr_value.get_text())
|
|
|
+ else:
|
|
|
+ raise Exception(attr_value.head)
|
|
|
+ self.constructors.extend(["instantiate_attribute", self.current_model, self.current_element, attr_name, attr_value])
|