我正在尝试解析一种简单的语言。问题在于解析函数调用。我试图告诉它,一个函数调用是一个表达式,后面跟着左括号,参数列表和右括号。像这样:
expr = Forward()
iden = Word(alphas+'_', alphanums+'_')
integer = Word(nums)
binop = operatorPrecedence(expr, ...) # irrevelant
call = expr + Literal('(') + delimitedList(expr) + Literal(')')
expr << call | integer | iden
问题很明显:expr
是左递归的。然而,我不知道该怎么解决这个问题。我熟悉右递归式语法(又名右递归式语法)。PLY, Yacc等),但我仍然试图找出左递归语法。
Functionname = Word(alphanums + '_')
functionbody = Forward()
functionbody <<= Functionname + (Literal("(") +
Optional( delimitedList ( functionbody | Word(alphanums + '_') | "''"),'')
+ Literal(")"))