Пример #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]
Пример #2
0
def test_expr2_negs_6():
    eval_lambda("Expr2", "-(1 + 1)", lambda x: x.eval() == ast.Number(-2))
Пример #3
0
def factor_negative_num(p):
    return ast.Number(-int(p[1].getstr()))
Пример #4
0
def test_expr2_parens_binop_3():
    eval_lambda("Expr2", "1 + 2", lambda x: x.eval() == ast.Number(3))
Пример #5
0
def test_expr2_parens_binop_1():
    eval_lambda("Expr2", "(1 + (2 + 3))", lambda x: x.eval() == ast.Number(6))
Пример #6
0
def test_expr2_negative_term_0():
    eval_lambda("Expr2", "-1", lambda x: x.eval() == ast.Number(-1))
Пример #7
0
def test_term_negative_term():
    eval_lambda("Term", "-1", lambda x: x.eval() == ast.Number(-1))
Пример #8
0
def test_term_decimal():
    eval_lambda("Term", "1", lambda x: x.eval() == ast.Number(1))
Пример #9
0
def test_expr2_negs_17():
    eval_lambda("Expr2", "---(((1+2)+3+3)-(4+6))",
                lambda x: x.eval() == ast.Number(1))
Пример #10
0
def test_expr2_negs_16():
    eval_lambda("Expr2", "----2 + ----2", lambda x: x.eval() == ast.Number(4))
Пример #11
0
def test_expr2_negs_15():
    eval_lambda("Expr2", "--(2+2)", lambda x: x.eval() == ast.Number(4))
Пример #12
0
def test_expr2_negs_11():
    eval_lambda("Expr2", "-(-(1) - -1)", lambda x: x.eval() == ast.Number(0))
Пример #13
0
def test_expr2_negs_10():
    eval_lambda("Expr2", "(-1) + -(1)", lambda x: x.eval() == ast.Number(-2))
Пример #14
0
def test_expr2_negs_9():
    eval_lambda("Expr2", "-1 - -1", lambda x: x.eval() == ast.Number(0))
Пример #15
0
def test_expr2_negs_7():
    eval_lambda("Expr2", "-(-2) - 3", lambda x: x.eval() == ast.Number(-1))
Пример #16
0
def test_eval_lit_num_bin():
    eval_lambda("LitNum", "0b101010", lambda x: x.eval() == ast.Number(42))
Пример #17
0
def test_term_hex():
    eval_lambda("Term", "0x10", lambda x: x.eval() == ast.Number(0x10))
Пример #18
0
def test_expr2_negs_18():
    eval_lambda("Expr2", "1--2", lambda x: x.eval() == ast.Number(3))
Пример #19
0
def test_term_binary_lit_1():
    eval_lambda("Term", "-0b101", lambda x: x.eval() == ast.Number(-0b101))
Пример #20
0
def test_expr2_negs_19():
    eval_lambda("Expr2", "1+-2", lambda x: x.eval() == ast.Number(-1))
Пример #21
0
def test_term_neg_neg_term():
    eval_lambda("Term", "--1", lambda x: x.eval() == ast.Number(1))
Пример #22
0
def do_test_expr2_with_args(s, n):
    eval_lambda("Expr2", s, lambda x: x.eval() == ast.Number(n))
Пример #23
0
def test_expr2_negative_term_paren_2():
    eval_lambda("Expr2", "((((((((-1))))))))",
                lambda x: x.eval() == ast.Number(-1))
Пример #24
0
def test_eval_lit_num_dec():
    eval_lambda("LitNum", "42", lambda x: x.eval() == ast.Number(42))
Пример #25
0
def test_expr2_parens_binop_2():
    eval_lambda("Expr2", "((1 + 1) + (1 + 1))",
                lambda x: x.eval() == ast.Number(4))
Пример #26
0
def eval_expr2(s):
    eval_lambda("Expr2", s, lambda x: x.eval() == ast.Number(eval(s)))
Пример #27
0
def factor_num(p):
    return ast.Number(int(p[0].getstr()))
Пример #28
0
def eval_expr2_expect(s, e):
    eval_lambda("Expr2", s, lambda x: x.eval() == ast.Number(e))
Пример #29
0
 def p_numeric_literal(self, p):
     """numeric_literal : NUMBER"""
     p[0] = ast.Number(p[1])
Пример #30
0
def test_eval_lit_num_hex():
    eval_lambda("LitNum", "0x2a", lambda x: x.eval() == ast.Number(42))