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)
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)
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)
def p_opns(t): '''opn : STRING_VAL''' t[0] = ValExpression(t[1], ValType.STRING, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
def p_opni(t): '''opn : INT_VAL''' t[0] = ValExpression(t[1], ValType.INTEGER, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
def p_opnf(t): '''opn : FLOAT_VAL''' t[0] = ValExpression(t[1], ValType.FLOAT, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
def p_opnr(t): '''opn : idt''' t[0] = ValExpression(t[1], ValType.REFVAR, t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)