Example #1
0
def andToIf(s_exp):
    if isinstance(s_exp,sexprs.Nil):
        return sexprs.true()
    if isinstance(s_exp,sexprs.Pair):
        if isinstance(s_exp.second,sexprs.Nil):
            return s_exp.first
    return sexprs.Pair(sexprs.Symbol("IF"),sexprs.Pair(s_exp.first,sexprs.Pair(
        sexprs.Pair(sexprs.Symbol("AND"),s_exp.second)
        ,sexprs.Pair(sexprs.false(),sexprs.Nil()))))
Example #2
0
pSexpr_comment = ps.parser(pc.const(lambda x: x == '#')) \
                    .parser(pc.const(lambda x: x == ';')) \
                    .delayed_parser(lambda: pSexpr) \
                    .catens(3) \
                    .done()

p_skip = ps.parser(pc.pcWhite1) \
        .parser(p_line_comment) \
        .parser(pSexpr_comment) \
        .disjs(3) \
        .star() \
        .done()

true_p = ps.parser(pc.pcWordCI('#t')) \
                .pack(lambda m: sexprs.true()) \
                .done()

false_p = ps.parser(pc.pcWordCI('#f')) \
                .pack(lambda m: sexprs.false()) \
                .done()

boolean_p = ps.parser(true_p) \
            .parser(false_p) \
            .disj() \
            .done()

nat_p = ps.parser(pc.const(lambda x: x=='+')) \
        .parser(pc.plus(pc.pcOneOf('0123456789'))) \
        .caten() \
        .pack(lambda m: sexprs.Integer(int(m[0]+"".join(m[1])))) \
Example #3
0
pSexpr_comment = ps.parser(pc.const(lambda x: x == '#')) \
                    .parser(pc.const(lambda x: x == ';')) \
                    .delayed_parser(lambda: pSexpr) \
                    .catens(3) \
                    .done()

p_skip = ps.parser(pc.pcWhite1) \
        .parser(p_line_comment) \
        .parser(pSexpr_comment) \
        .disjs(3) \
        .star() \
        .done()

true_p = ps.parser(pc.pcWordCI('#t')) \
                .pack(lambda m: sexprs.true()) \
                .done()

false_p = ps.parser(pc.pcWordCI('#f')) \
                .pack(lambda m: sexprs.false()) \
                .done()

boolean_p = ps.parser(true_p) \
            .parser(false_p) \
            .disj() \
            .done()

nat_p = ps.parser(pc.const(lambda x: x=='+')) \
        .parser(pc.plus(pc.pcOneOf('0123456789'))) \
        .caten() \
        .pack(lambda m: sexprs.Integer(int(m[0]+"".join(m[1])))) \