include "primitives.alh" include "modelling.alh" include "object_operations.alh" Boolean function main(model : Element): String result Element nodes String node Element edges String edge String new_node String source String destination String name Element to_explore Element explored result = "root, = yield [('RR', [])]\n" nodes = allInstances(model, "Rules/Root") while (set_len(nodes) > 0): node = set_pop(nodes) source = string_replace(node, "/", "_") result = result + source + " = root\n" // Keep following outgoing edges to find matching nodes to_explore = set_create() explored = set_create() set_add(to_explore, node) while (set_len(to_explore) > 0): // Still explore more! node = set_pop(to_explore) source = string_replace(node, "/", "_") edges = allOutgoingAssociationInstances(model, node, "Rules/Edge") while (set_len(edges) > 0): edge = set_pop(edges) new_node = readAssociationDestination(model, edge) if (value_eq(read_attribute(model, new_node, "match"), True)): // Is a match node, so fetch the value on the edge name = read_attribute(model, edge, "value") destination = string_replace(new_node, "/", "_") result = result + destination + ", = yield [('RD', [" + source + ", " + name + "])]\n" String value value = read_attribute(model, new_node, "value") if (element_neq(value, read_root())): // Match node has a value we should compare as well! // Read out the value from the Modelverse result = result + destination + "_V, = yield [('RV', [" + destination + "])]\n" set_add(to_explore, new_node) log("Got result:") log(result) return True!