我试图用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)
答案 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)