我是Syntax定向翻译的新手,我不明白其中的优先顺序

时间:2016-10-31 19:28:49

标签: compilation compiler-construction

E-E*T
 /T
T-T+F
 /F
F-num

评估2 * 3 + 5 * 6 + 4

在上面的作品中,+符号的优先级高于*符号。通常*总是优先于*。那么为什么不在这个问题上呢

1 个答案:

答案 0 :(得分:0)

我对语法有点生疏,所以如果我错了,请纠正我。

快速回答是:这是仅用+*切换的算术表达式的典型无歧义上下文自由语法。

如果我们假设E是根/开头,则通过系统地应用产品来查看语法树。这使得它更加清晰。

2 * 3 + 5 * 6 + 4
F   F   |   F   |
|   |   |   |   |
|   T + F   T + F
T     |       |
|     |       |
E *   T       |
  |           |
  E       *   T
          |
          E

+具有更高的优先级,并且首先绑定它TF,而*将获得剩余的T和{{1} }}。规则依赖关系是创建优先级的原因。您可以轻松修改它to change precedence or introduce new levels

E

要使E-E+G /G G-G.J /J J-J*F /F F-num 最高,*最低,新符号+的优先级高于.且低于+。深入的信息可以在很多计算机科学/编译器构建部门找到,如hereherehere