当前位置:  开发笔记 > 编程语言 > 正文

快乐的上下文依赖运算符优先级

如何解决《快乐的上下文依赖运算符优先级》经验,为你挑选了0个好方法。

我在这里有两个Happy代码片段,一个使用普通优先级规则,另一个使用依赖于上下文的优先级规则(这两个都在这里描述).

正常:

%left '+'
%left '*'
%%

Exp :: { Exp }
    : Exp '+' Exp { Plus $1 $3 }
    | Exp '*' Exp { Times $1 $3 }
    | var         { Var $1 }

上下文相关的:

%left PLUS
%left TIMES
%%

Exp :: { Exp }
    : Exp '+' Exp %prec PLUS  { Plus $1 $3 }
    | Exp '*' Exp %prec TIMES { Times $1 $3 }
    | var                     { Var $1 }

鉴于输入:

a * b + c * d

正常版本给出:

Plus (Times (Var "a") (Var "b")) (Times (Var "c") (Var "d"))

而依赖于上下文的版本给出:

Times (Var "a") (Plus (Var "b") (Times (Var "c") (Var "c")))

这些都不应该给出相同的输出吗?我在这做错了什么让他们生成不同的解析树?

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有