擅长:python、mysql、java
<p>几个问题:delimitedList正在寻找一个逗号分隔的myVal列表,即标识符,作为唯一可接受的参数列表形式,因此它当然不能匹配'foo+bar'(不是逗号分隔的myVal列表!);显示另一个myVal和myFunction的修复以相同的方式开始,因此它们在mySubExpr中的顺序很重要;修复显示了另外两个嵌套级别,而不是一个。这个版本似乎还可以…:</p>
<pre><code>myVal = Word(alphas+nums+'_')
myExpr = Forward()
mySubExpr = (
(Suppress('(') + Group(myExpr) + Suppress(')'))
| myVal + Suppress('(') + Group(delimitedList(myExpr)) + Suppress(')')
| myVal
)
myExpr << mySubExpr + ZeroOrMore( oneOf('+ - / * =') + mySubExpr )
print(myExpr.parseString('blah(foo+bar)'))
</code></pre>
<p>根据需要发射<code>['blah', ['foo', '+', 'bar']]</code>。我还删除了多余的反斜杠,因为逻辑行接续无论如何都是在括号内出现的;它们是无害的,但确实妨碍了可读性。在</p>