コード例 #1
0
ファイル: calc.py プロジェクト: code4tots/ParseTools
opar = Tok(r'\(')
cpar = Tok(r'\)')
equal = Tok(r'\=')
rr = Tok(r'\>\>')

exprs = Parser()
expr = Parser()
prim = Parser()
expo = Parser()
sign = Parser()
fact = Parser()
summ = Parser()
asgn = Parser()
prin = Parser()

prim.parser = num | var | opar + expr - cpar
expo.parser = ((prim - dstar & expo < (lambda a, b: a**b)) | prim)
sign.parser = ((plus + sign < (lambda x: +x)) | (dash + sign <
                                                 (lambda x: -x)) | expo)
fact.parser = sign << ((star + sign, (lambda a, b: a * b)),
                       (slash + sign, (lambda a, b: a / b)),
                       (mod + sign, (lambda a, b: a % b)))
summ.parser = fact << ((plus + fact, (lambda a, b: a + b)),
                       (dash + fact, (lambda a, b: a - b)))
asgn.parser = ((nam - equal & asgn < (lambda n, v:
                                      (env.__setitem__(n, v), v)[-1])) | summ)

prin.parser = ((rr + expr < (lambda x: (print(x), x)[-1])) | asgn)

expr.parser = prin
コード例 #2
0
ファイル: calc.py プロジェクト: code4tots/ParseTools
opar  = Tok(r'\(')
cpar  = Tok(r'\)')
equal = Tok(r'\=')
rr    = Tok(r'\>\>')

exprs = Parser()
expr = Parser()
prim = Parser()
expo = Parser()
sign = Parser()
fact = Parser()
summ = Parser()
asgn = Parser()
prin = Parser()

prim.parser = num | var | opar + expr - cpar
expo.parser = (
    (prim - dstar & expo < (lambda a, b: a ** b)) |
    prim
)
sign.parser = (
    (plus + sign < (lambda x : +x)) |
    (dash + sign < (lambda x : -x)) |
    expo
)
fact.parser = sign << (
    (star  + sign, (lambda a, b : a * b)),
    (slash + sign, (lambda a, b : a / b)),
    (mod   + sign, (lambda a, b : a % b))
)
summ.parser = fact << (
コード例 #3
0
ファイル: astcalc.py プロジェクト: code4tots/ParseTools
cpar = Tok(r'\)')
equal = Tok(r'\=')
kw_print = Tok(r'print')

exprs = Parser()
exprl = Parser()
expr = Parser()
prim = Parser()
expo = Parser()
sign = Parser()
fact = Parser()
summ = Parser()
asgn = Parser()
prin = Parser()

prim.parser = flt | int_ | var | opar + expr - cpar
expo.parser = ((prim - dstar & expo < Pow) | prim)
sign.parser = ((plus + sign < Pos) | (dash + sign < Neg) | expo)
fact.parser = sign << ((star + sign, Mul), (slash + sign, Div),
                       (mod + sign, Mod))
summ.parser = fact << ((plus + fact, Add), (dash + fact, Sub))
asgn.parser = ((nam - equal & asgn < Asgn) | summ)

prin.parser = ((kw_print + expr < Prin) | asgn)

expr.parser = prin

exprl.parser = ((expr & exprl < (lambda a, b: (a, b))) | (end <
                                                          (lambda x: None)))

exprs.parser = exprl < Exprs
コード例 #4
0
ファイル: astcalc.py プロジェクト: code4tots/ParseTools
cpar  = Tok(r'\)')
equal = Tok(r'\=')
kw_print = Tok(r'print')

exprs = Parser()
exprl = Parser()
expr  = Parser()
prim  = Parser()
expo  = Parser()
sign  = Parser()
fact  = Parser()
summ  = Parser()
asgn  = Parser()
prin  = Parser()

prim.parser = flt | int_ | var | opar + expr - cpar
expo.parser = (
    (prim - dstar & expo < Pow) |
    prim
)
sign.parser = (
    (plus + sign < Pos) |
    (dash + sign < Neg) |
    expo
)
fact.parser = sign << (
    (star  + sign, Mul),
    (slash + sign, Div),
    (mod   + sign, Mod)
)
summ.parser = fact << (