pyparsing मैं pyparsing
उपयोग करने के लिए समारोह के रूप में कॉल पार्स करने के लिए कोशिश कर रहा हूँ का उपयोग कर कहता है। लेकिन क्योंकि यह एक रिकर्सिव-डिसेंट पार्सर है, यह भी पार्स करने के लिए आसान होना चाहिए:पार्सिंग नेस्ट समारोह
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)
क्यों मेरी पार्सर एक स्टैंडअलोन पहचानकर्ता के रूप में आंतरिक अभिव्यक्ति की functor व्याख्या करता है?
अच्छा पकड़, @Jason! – PaulMcG