Parsing 修复中缀解析器
我有一个数学表达式解析器,它应该处理Parsing 修复中缀解析器,parsing,math,Parsing,Math,我有一个数学表达式解析器,它应该处理+,-,*,/,^,(-),函数,当然还有原子(比如x,1,pi,等等)。解析器基本上是根据设计的,我在下面复制了它parse_primary()在别处定义 parse_expression () return parse_expression_1 (parse_primary (), 0) parse_expression_1 (lhs, min_precedence) while the next token is a binary op
+
,-
,*
,/
,^
,(-)
,函数,当然还有原子(比如x
,1
,pi
,等等)。解析器基本上是根据设计的,我在下面复制了它parse_primary()
在别处定义
parse_expression ()
return parse_expression_1 (parse_primary (), 0)
parse_expression_1 (lhs, min_precedence)
while the next token is a binary operator whose precedence is >= min_precedence
op := next token
rhs := parse_primary ()
while the next token is a binary operator whose precedence is greater
than op's, or a right-associative operator
whose precedence is equal to op's
lookahead := next token
rhs := parse_expression_1 (rhs, lookahead's precedence)
lhs := the result of applying op with operands lhs and rhs
return lhs
如何修改此解析器以正确处理(-
?更好的是,我如何实现一个支持我可能需要的所有中缀和后缀运算符(!
)的解析器?最后,应该如何处理函数
我应该注意的是,
(-
否定在lexer中与-
“减法”不同,因此它可以被视为一个不同的标记。所有一元运算符和函数调用内容基本上都属于parse\u primary,它应该接受一个合法的一元术语。简单地让^
优先于一元-
?就目前情况而言,这个问题没有包含足够的信息,很难回答。Phantom,我已经修改了我的问题(有点模糊),尽管我现在问的不是同一个问题。我想我会重写我的解析器,这是相当复杂的,以匹配我在这里得到的任何答案。非常主观,但。。。小建议。把它缩短。具体点。不要闲聊。就目前的情况来看,我很想麻烦你。(更好的是,可能说得太多了。用Python实现你的算法。然后我们有一些事情要谈)。我明白了。所以parse_primary应该提前查看一个令牌,以确保它不是后缀操作符?