Example #1
0
def p_nums(t):
    '''nums : nums ',' NUMBER
            | NUMBER'''
    if len(t) == 4:
        t[0] = node('[NUMS]')
        t[0].add(t[1])
        t[0].add(num_node(t[3]))
    elif len(t) == 2:
        t[0] = node('[NUMS]')
        t[0].add(num_node(t[1]))
def p_numbers(t):
    '''numbers : NUMBER
               | numbers ',' NUMBER'''
    if len(t) == 2:
        t[0] = node('[NUMBERS]')
        t[0].add(num_node(t[1]))
    elif len(t) == 4:
        t[0] = node('[NUMBERS]')
        t[0].add(t[1])
        t[0].add(num_node(t[3]))
def p_commaexpression(t):
    '''commaexpression : commaexpression ',' NUMBER
                       | NUMBER ',' NUMBER
                       | NUMBER'''
    if len(t) == 2:
        t[0] = node('[COMMAEXPRESSION]')
        t[0].add(num_node(t[1]))
    elif len(t) == 4:
        t[0] = node('[COMMAEXPRESSION]')
        if t.slice[1].type == 'NUMBER':
            t[0].add(num_node(t[1]))
            t[0].add(num_node(t[3]))
        else:
            t[0].add(t[1])
            t[0].add(num_node(t[3]))
Example #4
0
def p_assignment(t):
    '''assignment : VARIABLE '=' NUMBER'''
    if len(t) == 4:
        t[0] = node('[ASSIGNMENT]')
        t[0].add(node(t[1]))
        t[0].add(node(t[2]))
        t[0].add(num_node(t[3]))
def p_factor(t):
    '''factor : NUMBER
              | VARIABLE
              | STR
              | self
              | VARIABLE '[' expression ']'
              | '(' expression ')' '''
    if len(t) == 2:
        if isinstance(t[1], node):  # self
            t[0] = node('[FACTOR]')
            t[0].add(t[1])
        elif ord('0') <= ord(t[1][0]) <= ord('9'):  # NUMBER
            t[0] = node('[FACTOR]')
            t[0].add(num_node(t[1]))
        elif t[1][0] == "'" and t[1][-1] == "'":  # STR
            t[0] = node('[FACTOR]')
            t[0].add(node(t[1]))
        else:  # VARIABLE
            t[0] = node('[FACTOR]')
            t[0].add(node(t[1]))
    elif len(t) == 4:
        t[0] = node('[FACTOR]')
        t[0].add(t[2])
    elif len(t) == 5:
        t[0] = node('[FACTOR]')
        t[0].add(node(t[1]))
        t[0].add(t[3])
Example #6
0
def p_term_2(t):
    '''term : term '*' NUMBER
            | term '/' NUMBER'''
    if len(t) == 4:
        t[0] = node('[TERM]')
        t[0].add(t[1])
        t[0].add(node(t[2]))
        t[0].add(num_node(t[3]))
def p_assignment(t):
    '''assignment : VARIABLE '=' NUMBER
                  | VARIABLE '[' expression ']' '=' NUMBER
                  | VARIABLE '=' VARIABLE
                  | VARIABLE '=' VARIABLE '[' expression ']'
                  | self '=' VARIABLE
                  | VARIABLE '=' VARIABLE '(' expressions ')' '''
    if len(t) == 4:
        if isinstance(t[1], node):  # self
            t[0] = node('[ASSIGNMENT]')
            t[0].add(t[1])
            t[0].add(node(t[2]))
            t[0].add(node(t[3]))
        elif isinstance(t[3], str):  # NUMBER or VARIABLE
            if ord('0') <= ord(t[3][0]) <= ord('9'):  # NUMBER
                t[0] = node('[ASSIGNMENT]')
                t[0].add(node(t[1]))
                t[0].add(node(t[2]))
                t[0].add(num_node(t[3]))
            else:  # VARIABLE
                t[0] = node('[ASSIGNMENT]')
                t[0].add(node(t[1]))
                t[0].add(node(t[2]))
                t[0].add(node(t[3]))

    elif len(t) == 7:
        if t[2] == '[':  # NUMBER
            t[0] = node('[ASSIGNMENT]')
            t[0].add(node(t[1]))
            t[0].add(t[3])
            t[0].add(node(t[5]))
            t[0].add(num_node(t[6]))
        elif t[5].getdata() == '[EXPRESSION]':  # VARIABLE '[' expression ']'
            t[0] = node('[ASSIGNMENT]')
            t[0].add(node(t[1]))
            t[0].add(node(t[2]))
            t[0].add(node(t[3]))
            t[0].add(t[5])
        elif t[5].getdata() == '[EXPRESSIONS]':  # VARIABLE '(' expressions ')'
            t[0] = node('[ASSIGNMENT]')
            t[0].add(node(t[1]))
            t[0].add(node(t[2]))
            t[0].add(node(t[3]))
            t[0].add(t[5])
def simple_node(t,name):
    t[0]=node(name)
    for i in range(1,len(t)):
        if t.slice[i].type == 'slice':
            t[0].add(t[i])
        elif t.slice[i].type == 'NUMBER':
            t[0].add(num_node(t[i]))
        else:
            t[0].add(node(t[i]))
    return t[0]
Example #9
0
def p_factor(t):
    '''factor : VARIABLE
            | NUMBER
    '''
    t[0] = node('[factor]')
    # if(type(t[1]) == type(t[0])):
    #     print(type(t[1]))
    #     t[0].add(t[1])
    if (t[1].isdigit()):  #数字
        t[0].add(num_node(eval(t[1])))
    else:
        t[0].add(node(t[1]))
def p_assignment(t):
    '''assignment : VARIABLE '=' NUMBER
                  | VARIABLE '[' expr ']' '=' NUMBER
                  | VARIABLE '=' VARIABLE
                  | VARIABLE '=' VARIABLE '[' expr ']'
                  | VARIABLE '=' num_list'''
    if len(t) == 4:
        if isinstance(t[3], str):  # NUMBER or VARIABLE
            if ord('0') <= ord(t[3][0]) <= ord('9'):  # NUMBER
                t[0] = node('[ASSIGNMENT]')
                t[0].add(node(t[1]))
                t[0].add(node(t[2]))
                t[0].add(num_node(t[3]))
            else:  # VARIABLE
                t[0] = node('[ASSIGNMENT]')
                t[0].add(node(t[1]))
                t[0].add(node(t[2]))
                t[0].add(node(t[3]))
        else:  # num_list
            t[0] = node('[ASSIGNMENT]')
            t[0].add(node(t[1]))
            t[0].add(node(t[2]))
            t[0].add(t[3])
    elif len(t) == 7:
        if t[2] == '[':  # NUMBER
            t[0] = node('[ASSIGNMENT]')
            t[0].add(node(t[1]))
            t[0].add(t[3])
            t[0].add(node(t[5]))
            t[0].add(num_node(t[6]))
        else:  # VARIABLE '[' expr ']'
            t[0] = node('[ASSIGNMENT]')
            t[0].add(node(t[1]))
            t[0].add(node(t[2]))
            t[0].add(node(t[3]))
            t[0].add(t[5])
def p_factor(t):
    '''factor : NUMBER
              | VARIABLE
              | VARIABLE '[' expr ']'
              | '(' expr ')' '''
    if len(t) == 2:
        if ord('0') <= ord(t[1][0]) <= ord('9'):  # NUMBER
            t[0] = node('[FACTOR]')
            t[0].add(num_node(t[1]))
        else:  # VARIABLE
            t[0] = node('[FACTOR]')
            t[0].add(node(t[1]))
    elif len(t) == 4:
        t[0] = node('[FACTOR]')
        t[0].add(t[2])
    elif len(t) == 5:
        t[0] = node('[FACTOR]')
        t[0].add(node(t[1]))
        t[0].add(t[3])
def p_assignment(t):
    '''assignment : VARIABLE '=' NUMBER
                 | VARIABLE '=' VARIABLE
                 | VARIABLE '=' operation
                 | slice '=' slice
                 | slice '=' VARIABLE
                 | VARIABLE '=' slice '''
    if t.slice[1].type == 'slice' or t.slice[3].type == 'slice':
        t[0] = node('[ASSIGNMENT]')
        if t.slice[1].type == 'slice':
            if t.slice[3].type == 'slice':
                t[0].add(t[1])
                t[0].add(node(t[2]))
                t[0].add(t[3])
            else:
                t[0].add(t[1])
                t[0].add(node(t[2]))
                t[0].add(node(t[3]))
        else:
            t[0].add(node(t[1]))
            t[0].add(node(t[2]))
            t[0].add(t[3])
    elif t.slice[3].type == 'operation':
        t[0]=node('[ASSIGNMENT]')
        t[0].add(node(t[1]))
        t[0].add(node(t[2]))
        t[0].add(t[3])
    elif t.slice[3].type == 'NUMBER':
        t[0]=node('[ASSIGNMENT]')
        t[0].add(node(t[1]))
        t[0].add(node(t[2]))
        t[0].add(num_node(t[3]))
    elif t.slice[3].type == 'VARIABLE':
        t[0]=node('[ASSIGNMENT]')
        t[0].add(node(t[1]))
        t[0].add(node(t[2]))
        t[0].add(node(t[3]))
Example #13
0
def p_term_3(t):
    '''term : NUMBER'''
    if len(t) == 2:
        t[0] = node('[TERM]')
        t[0].add(num_node(t[1]))
Example #14
0
def p_factor1(t):
    '''factor : NUMBER'''
    if len(t) == 2:
        t[0] = node('[FACTOR]')
        t[0].add(num_node(t[1]))