def parse_eval(grammar, text): solver = make_solver() exp = make_parse_statement(grammar, text) sexp = to_sexpression(exp) exp = solver.eval(sexp) # Do not need the second eval any more, with the rule 'eval_parse_result'. if isinstance(exp, Cons): exp = cons2tuple(exp) return solver.eval(exp) #sexpression2daoexpression
def parse_eval(grammar, text): solver = make_solver() exp = make_parse_statement(grammar, text) sexp = to_sexpression(exp) exp = solver.eval(sexp) # Do not need the second eval any more, with the rule 'eval_parse_result'. if isinstance(exp, Cons): exp = cons2tuple(exp) return solver.eval(exp)#sexpression2daoexpression
def sexpression2daoexpression(item): if isinstance(item, Cons): head = sexpression2daoexpression(item.head) if head==let or head==letr: bindings = tuple((var, sexpression2daoexpression(exp)) for var, exp in item.tail.head) body = tuple(sexpression2daoexpression(x) for x in item.tail.tail) return head(bindings, *body) elif head==lambda_: vars = tuple(item.tail.head) body = tuple(sexpression2daoexpression(x) for x in item.tail.tail) return head(vars, *body) elif head==FunctionForm or head==MacroForm: return head(*tuple((cons2tuple(rule.head),)+tuple(sexpression2daoexpression(stmt) for stmt in rule.tail) for rule in item.tail)) return head(*tuple(sexpression2daoexpression(x) for x in item.tail)) else: return item
def sexpression2daoexpression(item): if isinstance(item, Cons): head = sexpression2daoexpression(item.head) if head == let or head == letr: bindings = tuple((var, sexpression2daoexpression(exp)) for var, exp in item.tail.head) body = tuple(sexpression2daoexpression(x) for x in item.tail.tail) return head(bindings, *body) elif head == lambda_: vars = tuple(item.tail.head) body = tuple(sexpression2daoexpression(x) for x in item.tail.tail) return head(vars, *body) elif head == FunctionForm or head == MacroForm: return head(*tuple( (cons2tuple(rule.head), ) + tuple(sexpression2daoexpression(stmt) for stmt in rule.tail) for rule in item.tail)) return head(*tuple(sexpression2daoexpression(x) for x in item.tail)) else: return item