使用pyparsing时的s表达式解析错误

4 投票
1 回答
662 浏览
提问于 2025-04-18 08:06

我正在用Python(版本3.4.0)和pyparsing(版本2.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 个回答

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)

撰写回答