【问题标题】:Extend grammar to support unar operations扩展语法以支持 unar 操作
【发布时间】:2011-12-25 17:04:44
【问题描述】:

我的语法很简单:

E->E+T|T
T->T*F|F
F->(E)|id

我想扩展它以支持 unar 操作(恕我直言,这是正确的语法,但它可能是错误的,因为我在语法、解析器、词法分析器等方面是真正的 n00b):

E->E+T|T
T->T*F|F
F->+F|(E)|id

当我尝试更新解析表时,真正的问题出现了:

所以问题是我应该如何编辑此表以提供一元操作支持(基于所描述的语法)?

PS 无论如何,我将非常感谢使用 LR(k)(或 LALR)解析器 ^_^

P.S.2.解析器生成器不适合这种情况。

【问题讨论】:

  • 是的,这是作业(有点)。 “帮助什么?” -> 在这种情况下,我需要帮助将语法规则转换为解析表。我创建了一些不同的语法,但我很难将它们转换为解析表(对于 LR(k))。

标签: parsing grammar lalr lr


【解决方案1】:

要了解如何调整解析表,您需要知道每个状态的 LR 项集是什么,并了解您对语法的添加如何更改项集——状态项集中的每个新的部分解析项为您提供解析表的附加操作。 例如,在状态 7 中,您的原始项目集(在添加 F -> + F 规则之前)是:

T -> T * . F
F -> . ( E )
F -> . id

(在这种情况下,我忽略了前瞻,因为它无关紧要,但对于一般的 LR(k),您需要跟踪它。)

因此,您的新规则添加了项目 F -> . + F,这为您提供了状态 7 的新操作(在输入 + 时移动。)这反过来又为您的表格提供了全新的状态。

【讨论】:

  • 感谢您的指导 - 我已经添加了两个额外的状态,现在它可以正常工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 2012-06-13
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
相关资源
最近更新 更多