我在这里有两个Happy代码片段,一个使用普通优先级规则,另一个使用依赖于上下文的优先级规则(这两个都在这里描述).
正常:
%left '+'
%left '*'
%%
Exp :: { Exp }
: Exp '+' Exp { Plus $1 $3 }
| Exp '*' Exp { Times $1 $3 }
| var { Var $1 }
Run Code Online (Sandbox Code Playgroud)
上下文相关的:
%left PLUS
%left TIMES
%%
Exp :: { Exp }
: Exp '+' Exp %prec PLUS { Plus $1 $3 }
| Exp '*' Exp %prec TIMES { Times $1 $3 }
| var { Var $1 }
Run Code Online (Sandbox Code Playgroud)
鉴于输入:
a * …Run Code Online (Sandbox Code Playgroud)