Example #1
0
def p_recparams(p):
    '''
    recparams : ID COLON type
              | ID COLON type COMMA recparams
    '''

    rule_len = len(p) - 1
    address = get_next_local(p[3])
    if rule_len == 3:
        p[0] = [(variable(p[1],p[3],address,get_const_address(0,'i')))]
    elif rule_len  == 5:
        p[0] = [(variable(p[1],p[3],address,get_const_address(0,'i')))] + p[5]
Example #2
0
def p_vars(p): 
    ''' 
    vars : VAR recids COLON type SEMICOLON vars
            | VAR recids COLON type SEMICOLON
    '''
    global dimension_stack
    rule_len = len(p) - 1
    current_function = active_scopes.pop()
    address = 0
    current_list_addr = 0 # We use this to handle multiple declarations with same dimension
    addr_popped = False  # We use this to handle multiple declarations with same dimension
    # We use a for in here so that we can handle multiple declarations
    for l in p[2]:
        if p[4][0] == 'list':
            if not addr_popped:
                current_list_addr = dimension_stack.pop()
                addr_popped = True
        if(current_function.functiontype == 'global'):
            # We create global addresses
            if p[4][0] == 'list':
                address = get_next_global_list(p[4][1], current_list_addr)
            else:
                address = get_next_global(p[4])
        else:
            if p[4][0] == 'list':
                address = get_next_local_list(p[4][1], current_list_addr)
            else:
                address = get_next_local(p[4])
        if p[4][0] == 'list':
            current_function.vars[l] = variable(l,p[4][0], address,1, array_block(p[4][1],get_const_address(0,'i'),current_list_addr,get_const_address(0,'i')))
        else:   
            current_function.vars[l] = variable(l,p[4], address,get_const_address(0,'i'))
    active_scopes.append(current_function)
Example #3
0
def p_bool(p):
    '''
    bool : TRUE 
         | FALSE
    '''
    addr = get_const_address(p[1],'b')
    p[0] = (addr, 'b')
Example #4
0
def p_float(p):
    '''
    float : FLOAT
    '''
    addr = get_const_address(p[1],'f')
    p[0] = (addr, 'f')
Example #5
0
def p_int(p):
    '''
    int : INT
    '''
    addr = get_const_address(p[1],'i')
    p[0] = (addr, 'i')
Example #6
0
def p_string(p):
    '''
    string : STRING
    '''
    addr = get_const_address(p[1],'s')
    p[0] = (addr, 's')
Example #7
0
def p_action_recwrite_cte(p):
    '''
    action_recwrite_cte : 
    '''
    address = get_const_address(p[-1], 's')
    quadruples.append(quadruple("print",None, None, address))