Beispiel #1
0
def _lift_connection_end(location, end, ref):
    if len(ref.name) > 1:
        instance = Reference(ref.name[:-1], Instance, ref.location)
    else:
        instance = None
    return ConnectionEnd(end, instance,
                         Reference(ref.name, Interface, ref.location),
                         location)
Beispiel #2
0
def p_component_ref(t):
    '''component_ref : ID
                     | component_block'''
    if isinstance(t[1], Component):
        t[0] = t[1]
    else:
        t[0] = Reference(t[1], Component)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #3
0
def _lift_export(location, ref1, ref2):
    assert isinstance(ref1, Reference)
    assert isinstance(ref2, Reference)
    if len(ref1.name) < 2:
        raise ParseError('illegal source in export statement (these must be '
            'qualified references like "foo.bar")', ref1.location)
    return Export(Reference(ref1.name[:-1], Instance, ref1.location),
        Reference(ref1.name, Interface, ref1.location),
        Reference(ref2.name, Interface, ref2.location), location)
Beispiel #4
0
def p_component_ref(t):
    '''component_ref : ID
                     | component_block'''
    if isinstance(t[1], Component):
        t[0] = t[1]
    else:
        t[0] = Reference(t[1], Component)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #5
0
def p_dataport_statement(t):
    '''dataport_statement : dataport ID ID SEMI
                          | maybe dataport ID ID SEMI'''
    if len(t) == 5:
        t[0] = Dataport(Reference(t[2], Port), t[3])
    else:
        assert len(t) == 6
        t[0] = Dataport(Reference(t[3], Port), t[4], optional=True)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #6
0
def p_consumes_statement(t):
    '''consumes_statement : consumes ID ID SEMI
                          | maybe consumes ID ID SEMI'''
    if len(t) == 5:
        t[0] = Consumes(Reference(t[2], Event), t[3])
    else:
        assert len(t) == 6
        t[0] = Consumes(Reference(t[3], Event), t[4], optional=True)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #7
0
def p_uses_statement(t):
    '''uses_statement : uses ID ID SEMI
                      | maybe uses ID ID SEMI'''
    if len(t) == 5:
        t[0] = Uses(Reference(t[2], Procedure), t[3])
    else:
        assert len(t) == 6
        t[0] = Uses(Reference(t[3], Procedure), t[4], optional=True)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #8
0
def p_connector_ref(t):
    '''connector_ref : ID
                     | connector_block'''
    assert len(t) == 2
    if isinstance(t[1], Connector):
        t[0] = t[1]
    else:
        t[0] = Reference(t[1], Connector)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #9
0
def p_connector_ref(t):
    '''connector_ref : ID
                     | connector_block'''
    assert len(t) == 2
    if isinstance(t[1], Connector):
        t[0] = t[1]
    else:
        t[0] = Reference(t[1], Connector)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #10
0
def p_configuration_sing(t):
    '''configuration_sing : configuration ID SEMI
                          | configuration_decl'''
    if len(t) == 4:
        t[0] = Reference(t[2], Configuration)
    else:
        assert len(t) == 2
        t[0] = t[1]
        assert isinstance(t[0], Configuration)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #11
0
def p_configuration_sing(t):
    '''configuration_sing : configuration ID SEMI
                          | configuration_decl'''
    if len(t) == 4:
        t[0] = Reference(t[2], Configuration)
    else:
        assert len(t) == 2
        t[0] = t[1]
        assert isinstance(t[0], Configuration)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #12
0
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)
Beispiel #13
0
def _lift_uses(location, *args):
    if len(args) == 3:
        optional = True
        _, type, name = args
    else:
        optional = False
        type, name = args
    return Uses(Reference(type.name, Procedure, type.location), name, optional, location)
Beispiel #14
0
def p_parameter(t):
    '''parameter : direction type ID
                 | direction type ID LSQUARE RSQUARE
                 | direction ID ID
                 | direction ID ID LSQUARE RSQUARE'''
    array = len(t) == 6
    if isinstance(t[2], Type):
        t[0] = Parameter(t[3], t[1], t[2], array)
    else:
        t[0] = Parameter(t[3], t[1], Reference(t[2], Type, \
            filename=t.lexer.filename, lineno=t.lexer.lineno), array)
    t[0].filename = t.lexer.filename
    t[0].lineno = t.lexer.lineno
Beispiel #15
0
def p_method(t):
    '''method : void ID LPAREN parameter_list RPAREN SEMI
              | type ID LPAREN parameter_list RPAREN SEMI
              | ID ID LPAREN parameter_list RPAREN SEMI'''
    if t[1] == 'void':
        return_type = None
    elif isinstance(t[1], Type):
        return_type = t[1]
    else:
        return_type = Reference(t[1], Type, filename=t.lexer.filename,
            lineno=t.lexer.lineno)
    name = t[2]
    parameters = t[4]
    assert isinstance(parameters, list)
    for i in parameters: assert isinstance(i, Parameter)
    t[0] = Method(name, return_type, parameters, filename=t.lexer.filename, \
        lineno=t.lexer.lineno)
Beispiel #16
0
def p_setting_defn(t):
    '''setting_defn : ID DOT ID EQUALS ID SEMI
                    | ID DOT ID EQUALS NUMBER SEMI
                    | ID DOT ID EQUALS DECIMAL SEMI
                    | ID DOT ID EQUALS list SEMI
                    | ID DOT ID EQUALS dict SEMI
                    | ID DOT ID LARROW ID SEMI
                    | setting_defn_string'''
    if len(t) == 2:
        t[0] = t[1]
    else:
        assert len(t) == 7
        if t[4] == '<-':
            # handle hierarchical attribute case
            value = Reference(t[5], Attribute)
        else:
            value = t[5]

        t[0] = Setting(t[1], t[3], value, filename=t.lexer.filename, \
            lineno=t.lexer.lineno)
Beispiel #17
0
def _lift_reference(location, *ids):
    return Reference(list(ids), None, location)
Beispiel #18
0
def _lift_provides(location, ref, id2):
    return Provides(Reference(ref.name, Procedure, ref.location), id2,
                    location)
Beispiel #19
0
def _lift_connector_ref(location, arg):
    if isinstance(arg, Connector):
        return arg
    assert isinstance(arg, Reference)
    return Reference(arg.name, Connector, location)
Beispiel #20
0
def _lift_configuration_sing(location, arg):
    if isinstance(arg, Configuration):
        return arg
    assert isinstance(arg, Reference)
    return Reference(arg.name, Configuration, location)
Beispiel #21
0
def _lift_component_ref(location, arg):
    if isinstance(arg, Component):
        return arg
    assert isinstance(arg, Reference)
    return Reference(arg.name, Component, location)
Beispiel #22
0
def _lift_struct_ref(location, arg):
    if isinstance(arg, Struct):
        return arg
    assert isinstance(arg, Reference)
    return Reference(arg.name, Struct, location)
Beispiel #23
0
def p_provides_statement(t):
    '''provides_statement : provides ID ID SEMI'''
    t[0] = Provides(Reference(t[2], Procedure), t[3], \
        filename=t.lexer.filename, lineno=t.lexer.lineno)
Beispiel #24
0
def p_emits_statement(t):
    '''emits_statement : emits ID ID SEMI'''
    t[0] = Emits(Reference(t[2], Event), t[3], filename=t.lexer.filename, \
        lineno=t.lexer.lineno)