Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 修复中缀解析器_Parsing_Math - Fatal编程技术网

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应该提前查看一个令牌,以确保它不是后缀操作符?