Exemplo n.º 1
0
def parse(s):
    code = pp.Forward()
    opcode = pp.Or([
        pp.Literal('+'),
        pp.Literal('-'),
        pp.Literal('*'),
        pp.Literal('/'),
        pp.Literal('_'),
        pp.Literal('='),
        pp.Literal('>'),
        pp.Literal('&'),
        pp.Literal('|'),
        pp.Literal('~'),
        pp.Literal('$'),
        pp.Literal('%'),
        pp.Literal('\\'),
        pp.Literal('@'),
        pp.Literal('ø'),
        pp.Literal('p'),
        pp.Literal(':'),
        pp.Literal(';'),
        pp.Literal('!'),
        pp.Literal('?'),
        pp.Literal('#'),
    ]).setParseAction(lambda toks: ast.Opcode(toks[0]))
    number = (pp.Word('1234567890').setParseAction(
        lambda toks: ast.Number(int(toks[0]))))
    str_def = ((pp.Literal('"') + pp.SkipTo(pp.Literal('"'), include=True)
                ).setParseAction(lambda toks: ast.String(toks[1])))
    varname = (pp.Word(
        'qwertyuiopasdfghjklzxcvbnm',
        exact=1).setParseAction(lambda toks: ast.Varname(toks[0])))
    fn_def = pp.Suppress(pp.Literal('[')) + code + pp.Suppress(pp.Literal(']'))
    expr = pp.Or([opcode, number, varname, str_def, fn_def])
    atom = pp.Or([expr])
    code << pp.ZeroOrMore(atom)
    code.setParseAction(lambda toks: ast.Function(toks))
    return code.parseString(s)[0]
Exemplo n.º 2
0
def test_expr2_negs_6():
    eval_lambda("Expr2", "-(1 + 1)", lambda x: x.eval() == ast.Number(-2))
Exemplo n.º 3
0
def factor_negative_num(p):
    return ast.Number(-int(p[1].getstr()))
Exemplo n.º 4
0
def test_expr2_parens_binop_3():
    eval_lambda("Expr2", "1 + 2", lambda x: x.eval() == ast.Number(3))
Exemplo n.º 5
0
def test_expr2_parens_binop_1():
    eval_lambda("Expr2", "(1 + (2 + 3))", lambda x: x.eval() == ast.Number(6))
Exemplo n.º 6
0
def test_expr2_negative_term_0():
    eval_lambda("Expr2", "-1", lambda x: x.eval() == ast.Number(-1))
Exemplo n.º 7
0
def test_term_negative_term():
    eval_lambda("Term", "-1", lambda x: x.eval() == ast.Number(-1))
Exemplo n.º 8
0
def test_term_decimal():
    eval_lambda("Term", "1", lambda x: x.eval() == ast.Number(1))
Exemplo n.º 9
0
def test_expr2_negs_17():
    eval_lambda("Expr2", "---(((1+2)+3+3)-(4+6))",
                lambda x: x.eval() == ast.Number(1))
Exemplo n.º 10
0
def test_expr2_negs_16():
    eval_lambda("Expr2", "----2 + ----2", lambda x: x.eval() == ast.Number(4))
Exemplo n.º 11
0
def test_expr2_negs_15():
    eval_lambda("Expr2", "--(2+2)", lambda x: x.eval() == ast.Number(4))
Exemplo n.º 12
0
def test_expr2_negs_11():
    eval_lambda("Expr2", "-(-(1) - -1)", lambda x: x.eval() == ast.Number(0))
Exemplo n.º 13
0
def test_expr2_negs_10():
    eval_lambda("Expr2", "(-1) + -(1)", lambda x: x.eval() == ast.Number(-2))
Exemplo n.º 14
0
def test_expr2_negs_9():
    eval_lambda("Expr2", "-1 - -1", lambda x: x.eval() == ast.Number(0))
Exemplo n.º 15
0
def test_expr2_negs_7():
    eval_lambda("Expr2", "-(-2) - 3", lambda x: x.eval() == ast.Number(-1))
Exemplo n.º 16
0
def test_eval_lit_num_bin():
    eval_lambda("LitNum", "0b101010", lambda x: x.eval() == ast.Number(42))
Exemplo n.º 17
0
def test_term_hex():
    eval_lambda("Term", "0x10", lambda x: x.eval() == ast.Number(0x10))
Exemplo n.º 18
0
def test_expr2_negs_18():
    eval_lambda("Expr2", "1--2", lambda x: x.eval() == ast.Number(3))
Exemplo n.º 19
0
def test_term_binary_lit_1():
    eval_lambda("Term", "-0b101", lambda x: x.eval() == ast.Number(-0b101))
Exemplo n.º 20
0
def test_expr2_negs_19():
    eval_lambda("Expr2", "1+-2", lambda x: x.eval() == ast.Number(-1))
Exemplo n.º 21
0
def test_term_neg_neg_term():
    eval_lambda("Term", "--1", lambda x: x.eval() == ast.Number(1))
Exemplo n.º 22
0
def do_test_expr2_with_args(s, n):
    eval_lambda("Expr2", s, lambda x: x.eval() == ast.Number(n))
Exemplo n.º 23
0
def test_expr2_negative_term_paren_2():
    eval_lambda("Expr2", "((((((((-1))))))))",
                lambda x: x.eval() == ast.Number(-1))
Exemplo n.º 24
0
def test_eval_lit_num_dec():
    eval_lambda("LitNum", "42", lambda x: x.eval() == ast.Number(42))
Exemplo n.º 25
0
def test_expr2_parens_binop_2():
    eval_lambda("Expr2", "((1 + 1) + (1 + 1))",
                lambda x: x.eval() == ast.Number(4))
Exemplo n.º 26
0
def eval_expr2(s):
    eval_lambda("Expr2", s, lambda x: x.eval() == ast.Number(eval(s)))
Exemplo n.º 27
0
def factor_num(p):
    return ast.Number(int(p[0].getstr()))
Exemplo n.º 28
0
def eval_expr2_expect(s, e):
    eval_lambda("Expr2", s, lambda x: x.eval() == ast.Number(e))
Exemplo n.º 29
0
 def p_numeric_literal(self, p):
     """numeric_literal : NUMBER"""
     p[0] = ast.Number(p[1])
Exemplo n.º 30
0
def test_eval_lit_num_hex():
    eval_lambda("LitNum", "0x2a", lambda x: x.eval() == ast.Number(42))