python – 带有pyparsing的s-expression解析错误

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

最佳答案 这种差异对你有用吗?

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)
点赞