Example #1
0
    def visit_init(self, node, children):
        symb = None
        # if type is a symbol, i.e. a custom type, rhs must be a record literal
        # else it must be some other type
        if isinstance(children[1], tp.Symbol):
            if children[2].type == Type.STRUCT:
                symb = tp.Symbol(type=Type.STRUCT, 
                              name=children[0].name,
                              value=children[2])
            else:
                raise TypeError("RHS is not a record literal")

        # int
        elif children[1] == "int":
            if children[2].type == Type.I_INT:
                symb = tp.Symbol(type=Type.I_INT,
                              name=children[0].name,
                              value=children[2])
        
        else:
            raise TypeError("Unknown Type")

        return symb
Example #2
0
 def visit_identifier(self, node, children):
     symb = tp.Symbol(name=node.value)
     return symb
Example #3
0
 def visit_assignment(self, node, children):
     # TODO: handle assignment to records
     symb = tp.Symbol(type=children[1].type, name=children[0].name, value=children[1].value)
     return symb
Example #4
0
 def visit_lit_str(self, node, children):
     symb = tp.Symbol(type=Type.I_STR, value=node.value[1:-1])
     return symb
Example #5
0
 def visit_lit_record(self, node, children):
     struct = tp.Struct(children)
     symb = tp.Symbol(type=Type.STRUCT, value=struct)
     return symb
Example #6
0
 def visit_lit_int(self, node, children):
     symb = tp.Symbol(type=Type.I_INT, value=int(node.value))
     return symb
Example #7
0
 def visit_record_access(self, node, children):
     struct = tp.Struct([tp.Symbol(name=children[1].name)])
     symb = tp.Symbol(type=Type.STRUCT, name=children[0].name, value=struct)
     return symb