def p_connection_defn(t): '''connection_defn : connection connector_ref ID LPAREN from ID DOT ID COMMA to ID DOT ID RPAREN SEMI | connection connector_ref ID LPAREN from ID COMMA to ID DOT ID RPAREN SEMI | connection connector_ref ID LPAREN from ID DOT ID COMMA to ID RPAREN SEMI''' connector = t[2] name = t[3] if len(t) == 16: from_instance = Reference(t[6], Instance, filename=t.lexer.filename, \ lineno=t.lexer.lineno) from_interface = Reference(t[8], Interface, \ filename=t.lexer.filename, lineno=t.lexer.lineno) to_instance = Reference(t[11], Instance, filename=t.lexer.filename, \ lineno=t.lexer.lineno) to_interface = Reference(t[13], Interface, \ filename=t.lexer.filename, lineno=t.lexer.lineno) else: assert len(t) == 14 # placeholder refering to 'current instance of this component' # required for hierarchical components virtual_instance = Instance(Component(), '__virtual__', filename=t.lexer.filename, lineno=t.lexer.lineno) if t[7] == ',': from_instance = virtual_instance from_interface = Reference(t[6], Interface, \ filename=t.lexer.filename, lineno=t.lexer.lineno) to_instance = Reference(t[9], Instance, filename=t.lexer.filename, \ lineno=t.lexer.lineno) to_interface = Reference(t[11], Interface, \ filename=t.lexer.filename, lineno=t.lexer.lineno) else: assert t[9] == ',' from_instance = Reference(t[6], Instance, \ filename=t.lexer.filename, lineno=t.lexer.lineno) from_interface = Reference(t[8], Interface, \ filename=t.lexer.filename, lineno=t.lexer.lineno) to_instance = virtual_instance to_interface = Reference(t[11], Interface, \ filename=t.lexer.filename, lineno=t.lexer.lineno) t[0] = Connection(connector, name, from_instance, from_interface, \ to_instance, to_interface, filename=t.lexer.filename, \ lineno=t.lexer.lineno)
def _lift_instance_defn(location, component_ref, id): return Instance(component_ref, id, location)
def p_instance_defn(t): '''instance_defn : component component_ref ID SEMI''' assert isinstance(t[2], Component) or isinstance(t[2], Reference) t[0] = Instance(type=t[2], name=t[3], filename=t.lexer.filename, \ lineno=t.lexer.lineno)