带有pyparsing的s-expression解析错误

时间:2014-05-30 23:40:08

标签: python pyparsing

我试图用Python(v3.4.0)和pyparsing(v2.0.1)解析s表达式。我对下面的代码进行了很多思考,但是继续得到ParseException。代码解析例如" a(",但未能解析"(a(b))"。

import pyparsing as pp

# S-expression grammar
w = pp.Word(pp.alphanums)
lp = pp.Suppress("(")
rp = pp.Suppress(")")
sexp = pp.Forward()
sexp_list = pp.Forward()
sexp_list << (sexp | (sexp + sexp_list))
sexp << (w | (lp + sexp_list + rp))

s = "(a (b))"

try:
  pr = sexp.parseString(s)
  print(pr)
except pp.ParseException as e:
  print(e)

1 个答案:

答案 0 :(得分:2)

这种差异对你有用吗?

9,10c9,10
< sexp_list << (sexp | (sexp + sexp_list))
< sexp << (w | (lp + sexp_list + rp))
---
> sexp_list = pp.Group(lp + pp.ZeroOrMore(sexp) + rp)
> sexp << (w | sexp_list)