【问题标题】:I'm new to Syntax directed translation and I didn't understand the precedence in this我是语法定向翻译的新手,我不明白这里的优先级
【发布时间】:2016-10-31 19:28:49
【问题描述】:
E-E*T
 /T
T-T+F
 /F
F-num

计算 2*3+5*6+4

在上述产生式中,+ 符号的优先级为何高于 * 符号。通常 * 总是比 * 具有更高的优先级。那为什么不在这个问题中

【问题讨论】:

  • 你能检查一下你的生产规则吗?任何地方都没有+
  • 现在检查@makadev
  • 那些看起来不像使用我见过的 (E)BNF 语法的任何变体的生产规则。尝试使用更标准的符号重新表述它们;见en.wikipedia.org/wiki/Backus%E2%80%93Naur_form。那么也许我们可以理解你的问题。 (也许你的意思是;“E=E*T | T”?)

标签: compilation compiler-construction


【解决方案1】:

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

快速的答案是:这是一个典型的明确上下文无关的算术表达式语法,只需切换+*

如果我们假设E 是根/开始,则通过系统地应用产生式来查看语法树。这样可以更清楚地了解发生了什么。

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

+ 具有更高的优先级并首先绑定它周围的TF,而* 将获得剩余的TE。规则依赖关系是创建优先级的原因。你可以很容易地修改它to change precedence or introduce new levels

E-E+G
 /G
G-G.J
 /J
J-J*F
 /F
F-num

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多