|
@@ -4,6 +4,7 @@ include "library.alh"
|
|
|
include "io.alh"
|
|
|
include "modelling.alh"
|
|
|
include "utils.alh"
|
|
|
+include "object_operations.alh"
|
|
|
|
|
|
Element while_stack = ?
|
|
|
Element variable_map = ?
|
|
@@ -11,10 +12,13 @@ Element variable_map = ?
|
|
|
Element function construct_function_list(list : Element):
|
|
|
String command
|
|
|
Element result
|
|
|
- Element main_function
|
|
|
+ String main_function
|
|
|
Boolean continue
|
|
|
- Element prev_element
|
|
|
- Element first_element
|
|
|
+ String prev_element
|
|
|
+ String first_element
|
|
|
+
|
|
|
+ Element model
|
|
|
+ model = instantiate_model(import_node("models/ActionLanguage"))
|
|
|
|
|
|
list = list_reverse(list)
|
|
|
|
|
@@ -30,19 +34,19 @@ Element function construct_function_list(list : Element):
|
|
|
while (continue):
|
|
|
command = list_pop_final(list)
|
|
|
if (command == "global"):
|
|
|
- result = construct_global(list)
|
|
|
+ result = construct_global(model, list)
|
|
|
elif (command == "funcdef"):
|
|
|
- result = construct_funcdef(False, list)
|
|
|
+ result = construct_funcdef(model, list, False)
|
|
|
elif (command == "mutable_funcdef"):
|
|
|
- result = construct_funcdef(True, list)
|
|
|
+ result = construct_funcdef(model, list, True)
|
|
|
else:
|
|
|
log("ERROR (1): did not understand command " + cast_value(command))
|
|
|
output("ERROR: compiled code not understood: " + cast_value(command))
|
|
|
return read_root()!
|
|
|
|
|
|
continue = list_pop_final(list)
|
|
|
- if (prev_element != read_root()):
|
|
|
- dict_add_fast(prev_element, "next", result["start"])
|
|
|
+ if (element_neq(prev_element, read_root())):
|
|
|
+ create_al_link(model, "Statement_next", prev_element, result["start"], "next")
|
|
|
else:
|
|
|
first_element = result["start"]
|
|
|
|
|
@@ -63,49 +67,53 @@ Element function construct_function_list(list : Element):
|
|
|
return read_root()!
|
|
|
|
|
|
// Overwrite the main function with our declaration function
|
|
|
- prev_element = main_function["body"]
|
|
|
- dict_delete(main_function, "body")
|
|
|
- dict_add_fast(main_function, "body", first_element)
|
|
|
- dict_add_fast(result["end"], "next", prev_element)
|
|
|
-
|
|
|
- return main_function!
|
|
|
-
|
|
|
-Action function construct_global(list : Element):
|
|
|
- Action this_element
|
|
|
+ prev_element = set_pop(allAssociationDestinations(model, main_function, "funcdef_body"))
|
|
|
+ model_delete_element(model, set_pop(allOutgoingAssociationInstances(model, main_function, "funcdef_body")))
|
|
|
+ create_al_link(model, "funcdef_body", main_function, first_element, "body")
|
|
|
+ create_al_link(model, "Statement_next", result["end"], prev_element, "next")
|
|
|
+ instantiate_link(model, "initial_funcdef", "", instantiate_node(model, "Initial", ""), main_function)
|
|
|
+ return model!
|
|
|
+
|
|
|
+Void function create_al_link(model : Element, linktype : String, source : String, target : String, dictname : String):
|
|
|
+ instantiate_attribute(model, instantiate_link(model, linktype, "", source, target), "name", dictname)
|
|
|
+ return!
|
|
|
+
|
|
|
+String function construct_global(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
String declared_element
|
|
|
String op
|
|
|
|
|
|
- this_element = create_value(!global)
|
|
|
- declared_element = list_pop_final(list)
|
|
|
- dict_add_fast(this_element, "var", declared_element)
|
|
|
+ this_element = instantiate_value(model, "global", "", create_value(!global))
|
|
|
+ declared_element = instantiate_value(model, "String", "", create_value(list_pop_final(list)))
|
|
|
+ create_al_link(model, "global_var", this_element, declared_element, "var")
|
|
|
|
|
|
op = list_pop_final(list)
|
|
|
if (op != "none"):
|
|
|
// Defines
|
|
|
- Action assign
|
|
|
- Action resolve
|
|
|
- Action value
|
|
|
- assign = create_value(!assign)
|
|
|
- dict_add_fast(this_element, "next", assign)
|
|
|
- resolve = create_value(!resolve)
|
|
|
- dict_add_fast(assign, "var", resolve)
|
|
|
- dict_add_fast(resolve, "var", declared_element)
|
|
|
+ String assign
|
|
|
+ String resolve
|
|
|
+ String value
|
|
|
+ assign = instantiate_value(model, "assign", "", create_value(!assign))
|
|
|
+ create_al_link(model, "Statement_next", this_element, assign, "next")
|
|
|
+ resolve = instantiate_value(model, "resolve", "", create_value(!resolve))
|
|
|
+ create_al_link(model, "assign_var", assign, resolve, "var")
|
|
|
+ create_al_link(model, "resolve_var", resolve, declared_element, "var")
|
|
|
if (op == "deref"):
|
|
|
- value = create_value(!constant)
|
|
|
- dict_add_fast(value, "node", import_node(list_pop_final(list)))
|
|
|
+ value = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
+ create_al_link(model, "constant_node", this_element, value, "node")
|
|
|
elif (op == "empty"):
|
|
|
- value = create_value(!call)
|
|
|
- Element res
|
|
|
- Element acc
|
|
|
- res = create_value(!resolve)
|
|
|
- acc = create_value(!access)
|
|
|
- dict_add_fast(value, "func", acc)
|
|
|
- dict_add_fast(acc, "var", res)
|
|
|
- dict_add_fast(res, "var", "create_node")
|
|
|
+ value = instantiate_value(model, "call", "", create_value(!call))
|
|
|
+ String res
|
|
|
+ String acc
|
|
|
+ res = instantiate_value(model, "resolve", "", create_value(!resolve))
|
|
|
+ acc = instantiate_value(model, "access", "", create_value(!access))
|
|
|
+ create_al_link(model, "call_func", value, acc, "func")
|
|
|
+ create_al_link(model, "access_var", acc, res, "var")
|
|
|
+ create_al_link(model, "resolve_var", res, instantiate_value(model, "String", "", "create_node"), "var")
|
|
|
elif (op == "const"):
|
|
|
- value = create_value(!constant)
|
|
|
- dict_add_fast(value, "node", list_pop_final(list))
|
|
|
- dict_add_fast(assign, "value", value)
|
|
|
+ value = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
+ create_al_link(model, "constant_node", value, list_pop_final(list), "node")
|
|
|
+ create_al_link(model, "assign_value", assign, value, "value")
|
|
|
|
|
|
Element result
|
|
|
result = dict_create()
|
|
@@ -123,37 +131,37 @@ Action function construct_global(list : Element):
|
|
|
dict_add_fast(result, "end", this_element)
|
|
|
return result!
|
|
|
|
|
|
-Action function construct_funcdef(mutable : Boolean, list : Element):
|
|
|
- Action assign
|
|
|
- Action resolve
|
|
|
- Action constant
|
|
|
- Element formal
|
|
|
- Element func
|
|
|
- Element params
|
|
|
- Action declare
|
|
|
+String function construct_funcdef(model : Element, list : Element, mutable : Boolean):
|
|
|
+ String assign
|
|
|
+ String resolve
|
|
|
+ String constant
|
|
|
+ String formal
|
|
|
+ String func
|
|
|
+ String params
|
|
|
+ String declare
|
|
|
String name
|
|
|
|
|
|
- declare = create_value(!global)
|
|
|
- assign = create_value(!assign)
|
|
|
- resolve = create_value(!resolve)
|
|
|
- constant = create_value(!constant)
|
|
|
+ declare = instantiate_value(model, "global", "", create_value(!global))
|
|
|
+ assign = instantiate_value(model, "assign", "", create_value(!assign))
|
|
|
+ resolve = instantiate_value(model, "resolve", "", create_value(!resolve))
|
|
|
+ constant = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
name = list_pop_final(list)
|
|
|
if (dict_in(variable_map, name)):
|
|
|
formal = dict_read(variable_map, name)
|
|
|
else:
|
|
|
- formal = name
|
|
|
- func = create_node()
|
|
|
- params = create_node()
|
|
|
- dict_add_fast(declare, "var", formal)
|
|
|
- dict_add_fast(declare, "next", assign)
|
|
|
- dict_add_fast(assign, "var", resolve)
|
|
|
- dict_add_fast(assign, "value", constant)
|
|
|
- dict_add_fast(resolve, "var", formal)
|
|
|
- dict_add_fast(constant, "node", func)
|
|
|
- dict_add_fast(func, "params", params)
|
|
|
+ formal = instantiate_value(model, "String", "", name)
|
|
|
+ func = instantiate_node(model, "funcdef", "")
|
|
|
+ params = instantiate_node(model, "param_dict", "")
|
|
|
+ create_al_link(model, "global_var", declare, formal, "var")
|
|
|
+ create_al_link(model, "Statement_next", declare, assign, "next")
|
|
|
+ create_al_link(model, "assign_var", assign, resolve, "var")
|
|
|
+ create_al_link(model, "assign_value", assign, constant, "value")
|
|
|
+ create_al_link(model, "resolve_var", resolve, formal, "var")
|
|
|
+ create_al_link(model, "constant_node", constant, func, "node")
|
|
|
+ create_al_link(model, "funcdef_params", func, params, "params")
|
|
|
|
|
|
if (mutable):
|
|
|
- dict_add_fast(func, "mutable", create_node())
|
|
|
+ create_al_link(model, "funcdef_mutable", func, instantiate_node(model, "Element", ""), "mutable")
|
|
|
|
|
|
Integer nrParams
|
|
|
nrParams = list_pop_final(list)
|
|
@@ -165,15 +173,14 @@ Action function construct_funcdef(mutable : Boolean, list : Element):
|
|
|
arg_names_decl = "abcdefghijklmnopqrstuvwxyz"
|
|
|
|
|
|
while (counter < nrParams):
|
|
|
- param = create_node()
|
|
|
- dict_add_fast(params, string_get(arg_names_decl, counter), param)
|
|
|
- dict_add_fast(param, "name", string_get(arg_names_decl, counter))
|
|
|
+ param = instantiate_node(model, "Element", "")
|
|
|
+ create_al_link(model, "param_dict_link", params, param, string_get(arg_names_decl, counter))
|
|
|
dict_add_fast(variable_map, list_pop_final(list), param)
|
|
|
// Output each parameter in turn
|
|
|
counter = counter + 1
|
|
|
|
|
|
// Now add the body
|
|
|
- dict_add_fast(func, "body", construct_unknown(list))
|
|
|
+ create_al_link(model, "funcdef_body", func, construct_unknown(model, list), "body")
|
|
|
|
|
|
Element result
|
|
|
result = dict_create()
|
|
@@ -183,102 +190,103 @@ Action function construct_funcdef(mutable : Boolean, list : Element):
|
|
|
dict_add_fast(result, "end", assign)
|
|
|
return result!
|
|
|
|
|
|
-Element function construct_unknown(list : Element):
|
|
|
+Element function construct_unknown(model : Element, list : Element):
|
|
|
String elem
|
|
|
Element new_model
|
|
|
Element new_model_model
|
|
|
elem = list_pop_final(list)
|
|
|
|
|
|
if (elem == "if"):
|
|
|
- return construct_if(list)!
|
|
|
+ return construct_if(model, list)!
|
|
|
elif (elem == "while"):
|
|
|
- return construct_while(list)!
|
|
|
+ return construct_while(model, list)!
|
|
|
elif (elem == "access"):
|
|
|
- return construct_access(list)!
|
|
|
+ return construct_access(model, list)!
|
|
|
elif (elem == "resolve"):
|
|
|
- return construct_resolve(list)!
|
|
|
+ return construct_resolve(model, list)!
|
|
|
elif (elem == "assign"):
|
|
|
- return construct_assign(list)!
|
|
|
+ return construct_assign(model, list)!
|
|
|
elif (elem == "call"):
|
|
|
- return construct_call(list)!
|
|
|
+ return construct_call(model, list)!
|
|
|
elif (elem == "return"):
|
|
|
- return construct_return(list)!
|
|
|
+ return construct_return(model, list)!
|
|
|
elif (elem == "const"):
|
|
|
- return construct_const(list)!
|
|
|
+ return construct_const(model, list)!
|
|
|
elif (elem == "declare"):
|
|
|
- return construct_declare(list)!
|
|
|
+ return construct_declare(model, list)!
|
|
|
elif (elem == "output"):
|
|
|
- return construct_output(list)!
|
|
|
+ return construct_output(model, list)!
|
|
|
elif (elem == "input"):
|
|
|
- return construct_input(list)!
|
|
|
+ return construct_input(model, list)!
|
|
|
elif (elem == "deref"):
|
|
|
- return construct_deref(list)!
|
|
|
+ return construct_deref(model, list)!
|
|
|
elif (elem == "break"):
|
|
|
- return construct_break(list)!
|
|
|
+ return construct_break(model, list)!
|
|
|
elif (elem == "continue"):
|
|
|
- return construct_continue(list)!
|
|
|
+ return construct_continue(model, list)!
|
|
|
else:
|
|
|
log("ERROR (2): did not understand command " + cast_value(elem))
|
|
|
output("ERROR: compiled code not understood: " + cast_value(elem))
|
|
|
return read_root()!
|
|
|
|
|
|
-Action function construct_if(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!if)
|
|
|
- dict_add_fast(this_element, "cond", construct_unknown(list))
|
|
|
- dict_add_fast(this_element, "then", construct_unknown(list))
|
|
|
+String function construct_if(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "if", "", create_value(!if))
|
|
|
+ create_al_link(model, "if_cond", this_element, construct_unknown(model, list), "cond")
|
|
|
+ create_al_link(model, "if_then", this_element, construct_unknown(model, list), "then")
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "else", construct_unknown(list))
|
|
|
+ create_al_link(model, "if_else", this_element, construct_unknown(model, list), "else")
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", this_element, construct_unknown(model, list), "next")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_while(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!while)
|
|
|
- dict_add_fast(this_element, "cond", construct_unknown(list))
|
|
|
+String function construct_while(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "while", "", create_value(!while))
|
|
|
+ create_al_link(model, "while_cond", this_element, construct_unknown(model, list), "cond")
|
|
|
|
|
|
list_append(while_stack, this_element)
|
|
|
- dict_add_fast(this_element, "body", construct_unknown(list))
|
|
|
+ create_al_link(model, "while_body", this_element, construct_unknown(model, list), "body")
|
|
|
list_delete(while_stack, list_len(while_stack) - 1)
|
|
|
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", this_element, construct_unknown(model, list), "next")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_access(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!access)
|
|
|
- dict_add_fast(this_element, "var", construct_unknown(list))
|
|
|
+String function construct_access(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "access", "", create_value(!access))
|
|
|
+ create_al_link(model, "access_var", this_element, construct_unknown(model, list), "var")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_resolve(list : Element):
|
|
|
- Action this_element
|
|
|
+String function construct_resolve(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
Element linked_element
|
|
|
String name
|
|
|
|
|
|
- this_element = create_value(!resolve)
|
|
|
+ this_element = instantiate_value(model, "resolve", "", create_value(!resolve))
|
|
|
name = list_pop_final(list)
|
|
|
+ // TODO might have to check if this is to be added
|
|
|
if dict_in(variable_map, name):
|
|
|
linked_element = variable_map[name]
|
|
|
else:
|
|
|
- linked_element = name
|
|
|
- dict_add_fast(this_element, "var", linked_element)
|
|
|
+ linked_element = instantiate_value(model, "String", "", name)
|
|
|
+ create_al_link(model, "resolve_var", this_element, linked_element, "var")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_assign(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!assign)
|
|
|
- dict_add_fast(this_element, "var", construct_unknown(list))
|
|
|
- dict_add_fast(this_element, "value", construct_unknown(list))
|
|
|
+String function construct_assign(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "assign", "", create_value(!assign))
|
|
|
+ create_al_link(model, "assign_var", this_element, construct_unknown(model, list), "var")
|
|
|
+ create_al_link(model, "assign_value", this_element, construct_unknown(model, list), "value")
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", this_element, construct_unknown(model, list), "next")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_call(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!call)
|
|
|
- dict_add_fast(this_element, "func", construct_unknown(list))
|
|
|
+String function construct_call(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "call", "", create_value(!call))
|
|
|
+ create_al_link(model, "call_func", this_element, construct_unknown(model, list), "func")
|
|
|
|
|
|
Integer nrParams
|
|
|
nrParams = list_pop_final(list)
|
|
@@ -291,49 +299,49 @@ Action function construct_call(list : Element):
|
|
|
arg_names_call = "abcdefghijklmnopqrstuvwxyz"
|
|
|
|
|
|
while (counter < nrParams):
|
|
|
- param = create_node()
|
|
|
+ param = instantiate_node(model, "param", "")
|
|
|
|
|
|
- dict_add_fast(param, "name", string_get(arg_names_call, counter))
|
|
|
- dict_add_fast(param, "value", construct_unknown(list))
|
|
|
+ create_al_link(model, "param_name", param, instantiate_value(model, "String", "", string_get(arg_names_call, counter)), "name")
|
|
|
+ create_al_link(model, "param_value", param, construct_unknown(model, list), "value")
|
|
|
|
|
|
if (counter == 0):
|
|
|
- dict_add_fast(this_element, "params", param)
|
|
|
+ create_al_link(model, "call_params", this_element, param, "params")
|
|
|
else:
|
|
|
- dict_add_fast(prev_param, "next_param", param)
|
|
|
+ create_al_link(model, "param_next_param", prev_param, param, "next_param")
|
|
|
prev_param = param
|
|
|
|
|
|
counter = counter + 1
|
|
|
|
|
|
if (nrParams > 0):
|
|
|
- dict_add_fast(this_element, "last_param", prev_param)
|
|
|
+ create_al_link(model, "call_last_param", this_element, prev_param, "last_param")
|
|
|
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", this_element, construct_unknown(model, list), "next")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_return(list : Element):
|
|
|
+String function construct_return(model : Element, list : Element):
|
|
|
if (list_pop_final(list)):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!return)
|
|
|
- dict_add_fast(this_element, "value", construct_unknown(list))
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "return", "", create_value(!return))
|
|
|
+ create_al_link(model, "return_value", this_element, construct_unknown(model, list), "value")
|
|
|
return this_element!
|
|
|
else:
|
|
|
- return create_value(!return)!
|
|
|
+ return instantiate_value(model, "return", "", create_value(!return))!
|
|
|
|
|
|
-Action function construct_const(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!constant)
|
|
|
- dict_add_fast(this_element, "node", list_pop_final(list))
|
|
|
+String function construct_const(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
+ create_al_link(model, "constant_node", this_element, instantiate_value(model, "Element", "", list_pop_final(list)), "node")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_declare(list : Element):
|
|
|
- Action this_element
|
|
|
+String function construct_declare(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
Element declared_element
|
|
|
String name
|
|
|
|
|
|
- this_element = create_value(!declare)
|
|
|
- declared_element = create_node()
|
|
|
- dict_add_fast(this_element, "var", declared_element)
|
|
|
+ this_element = instantiate_value(model, "declare", "", create_value(!declare))
|
|
|
+ declared_element = instantiate_node(model, "Element", "")
|
|
|
+ create_al_link(model, "declare_var", this_element, declared_element, "var")
|
|
|
name = list_pop_final(list)
|
|
|
dict_add_fast(variable_map, name, declared_element)
|
|
|
|
|
@@ -341,65 +349,64 @@ Action function construct_declare(list : Element):
|
|
|
String op
|
|
|
op = list_pop_final(list)
|
|
|
if (op != "none"):
|
|
|
- Action assign
|
|
|
- Action resolve
|
|
|
- Action value
|
|
|
- assign = create_value(!assign)
|
|
|
- dict_add_fast(this_element, "next", assign)
|
|
|
- resolve = create_value(!resolve)
|
|
|
- dict_add_fast(assign, "var", resolve)
|
|
|
- dict_add_fast(resolve, "var", declared_element)
|
|
|
+ String assign
|
|
|
+ String resolve
|
|
|
+ String value
|
|
|
+ assign = instantiate_value(model, "assign", "", create_value(!assign))
|
|
|
+ create_al_link(model, "Statement_next", this_element, assign, "next")
|
|
|
+ resolve = instantiate_value(model, "resolve", "", create_value(!resolve))
|
|
|
+ create_al_link(model, "assign_var", assign, resolve, "var")
|
|
|
+ create_al_link(model, "resolve_var", resolve, declared_element, "var")
|
|
|
if (op == "deref"):
|
|
|
- value = create_value(!constant)
|
|
|
- dict_add_fast(value, "node", import_node(list_pop_final(list)))
|
|
|
+ value = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
+ create_al_link(model, "constant_node", value, reuse_element(model, "Element", "", import_node(list_pop_final(list))), "node")
|
|
|
elif (op == "empty"):
|
|
|
- value = create_value(!call)
|
|
|
+ value = instantiate_value(model, "call", "", create_value(!call))
|
|
|
Element res
|
|
|
Element acc
|
|
|
- res = create_value(!resolve)
|
|
|
- acc = create_value(!access)
|
|
|
- dict_add_fast(value, "func", acc)
|
|
|
- dict_add_fast(acc, "var", res)
|
|
|
- dict_add_fast(res, "var", "create_node")
|
|
|
+ res = instantiate_value(model, "resolve", "", create_value(!resolve))
|
|
|
+ acc = instantiate_value(model, "access", "", create_value(!access))
|
|
|
+ create_al_link(model, "call_func", value, acc, "func")
|
|
|
+ create_al_link(model, "access_var", acc, res, "var")
|
|
|
+ create_al_link(model, "resolve_var", res, instantiate_value(model, "String", "", "create_node"), "var")
|
|
|
elif (op == "const"):
|
|
|
- value = create_value(!constant)
|
|
|
- dict_add_fast(value, "node", list_pop_final(list))
|
|
|
- dict_add_fast(assign, "value", value)
|
|
|
+ value = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
+ create_al_link(model, "constant_node", value, instantiate_value(model, "Element", "", list_pop_final(list)), "node")
|
|
|
+ create_al_link(model, "assign_value", assign, value, "value")
|
|
|
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(assign, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", assign, construct_unknown(model, list), "next")
|
|
|
else:
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", this_element, construct_unknown(model, list), "next")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_input(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!input)
|
|
|
- return this_element!
|
|
|
+String function construct_input(model : Element, list : Element):
|
|
|
+ return instantiate_value(model, "input", "", create_value(!input))!
|
|
|
+
|
|
|
+String function construct_output(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "output", "", create_value(!output))
|
|
|
+ create_al_link(model, "output_value", this_element, construct_unknown(model, list), "value")
|
|
|
|
|
|
-Action function construct_output(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!output)
|
|
|
- dict_add_fast(this_element, "value", construct_unknown(list))
|
|
|
if (list_pop_final(list)):
|
|
|
- dict_add_fast(this_element, "next", construct_unknown(list))
|
|
|
+ create_al_link(model, "Statement_next", this_element, construct_unknown(model, list), "next")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_deref(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!constant)
|
|
|
- dict_add_fast(this_element, "node", import_node(list_pop_final(list)))
|
|
|
+String function construct_deref(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "constant", "", create_value(!constant))
|
|
|
+ create_al_link(model, "constant_node", this_element, reuse_element(model, "Element", "", import_node(list_pop_final(list))), "node")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_break(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!break)
|
|
|
- dict_add_fast(this_element, "while", while_stack[list_len(while_stack) - 1])
|
|
|
+String function construct_break(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "break", "", create_value(!break))
|
|
|
+ create_al_link(model, "break_while", this_element, while_stack[list_len(while_stack) - 1], "while")
|
|
|
return this_element!
|
|
|
|
|
|
-Action function construct_continue(list : Element):
|
|
|
- Action this_element
|
|
|
- this_element = create_value(!continue)
|
|
|
- dict_add_fast(this_element, "while", while_stack[list_len(while_stack) - 1])
|
|
|
+String function construct_continue(model : Element, list : Element):
|
|
|
+ String this_element
|
|
|
+ this_element = instantiate_value(model, "continue", "", create_value(!continue))
|
|
|
+ create_al_link(model, "continue_while", this_element, while_stack[list_len(while_stack) - 1], "while")
|
|
|
return this_element!
|