Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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