【发布时间】:2017-06-09 18:39:06
【问题描述】:
我这里有两个 Happy 代码的 sn-ps,一个使用普通优先规则,一个使用上下文相关的优先规则(都在 here 中进行了描述)。
正常:
%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")))
这两者不应该提供相同的输出吗?我在这里做错了什么导致它们生成不同的解析树?
【问题讨论】: