Example #1
0
def minus(inp):
    sym = symbol(toList("minus"))
    lf = symbol(toList("("))
    rf = symbol(toList(")"))
    return bind(
        sym, lambda _: bind(
            lf, lambda _: bind(
                expr, lambda e: bind(rf, lambda _: mret(minus_exp(e))))))(inp)
Example #2
0
def diff(inp):
    neg = symbol(toList("-"))
    lf = symbol(toList("("))
    rf = symbol(toList(")"))
    return bind(neg,lambda _:
            bind(lf,lambda _ :
            bind(expr,lambda e1 : 
            bind(expr,lambda e2 :
            bind(rf,lambda _ :
                 mret (diff_exp(e1,e2))  )))))(inp)
Example #3
0
def letexp(inp):
    let = symbol(toList("let"))
    defn = symbol(toList("="))
    In  = symbol(toList("in"))
    return  bind(let  ,lambda _ :
            bind(var  ,lambda var1:
            bind(defn ,lambda _ :
            bind(expr ,lambda e1:
            bind(In   ,lambda _:
            bind(expr ,lambda body:
                mret( let_exp(var1,e1,body) )))))))(inp)
Example #4
0
def ifexp(inp):
    i = symbol(toList("if"))
    then = symbol(toList("then"))
    els  = symbol(toList("else"))
    return  bind(i    , lambda _ :
            bind(expr , lambda e1 : 
            bind(then , lambda _ :
            bind(expr , lambda e2 :
            bind(els  , lambda _ :
            bind(expr , lambda e3 :
                  mret( if_exp(e1,e2,e3) ) ))))))(inp)
Example #5
0
def variable(inp):
    keylst = [
        "minus", "zero?", "equal?", "greate?", "less?", "cons", "nil", "car",
        "cdr", "null?", "let", "in", "if", "then", "else"
    ]
    keylst = toList(list(map(toList, keylst)))
    return identifier(keylst)(inp)
Example #6
0
def pcar(inp):
    sym = symbol(toList("car"))
    return bind(sym,lambda _ :
            bind(expr,lambda e:
                 mret( car_exp(e) )))(inp)
Example #7
0
def pcons(inp):
    sym = symbol(toList("cons"))
    return bind(sym,lambda _:
            bind(expr,lambda e1:
            bind(expr,lambda e2:
            mret( cons_exp(e1,e2) ))))(inp)
Example #8
0
def pnil(inp):
    sym = symbol(toList("nil"))
    return bind(sym,lambda _ : mret( nil_exp() ) )(inp)
Example #9
0
def equalp(inp):
    ep = symbol(toList("equal?"))
    return bind(ep,lambda _:
            bind(expr,lambda e1:
            bind(expr,lambda e2:
            mret( equalp_exp(e1,e2) ) )))(inp)
Example #10
0
def lessp(inp):
    lp = symbol(toList("less?"))
    return bind(lp,lambda _:
            bind(expr,lambda e1:
            bind(expr,lambda e2:
            mret ( lessp_exp(e1,e2) ) )))(inp)
Example #11
0
def greatep(inp):
    gp = symbol(toList("greate?"))
    return bind(gp,lambda _:
            bind(expr,lambda e1:
            bind(expr,lambda e2:
            mret ( greatep_exp(e1,e2) ) )))(inp)
Example #12
0
def zerop(inp):
    zp = symbol(toList("zero?"))
    return bind(zp,lambda _:
            bind(expr,lambda e: mret(zerop_exp(e))))(inp)
Example #13
0
def paren(inp):
    lf = symbol(toList("("))
    rf = symbol(toList(")"))
    return bracket(lf)(Expr)(rf)(inp)
Example #14
0
def nullp(inp):
    sym = symbol(toList("null?"))
    return bind(sym,lambda _:
            bind(expr,lambda e:
                 mret( nullp_exp(e) )))(inp)
Example #15
0
def variable(inp):
    keylst = ["minus", "zero?", "let", "in", "if", "then", "else"]
    keylst = toList(list(map(toList, keylst)))
    return identifier(keylst)(inp)