使用PyParsing解析函数调用
我正在尝试解析一种简单的语言。问题出现在解析函数调用的时候。我想告诉程序,函数调用是一个表达式后面跟着左括号、参数列表和右括号。我的代码大概是这样的:
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 等),但对于左递归的语法还在摸索中。
1 个回答
3
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据的类型不匹配。这就像是你想把热水倒进一个冰冷的水桶里,但水桶的底部有个洞,水会漏掉,导致你无法得到想要的效果。
为了避免这些问题,我们需要确保在处理数据之前,先检查一下数据的状态,确保它们是可以使用的。这就像是在倒水之前,先检查一下水桶有没有漏水。
总之,处理数据的时候,仔细检查和确认数据的状态是非常重要的,这样才能顺利完成我们的任务。
Functionname = Word(alphanums + '_')
functionbody = Forward()
functionbody <<= Functionname + (Literal("(") +
Optional( delimitedList ( functionbody | Word(alphanums + '_') | "''"),'')
+ Literal(")"))