Пример #1
0
def p_uopr(t):
    '''opr  : MINUS opn
            | NOT opn
            | NOTBW opn
            | ANDBW idt
            | ABS PARIZQ opn PARDER'''
    if t[1] == '-':
        t[0] = OperationExpression(
            Operator.NEGATIVE, t[2], None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '!':
        t[0] = OperationExpression(
            Operator.NOT, t[2], None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '~':
        t[0] = OperationExpression(
            Operator.NOTBW, t[2], None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '&':
        t[0] = OperationExpression(
            Operator.AMP, ValExpression(t[2], ValType.REFVAR), None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == 'abs':
        t[0] = OperationExpression(
            Operator.ABS, t[3], None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #2
0
def p_copr(t):
    '''opr  : PARIZQ INT PARDER idt
            | PARIZQ FLOAT PARDER idt
            | PARIZQ CHAR PARDER idt'''
    if t[2] == 'int':
        t[0] = OperationExpression(
            Operator.CINT,
            ValExpression(t[4], ValType.REFVAR,
                          t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1),
            None, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == 'float':
        t[0] = OperationExpression(
            Operator.CFLOAT,
            ValExpression(t[4], ValType.REFVAR,
                          t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1),
            None, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == 'char':
        t[0] = OperationExpression(
            Operator.CCHAR,
            ValExpression(t[4], ValType.REFVAR,
                          t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1),
            None, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #3
0
def p_opnr(t):
    '''opn  : idt'''
    #t[1] is an instance of Assignment
    t[0] = ValExpression(t[1], ValType.REFVAR,
                         t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #4
0
def p_opns(t):
    '''opn  : STRING_VAL'''
    t[0] = ValExpression(t[1], ValType.STRING,
                         t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #5
0
def p_opni(t):
    '''opn  : INT_VAL'''
    t[0] = ValExpression(t[1], ValType.INTEGER,
                         t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #6
0
def p_opnf(t):
    '''opn  : FLOAT_VAL'''
    t[0] = ValExpression(t[1], ValType.FLOAT,
                         t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #7
0
def p_opnr(t):
    '''opn  : idt'''
    t[0] = ValExpression(t[1], ValType.REFVAR,
                         t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)