def p_tuple_indexing(p):
    '''
    TUPLE_INDEXING : TUPLE_LIST
                   | TUPLE_INDEX INTEGER TUPLE_LIST
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[2], p[3], operator=p[1])
    else:
        raise RuntimeError('Case not handled')
def p_exponentiation(p):
    '''
    EXPONENTIATION : LIST_STR_INDEXING
                   | LIST_STR_INDEXING EXPONENT EXPONENTIATION
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
def p_membership(p):
    '''
    MEMBERSHIP : PLUS_MINUS
               | MEMBERSHIP IN PLUS_MINUS
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
def p_urnary(p):
    '''
    URNARY : EXPONENTIATION
           | MINUS URNARY
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 3:
        p[0] = ExpressionNode(0, p[2], operator=p[1])
    else:
        raise RuntimeError('Case not handled')
def p_cons_list(p):
    '''
    CONS_LIST : MEMBERSHIP
              | MEMBERSHIP CONS CONS_LIST
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
def p_negation(p):
    '''
    NEGATION : COMPARISON
             | NOT NEGATION
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 3:
        p[0] = ExpressionNode(p[2], operator=p[1])
    else:
        raise RuntimeError('Case not handled')
def p_and(p):
    '''
    AND : NEGATION
        | AND ANDALSO NEGATION
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
def p_or(p):
    '''
    OR : AND
       | OR ORELSE AND
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
def p_plus_minus(p):
    '''
    PLUS_MINUS : MULT_DIV
               | PLUS_MINUS PLUS MULT_DIV
               | PLUS_MINUS MINUS MULT_DIV
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
Exemple #10
0
def p_list_str_indexing(p):
    '''
    LIST_STR_INDEXING : TUPLE_INDEXING
                      | LIST_STR_INDEXING LBRACKET OR RBRACKET
                      | LIST_STR_INDEXING LBRACKET OR RBRACKET TAKES_VALUE OR
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 5:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    elif len(p) == 7:
        p[0] = StatementNode(p[1], p[3], p[6], keyword=p[5])
    else:
        raise RuntimeError('Case not handled')
Exemple #11
0
def p_mult_div(p):
    '''
    MULT_DIV : URNARY
             | MULT_DIV TIMES URNARY
             | MULT_DIV DIVIDE URNARY
             | MULT_DIV DIV URNARY
             | MULT_DIV MOD URNARY
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
Exemple #12
0
def p_comparison(p):
    '''
    COMPARISON : CONS_LIST
               | COMPARISON LESS_THAN CONS_LIST
               | COMPARISON LESS_EQUAL CONS_LIST
               | COMPARISON GREATER_THAN CONS_LIST
               | COMPARISON GREATER_EQUAL CONS_LIST
               | COMPARISON EQUAL CONS_LIST
               | COMPARISON NOT_EQUAL CONS_LIST
    '''
    if len(p) == 2:
        p[0] = p[1]
    elif len(p) == 4:
        p[0] = ExpressionNode(p[1], p[3], operator=p[2])
    else:
        raise RuntimeError('Case not handled')
Exemple #13
0
def p_primary(p):
    '''
    PRIMARY : BOOLEAN
            | INTEGER
            | REAL
            | STRING
            | IDENTIFIER
            | LPAREN OR RPAREN
    '''
    if len(p) == 2:
        if isinstance(p[1], Node):
            p[0] = p[1]
        elif is_identifier(p[1]):
            p[0] = VariableNode(p[1])
        else:
            p[0] = ExpressionNode(p[1])
    elif len(p) == 4:
        p[0] = p[2]
    else:
        raise RuntimeError('Case not handled')