いくつかのコードを解析するものを書こうとしています。foo(spam)
andを正常に解析できますspam+eggs
が、foo(spam+eggs)
(再帰降下? コンパイラーからの私の用語は少し錆びています) 失敗します。
次のコードがあります。
from pyparsing_py3 import *
myVal = Word(alphas+nums+'_')
myFunction = myVal + '(' + delimitedList( myVal ) + ')'
myExpr = Forward()
mySubExpr = ( \
myVal \
| (Suppress('(') + Group(myExpr) + Suppress(')')) \
| myFunction \
)
myExpr << Group( mySubExpr + ZeroOrMore( oneOf('+ - / * =') + mySubExpr ) )
# SHOULD return: [blah, [foo, +, bar]]
# but actually returns: [blah]
print(myExpr.parseString('blah(foo+bar)'))