Exemple #1
0
def p_array_type(p):
    '''ArrayType : LBRACK ArrayLength RBRACK ElementType'''
    p[0] = Node('ArrayType')
    if p[2].extra['count'] == -208016:
        # slice
        p[0].typeList.append(['slice', p[4].typeList[0], 0])
        p[0].sizeList.append(0)
    else:
        if p[2].extra['count'] < 0:
            compilation_errors.add('Size Error', line_number.get()+1, 'array bound must be non-negative')
            return
        p[0].typeList.append(['array', p[4].typeList[0], p[2].extra['count']])
        p[0].sizeList.append(int(p[2].extra['count']*p[4].sizeList[0]))
    p[0].name = 'ArrayType'
Exemple #2
0
def p_add_mul_op(p):
    '''AddMulOp : UnaryOp
                            | OR
                            | XOR
                            | QUO
                            | REM
                            | SHL
                            | SHR'''
    if isinstance(p[1], str):
        p[0] = Node('AddMulOp')
        p[0].extra['opcode'] = p[1]
        p[0].extra['int'] = True
        if p[1] == '/':
            p[0].extra['float'] = True
    else:
        p[0] = p[1]
        p[0].name = 'AddMulOp'
Exemple #3
0
def p_binary_op(p):
    '''BinaryOp : LOR
                            | LAND
                            | RelOp
                            | AddMulOp'''
    
    if isinstance(p[1], str):
        p[0] = Node('BinaryOp')
        p[0].extra['opcode'] = p[1]
        p[0].extra['bool'] = True
        p[0].typeList.append(['bool'])
    elif p[1].name == 'RelOp':
        p[0] = p[1]
        p[0].typeList.append(['bool'])
    else:
        p[0] = p[1]
    p[0].name = 'BinaryOp'