Example #1
0
def p_property_string(p):
    '''expression : property SYMBOL
                    | property SYMBOL OR factor
                    | property SYMBOL LPAREN expression RPAREN
                    | property SYMBOL LPAREN expression RPAREN OR factor
                     '''
    if p[2] == "length":
        p[0] = node.FunctionCall('len', p[1])
    elif p[2] == "indexOf":
        p[0] = node.FunctionCall('index', p[1], p[4])
    elif p[2] == "charAt":
        if isinstance(p[1], node.Variable):
            if p[1].key is None:
                p[1] = p[1].name
            else:
                p.lexer.error(
                    'complex expressions are not supported in ESI. break apart into multiple variable asignments',
                    abort=SyntaxError)

        p[0] = node.Variable(p[1], key=p[4])
        if len(p) >= 7:
            p[0] = node.Variable(p[1], key=p[4], default=p[7])
    elif len(p) == 3:
        p[0] = node.Variable(p[1], key=p[2])
    elif len(p) == 5:
        p[0] = node.Variable(p[1], key=p[2], default=p[4])
    else:
        p.lexer.error('unknown object property: "%s"' % (p[1]),
                      abort=SyntaxError)
Example #2
0
def p_assign_incdec(p):
    '''assign : assignLvalue INCREMENT
              | assignLvalue DECREMENT
              '''
    op = p[2][0] == '+' and node.Plus or node.Minus
    p[0] = node.Assign(p[1][0],
                       op(node.Variable(p[1][0], key=p[1][1]),
                          node.Literal(1)),
                       key=p[1][1])
Example #3
0
def p_assign_op(p):
    '''assign : assignLvalue ASSIGNPLUS expression STOP
              | assignLvalue ASSIGNMINUS expression STOP
              | assignLvalue ASSIGNMULTIPLY expression STOP
              | assignLvalue ASSIGNMODULUS expression STOP
              | assignLvalue ASSIGNDIVIDE expression STOP
              '''
    p[0] = node.Assign(p[1][0],
                       node.Operator(p[2][0],
                                     node.Variable(p[1][0], key=p[1][1]),
                                     p[3]),
                       key=p[1][1])
Example #4
0
def p_for_loop(p):
    '''statement : FOR LPAREN assign testExpression STOP assign RPAREN statement
            '''
    initAssign = p[3]
    testExpression = p[4]
    statementBlock = node.Block(node.If(node.Not(testExpression),
                                        node.Break()))
    statementBlock.statements.append(p[8])
    statementBlock.statements.append(p[6])

    p[0] = node.Block(initAssign)
    p[0].statements.append(
        node.Assign(
            '_loop',
            node.List(node.Range(initAssign.value, testExpression.args[1]))))
    p[0].statements.append(node.ForEach(node.Variable('_loop'),
                                        statementBlock))
Example #5
0
def p_factor_varref_key_default(p):
    'factor : SYMBOL LBRACKET expression RBRACKET OR expression'
    p[0] = node.Variable(p[1], key=p[3], default=p[6])
Example #6
0
def p_factor_varref_default(p):
    'factor : SYMBOL OR expression'
    p[0] = node.Variable(p[1], default=p[3])
Example #7
0
def p_factor_varref_ternary(p):
    'factor : testExpression QUESTION expression COLON expression'
    iftrue = node.Block(node.Variable(p[1], default=p[4]))
    iffalse = node.Block(node.Variable(p[1], default=p[5]))
    p[0] = node.If(p[1], iftrue, noMatchStatement=iffalse)
Example #8
0
def p_factor_varref_key(p):
    'factor : SYMBOL LBRACKET expression RBRACKET'
    p[0] = node.Variable(p[1], key=p[3])
Example #9
0
def p_factor_varref(p):
    'factor : SYMBOL'
    p[0] = node.Variable(p[1])
Example #10
0
def p_factor_varref(p):
    'factor : DOLLAR LPAREN SYMBOL varrefKey varrefDefault RPAREN'
    p[0] = node.Variable(p[3], key=p[4], default=p[5])
Example #11
0
def p_varsExpr_varref_more(p):
    'varsExprElement : VARREF varKey varDefault RPAREN'
    p[0] = node.Variable(p[1], key=p[2], default=p[3])
Example #12
0
def p_varsExpr_varref(p):
    'varsExprElement : VARREF'
    p[0] = node.Variable(p[1])
Example #13
0
def p_vars_inline(p):
    'vars : sVARS aNAME assignName xEMPTY'
    p[0] = node.Output(node.Variable(p[3][0], key=p[3][1]), vars=True)