Esempio n. 1
0
def fun_decl(s):
    params = s[2]
    body = s[4]
    fn = utils.foldr(syntax.Lambda, params + [body])
    return {
        "lhs": syntax.Ident(s[1].value),
        "rhs": fn,
    }
Esempio n. 2
0
def std_env(checker: check.Checker) -> StdEnv:
    T = checker.fresh_var()
    U = checker.fresh_var()
    V = checker.fresh_var()
    W = checker.fresh_var()

    return env.Env(locals={
        syntax.Ident("null"): typ.Fn(typ.List(T), typ.Bool),
        syntax.Ident("tail"): typ.Fn(typ.List(U), typ.List(U)),
        syntax.Ident("zero"): typ.Fn(typ.Int, typ.Bool),
        syntax.Ident("succ"): typ.Fn(typ.Int, typ.Int),
        syntax.Ident("pred"): typ.Fn(typ.Int, typ.Int),
        syntax.Ident("times"): typ.Fn(typ.Int, typ.Fn(typ.Int, typ.Int)),
        syntax.Ident("pair"): typ.Fn(V, typ.Fn(W, typ.Tuple(V, W))),
    })
Esempio n. 3
0
def ident_expr(s):
    return syntax.Ident(s[0].value)
Esempio n. 4
0
def fn_expr(s):
    param = syntax.Ident(s[1].value)
    return syntax.Lambda(param, s[3])
Esempio n. 5
0
def params_multi(s):
    return s[0] + [syntax.Ident(s[1].value)]
Esempio n. 6
0
def params_single(s):
    return [syntax.Ident(s[0].value)]
Esempio n. 7
0
def val_decl(s):
    return {
        "lhs": syntax.Ident(s[1].value),
        "rhs": s[3],
    }