浏览代码

Updated AL metamodel

Yentl Van Tendeloo 8 年之前
父节点
当前提交
6d5fe29845
共有 4 个文件被更改,包括 63 次插入135 次删除
  1. 二进制
      bootstrap/bootstrap.m.gz
  2. 28 86
      bootstrap/metamodels.alc
  3. 7 1
      bootstrap/modelling.alc
  4. 28 48
      integration/test_constructors_models.py

二进制
bootstrap/bootstrap.m.gz


+ 28 - 86
bootstrap/metamodels.alc

@@ -324,56 +324,40 @@ Void function add_AL_to_MM(model : Element):
 	instantiate_node(model, "AttributeValue", "input")
 	instantiate_node(model, "AttributeValue", "resolve")
 	instantiate_node(model, "AttributeValue", "call")
+
 	instantiate_link(model, "Attribute", "dict_link", "Action", "PrimitiveType")
 	instantiate_attribute(model, "dict_link", "name", "dictionary_link")
 	instantiate_attribute(model, "dict_link", "optional", True)
 	model_define_attribute(model, "dict_link", "name", False, "String")
-	instantiate_link(model, "Inheritance", "", "Action", "Element")
-	instantiate_link(model, "Inheritance", "", "funcdef", "Action")
-	instantiate_link(model, "Inheritance", "", "param", "Action")
-	instantiate_link(model, "Inheritance", "", "Statement", "Action")
-	instantiate_link(model, "Inheritance", "", "Expression", "Action")
-	instantiate_link(model, "Inheritance", "", "resolve", "Statement")
-	instantiate_link(model, "Inheritance", "", "if", "Statement")
-	instantiate_link(model, "Inheritance", "", "break", "Statement")
-	instantiate_link(model, "Inheritance", "", "continue", "Statement")
-	instantiate_link(model, "Inheritance", "", "global", "Statement")
-	instantiate_link(model, "Inheritance", "", "while", "Statement")
-	instantiate_link(model, "Inheritance", "", "assign", "Statement")
-	instantiate_link(model, "Inheritance", "", "return", "Statement")
-	instantiate_link(model, "Inheritance", "", "call", "Statement")
-	instantiate_link(model, "Inheritance", "", "declare", "Statement")
-	instantiate_link(model, "Inheritance", "", "call", "Expression")
-	instantiate_link(model, "Inheritance", "", "access", "Expression")
-	instantiate_link(model, "Inheritance", "", "constant", "Expression")
-	instantiate_link(model, "Inheritance", "", "input", "Expression")
-	instantiate_link(model, "Attribute", "statement_next", "Statement", "Statement")
-	instantiate_link(model, "Attribute", "if_cond", "if", "Expression")
-	instantiate_link(model, "Attribute", "if_then", "if", "Statement")
-	instantiate_link(model, "Attribute", "if_else", "if", "Statement")
-	instantiate_link(model, "Attribute", "while_cond", "while", "Expression")
-	instantiate_link(model, "Attribute", "while_body", "while", "Statement")
-	instantiate_link(model, "Attribute", "assign_var", "assign", "Element")
-	instantiate_link(model, "Attribute", "assign_value", "assign", "Expression")
-	instantiate_link(model, "Attribute", "break_while", "break", "while")
-	instantiate_link(model, "Attribute", "continue_while", "continue", "while")
-	instantiate_link(model, "Attribute", "return_value", "return", "Expression")
-	instantiate_link(model, "Attribute", "resolve_var", "resolve", "Element")
-	instantiate_link(model, "Attribute", "access_var", "access", "Element")
-	instantiate_link(model, "Attribute", "constant_node", "constant", "Element")
-	instantiate_link(model, "Attribute", "output_node", "output", "Expression")
-	instantiate_link(model, "Attribute", "global_var", "global", "String")
-	instantiate_link(model, "Attribute", "param_name", "param", "String")
-	instantiate_link(model, "Attribute", "param_value", "param", "Expression")
-	instantiate_link(model, "Attribute", "param_next_param", "param", "param")
-	instantiate_link(model, "Attribute", "funcdef_body", "funcdef", "Statement")
-	instantiate_link(model, "Attribute", "call_func", "call", "Expression")
-	instantiate_link(model, "Attribute", "call_params", "call", "param")
-	instantiate_link(model, "Attribute", "call_last_param", "call", "param")
+
+	model_define_attribute(model, "Statement", "next", True, "Statement")
+	model_define_attribute(model, "if", "cond", False, "Expression")
+	model_define_attribute(model, "if", "true", False, "Statement")
+	model_define_attribute(model, "if", "false", True, "Statement")
+	model_define_attribute(model, "while", "cond", False, "Expression")
+	model_define_attribute(model, "while", "body", False, "Statement")
+	model_define_attribute(model, "assign", "var", False, "resolve")
+	model_define_attribute(model, "assign", "value", False, "Expression")
+	model_define_attribute(model, "break", "while", False, "while")
+	model_define_attribute(model, "continue", "while", False, "while")
+	model_define_attribute(model, "return", "value", True, "Expression")
+	model_define_attribute(model, "resolve", "var", False, "String")
+	model_define_attribute(model, "access", "var", False, "resolve")
+	model_define_attribute(model, "constant", "node", False, "PrimitiveType")
+	model_define_attribute(model, "output", "node", False, "Expression")
+	model_define_attribute(model, "global", "var", False, "String")
+	model_define_attribute(model, "param", "name", False, "String")
+	model_define_attribute(model, "param", "value", False, "Expression")
+	model_define_attribute(model, "param", "next_param", True, "param")
+	model_define_attribute(model, "funcdef", "body", False, "Statement")
+	model_define_attribute(model, "call", "func", False, "Statement")
+	model_define_attribute(model, "call", "params", True, "param")
+	model_define_attribute(model, "call", "last_param", True, "param")
+
 	instantiate_link(model, "Inheritance", "", "statement_next", "dict_link")
 	instantiate_link(model, "Inheritance", "", "if_cond", "dict_link")
-	instantiate_link(model, "Inheritance", "", "if_then", "dict_link")
-	instantiate_link(model, "Inheritance", "", "if_else", "dict_link")
+	instantiate_link(model, "Inheritance", "", "if_true", "dict_link")
+	instantiate_link(model, "Inheritance", "", "if_false", "dict_link")
 	instantiate_link(model, "Inheritance", "", "while_cond", "dict_link")
 	instantiate_link(model, "Inheritance", "", "while_body", "dict_link")
 	instantiate_link(model, "Inheritance", "", "assign_var", "dict_link")
@@ -394,46 +378,4 @@ Void function add_AL_to_MM(model : Element):
 	instantiate_link(model, "Inheritance", "", "call_params", "dict_link")
 	instantiate_link(model, "Inheritance", "", "call_last_param", "dict_link")
 
-	// Add cardinalities on how many connections are allowed: one of each
-	// instantiate_attribute(model, "statement_next", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "if_cond", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "if_cond", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "if_then", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "if_then", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "if_else", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "while_cond", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "while_cond", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "while_body", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "while_body", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "assign_var", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "assign_var", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "assign_value", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "assign_value", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "break_while", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "break_while", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "continue_while", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "continue_while", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "return_value", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "resolve_var", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "resolve_var", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "access_var", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "access_var", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "constant_node", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "constant_node", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "output_node", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "output_node", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "global_var", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "global_var", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "param_name", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "param_name", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "param_value", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "param_value", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "param_next_param", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "funcdef_body", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "funcdef_body", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "call_func", "target_lower_cardinality", 1)
-	// instantiate_attribute(model, "call_func", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "call_params", "target_upper_cardinality", 1)
-	// instantiate_attribute(model, "call_last_param", "target_upper_cardinality", 1)
-
 	return !

+ 7 - 1
bootstrap/modelling.alc

@@ -309,7 +309,13 @@ String function model_define_attribute(model : Element, elem : String, name : St
 	// Create the necessary links to make it an attribute
 	String edge_name
 
-	edge_name = instantiate_link(model, "Attribute", "", elem, type)
+	edge_name = (elem + "_") + name
+	while (dict_in(model["model"], edge_name)):
+		// Already exists, so make random name
+		edge_name = edge_name + cast_id2s(model["model"][elem])
+		log("Name clash detected for attribute: try new name: " + edge_name)
+
+	edge_name = instantiate_link(model, "Attribute", edge_name, elem, type)
 	instantiate_attribute(model, edge_name, "name", name)
 	instantiate_attribute(model, edge_name, "optional", optional)
 

+ 28 - 48
integration/test_constructors_models.py

@@ -82,10 +82,12 @@ action_language = [
         "instantiate_node", "1", "AttributeValue", "input",
         "instantiate_node", "1", "AttributeValue", "resolve",
         "instantiate_node", "1", "AttributeValue", "call",
+
         "instantiate_link", "1", "Attribute", "dict_link", "Action", "PrimitiveType",
         "instantiate_attribute", "1", "dict_link", "name", "dictionary_link",
         "instantiate_attribute", "1", "dict_link", "optional", True,
         "model_define_attribute", "1", "dict_link", "name", False, "String",
+
         "instantiate_link", "1", "Inheritance", "", "Action", "Element",
         "instantiate_link", "1", "Inheritance", "", "funcdef", "Action",
         "instantiate_link", "1", "Inheritance", "", "param", "Action",
@@ -105,57 +107,35 @@ action_language = [
         "instantiate_link", "1", "Inheritance", "", "access", "Expression",
         "instantiate_link", "1", "Inheritance", "", "constant", "Expression",
         "instantiate_link", "1", "Inheritance", "", "input", "Expression",
+
         "model_define_attribute", "1", "Statement", "next", True, "Statement",
-        # TODO replace all like this!
-        "instantiate_link", "1", "Attribute", "if_cond", "if", "Expression",
-        "instantiate_link", "1", "Attribute", "if_then", "if", "Statement",
-        "instantiate_link", "1", "Attribute", "if_else", "if", "Statement",
-        "instantiate_link", "1", "Attribute", "while_cond", "while", "Expression",
-        "instantiate_link", "1", "Attribute", "while_body", "while", "Statement",
-        "instantiate_link", "1", "Attribute", "assign_var", "assign", "Element",
-        "instantiate_link", "1", "Attribute", "assign_value", "assign", "Expression",
-        "instantiate_link", "1", "Attribute", "break_while", "break", "while",
-        "instantiate_link", "1", "Attribute", "continue_while", "continue", "while",
-        "instantiate_link", "1", "Attribute", "return_value", "return", "Expression",
-        "instantiate_link", "1", "Attribute", "resolve_var", "resolve", "Element",
-        "instantiate_link", "1", "Attribute", "access_var", "access", "Element",
-        "instantiate_link", "1", "Attribute", "constant_node", "constant", "Element",
-        "instantiate_link", "1", "Attribute", "output_node", "output", "Expression",
-        "instantiate_link", "1", "Attribute", "global_var", "global", "String",
-        "instantiate_link", "1", "Attribute", "param_name", "param", "String",
-        "instantiate_link", "1", "Attribute", "param_value", "param", "Expression",
-        "instantiate_link", "1", "Attribute", "param_next_param", "param", "param",
-        "instantiate_link", "1", "Attribute", "funcdef_body", "funcdef", "Statement",
-        "instantiate_link", "1", "Attribute", "call_func", "call", "Expression",
-        "instantiate_link", "1", "Attribute", "call_params", "call", "param",
-        "instantiate_link", "1", "Attribute", "call_last_param", "call", "param",
-        "instantiate_attribute", "1", "if_cond", "name", "cond",
-        "instantiate_attribute", "1", "if_then", "name", "true",
-        "instantiate_attribute", "1", "if_else", "name", "false",
-        "instantiate_attribute", "1", "while_cond", "name", "cond",
-        "instantiate_attribute", "1", "while_body", "name", "body",
-        "instantiate_attribute", "1", "assign_var", "name", "var",
-        "instantiate_attribute", "1", "assign_value", "name", "value",
-        "instantiate_attribute", "1", "break_while", "name", "while",
-        "instantiate_attribute", "1", "continue_while", "name", "while",
-        "instantiate_attribute", "1", "return_value", "name", "value",
-        "instantiate_attribute", "1", "resolve_var", "name", "var",
-        "instantiate_attribute", "1", "access_var", "name", "var",
-        "instantiate_attribute", "1", "constant_node", "name", "node",
-        "instantiate_attribute", "1", "output_node", "name", "node",
-        "instantiate_attribute", "1", "global_var", "name", "var",
-        "instantiate_attribute", "1", "param_name", "name", "name",
-        "instantiate_attribute", "1", "param_value", "name", "value",
-        "instantiate_attribute", "1", "param_next_param", "name", "next_param",
-        "instantiate_attribute", "1", "funcdef_body", "name", "body",
-        "instantiate_attribute", "1", "call_func", "name", "func",
-        "instantiate_attribute", "1", "call_params", "name", "params",
-        "instantiate_attribute", "1", "call_last_param", "name", "last_param",
+        "model_define_attribute", "1", "if", "cond", False, "Expression",
+        "model_define_attribute", "1", "if", "true", False, "Statement",
+        "model_define_attribute", "1", "if", "false", True, "Statement",
+        "model_define_attribute", "1", "while", "cond", False, "Expression",
+        "model_define_attribute", "1", "while", "body", False, "Statement",
+        "model_define_attribute", "1", "assign", "var", False, "resolve",
+        "model_define_attribute", "1", "assign", "value", False, "Expression",
+        "model_define_attribute", "1", "break", "while", False, "while",
+        "model_define_attribute", "1", "continue", "while", False, "while",
+        "model_define_attribute", "1", "return", "value", True, "Expression",
+        "model_define_attribute", "1", "resolve", "var", False, "String",
+        "model_define_attribute", "1", "access", "var", False, "resolve",
+        "model_define_attribute", "1", "constant", "node", False, "PrimitiveType",
+        "model_define_attribute", "1", "output", "node", False, "Expression",
+        "model_define_attribute", "1", "global", "var", False, "String",
+        "model_define_attribute", "1", "param", "name", False, "String",
+        "model_define_attribute", "1", "param", "value", False, "Expression",
+        "model_define_attribute", "1", "param", "next_param", True, "param",
+        "model_define_attribute", "1", "funcdef", "body", False, "Statement",
+        "model_define_attribute", "1", "call", "func", False, "Expression",
+        "model_define_attribute", "1", "call", "params", True, "param",
+        "model_define_attribute", "1", "call", "last_param", True, "param",
 
-        "instantiate_link", "1", "Inheritance", "", "statement_next", "dict_link",
+        "instantiate_link", "1", "Inheritance", "", "Statement_next", "dict_link",
         "instantiate_link", "1", "Inheritance", "", "if_cond", "dict_link",
-        "instantiate_link", "1", "Inheritance", "", "if_then", "dict_link",
-        "instantiate_link", "1", "Inheritance", "", "if_else", "dict_link",
+        "instantiate_link", "1", "Inheritance", "", "if_true", "dict_link",
+        "instantiate_link", "1", "Inheritance", "", "if_false", "dict_link",
         "instantiate_link", "1", "Inheritance", "", "while_cond", "dict_link",
         "instantiate_link", "1", "Inheritance", "", "while_body", "dict_link",
         "instantiate_link", "1", "Inheritance", "", "assign_var", "dict_link",