Пример #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_nopr(t):
    '''opr  : READ PARIZQ PARDER
            | ARRAY PARIZQ PARDER'''
    if t[1] == 'read':
        t[0] = OperationExpression(
            Operator.READ, None, None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == 'array':
        t[0] = OperationExpression(
            Operator.ARRAY, None, None,
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #3
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)
Пример #4
0
def p_bopr(t):
    '''opr : opn PLUS opn
            | opn MINUS opn
            | opn TIMES opn
            | opn QUOTIENT opn
            | opn REMAINDER opn
            | opn AND opn
            | opn XOR opn
            | opn OR opn
            | opn ANDBW opn
            | opn ORBW opn
            | opn XORBW opn
            | opn SHL opn
            | opn SHR opn
            | opn EQ opn
            | opn NEQ opn
            | opn GR opn
            | opn GRE opn
            | opn LS opn
            | opn LSE opn'''
    if t[2] == '+':
        t[0] = OperationExpression(
            Operator.PLUS, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '-':
        t[0] = OperationExpression(
            Operator.MINUS, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '*':
        t[0] = OperationExpression(
            Operator.TIMES, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '/':
        t[0] = OperationExpression(
            Operator.QUOTIENT, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '%':
        t[0] = OperationExpression(
            Operator.REMAINDER, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '&&':
        t[0] = OperationExpression(
            Operator.AND, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == 'xor':
        t[0] = OperationExpression(
            Operator.XOR, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '&':
        t[0] = OperationExpression(
            Operator.ANDBW, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '|':
        t[0] = OperationExpression(
            Operator.ORBW, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '^':
        t[0] = OperationExpression(
            Operator.XORBW, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '<<':
        t[0] = OperationExpression(
            Operator.SHL, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '>>':
        t[0] = OperationExpression(
            Operator.SHR, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '==':
        t[0] = OperationExpression(
            Operator.EQ, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '!=':
        t[0] = OperationExpression(
            Operator.NEQ, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '>':
        t[0] = OperationExpression(
            Operator.GR, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '>=':
        t[0] = OperationExpression(
            Operator.GRE, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '<':
        t[0] = OperationExpression(
            Operator.LS, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[2] == '<=':
        t[0] = OperationExpression(
            Operator.LSE, t[1], t[3],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
Пример #5
0
def p_fopn1(t):
    '''fopn : PLUS opn
    | MINUS opn
    | TIMES opn
    | QUOTIENT opn
    | REMAINDER opn
    | AND opn
    | XOR opn
    | OR opn
    | ANDBW opn
    | ORBW opn
    | XORBW opn
    | SHL opn
    | SHR opn
    | EQ opn
    | NEQ opn
    | GR opn
    | GRE opn
    | LS opn
    | LSE opn'''
    if t[1] == '+':
        t[0] = OperationExpression(
            Operator.PLUS, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '-':
        t[0] = OperationExpression(
            Operator.MINUS, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '*':
        t[0] = OperationExpression(
            Operator.TIMES, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '/':
        t[0] = OperationExpression(
            Operator.QUOTIENT, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '%':
        t[0] = OperationExpression(
            Operator.REMAINDER, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '&&':
        t[0] = OperationExpression(
            Operator.AND, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == 'xor':
        t[0] = OperationExpression(
            Operator.XOR, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '&':
        t[0] = OperationExpression(
            Operator.ANDBW, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '|':
        t[0] = OperationExpression(
            Operator.ORBW, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '^':
        t[0] = OperationExpression(
            Operator.XORBW, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '<<':
        t[0] = OperationExpression(
            Operator.SHL, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '>>':
        t[0] = OperationExpression(
            Operator.SHR, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '==':
        t[0] = OperationExpression(
            Operator.EQ, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '!=':
        t[0] = OperationExpression(
            Operator.NEQ, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '>':
        t[0] = OperationExpression(
            Operator.GR, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '>=':
        t[0] = OperationExpression(
            Operator.GRE, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '<':
        t[0] = OperationExpression(
            Operator.LS, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)
    elif t[1] == '<=':
        t[0] = OperationExpression(
            Operator.LSE, t[-1], t[2],
            t.lexer.lexdata[0:t.lexer.lexpos].count("\n") + 1)