Разбор вызовов вложенных функций с помощью pyparsing

Я пытаюсь использовать pyparsing] для разбора вызовов функций в форме:

f(x, y)

Это просто. Но поскольку это синтаксический анализатор с рекурсивным спуском, его также должно быть легко разобрать:

f(g(x), y)

Вот чего я не могу получить. Вот упрощенный пример:

from pyparsing import Forward, Word, alphas, alphanums, nums, ZeroOrMore, Literal

lparen = Literal("(")
rparen = Literal(")")

identifier = Word(alphas, alphanums + "_")
integer  = Word( nums )

functor = identifier

# allow expression to be used recursively
expression = Forward()

arg = identifier | integer | expression
args = arg + ZeroOrMore("," + arg)

expression << functor + lparen + args + rparen

print expression.parseString("f(x, y)")
print expression.parseString("f(g(x), y)")

И вот вывод:

['f', '(', 'x', ',', 'y', ')']
Traceback (most recent call last):
  File "tmp.py", line 14, in <module>
    print expression.parseString("f(g(x), y)")
  File "/usr/local/lib/python2.6/dist-packages/pyparsing-1.5.6-py2.6.egg/pyparsing.py", line 1032, in parseString
    raise exc
pyparsing.ParseException: Expected ")" (at char 3), (line:1, col:4)

Почему мой синтаксический анализатор интерпретирует функтор внутреннего выражения как отдельный идентификатор?

9
задан JasonFruit 16 April 2012 в 05:05
поделиться