我正在尝试解析一种简单的语言。问题在于解析函数调用。我试图告诉它函数调用是一个表达式,后跟左括号、参数列表和右括号。我有这样的事情:
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 等)很有经验,但我仍在尝试找出左递归语法。