【问题标题】:How to solve this Grammar through SLR?如何通过 SLR 解决这个语法?
【发布时间】:2015-05-04 07:18:35
【问题描述】:

我想解决这个语法。
S->SS+
S->SS*
S->一个

我想用 action 和 goto 构建 SLR 项目集和解析表。 这个语法可以在不消除左递归的情况下解析吗? 这是语法单反吗?

【问题讨论】:

  • 不行,你需要消除左递归!

标签: parsing compiler-construction grammar left-recursion


【解决方案1】:
  1. 不,这个语法不是 SLR。这是模棱两可的。

  2. 左递归对于 LR 解析器来说不是问题。只有 LL 解析器需要左递归消除。

【讨论】:

  • 怎么能说这个语法是单反呢?有什么办法可以查到吗?
  • @himanshusaini:构造slr表,观察没有冲突。
  • 是的,解析表有冲突。所以这不是单反语法吗?有没有什么方法可以在不制作解析树的情况下找到语法是否为单反。
  • @HimanshuSaini:实际上,所有判断语法是否为 SLR 的算法都相当于“构造 SLR 表”。
【解决方案2】:

我对此并不完全确定,但我认为这个语法实际上是 SLR(1)。我手工构建了 SLR(1) 表,我得到了一个没有冲突的表(添加了一个从 S'(新开始符号)-> S 的 0 转换)。

有人可以提供一个可以从该语法以两种不同方式派生的句子吗?我能够在 Bison 中得到一个解析器,而没有任何警告。你确定它是模棱两可的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2021-05-28
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多