使用PyParsing解析函数调用

时间:2014-07-23 00:11:44

标签: python grammar pyparsing ll left-recursion

我试图解析一种简单的语言。解析函数调用会带来麻烦。我试图告诉它函数调用是一个表达式,后跟左括号,参数列表和右括号。我有这样的事情:

expr = Forward()
iden = Word(alphas+'_', alphanums+'_')
integer = Word(nums)
binop = operatorPrecedence(expr, ...) # irrevelant
call = expr + Literal('(') + delimitedList(expr) + Literal(')')
expr << call | integer | iden

问题很明显:expr是左递归的。但是,我无法想象如何解决这个问题。我有使用右递归式语法(a.k.a.PLY,Yacc等)的经历,但我仍在尝试找出左递归语法。

1 个答案:

答案 0 :(得分:1)

Functionname = Word(alphanums + '_')
functionbody = Forward()
functionbody <<=  Functionname + (Literal("(") +
Optional( delimitedList ( functionbody | Word(alphanums + '_') | "''"),'')
+ Literal(")"))