【问题标题】:A Grammar And some challenge about SLR, LALR关于 SLR、LALR 的语法和一些挑战
【发布时间】:2014-09-02 13:29:08
【问题描述】:

我知道:

如果一种语言可以由 LL(1) 语法生成,则称该语言为 LL(1)。可以证明LL(1)文法是

not ambiguous and
not left-recursive.

但我遇到了问题。

为什么是语法

S->aBDb

B -> λ

D-> dD | λ

为什么这个文法不是 LL(1) 也不是 SLR 也不是 LALR?谁能描述一下我?

【问题讨论】:

  • 不用担心 - 语法是 LL(1) 和 SLR(1)。谁告诉你不是的?
  • 亲爱的@Gunther,这是 P.hd 入学考试的测试。答案的关键是这不是。
  • 另一个用户认为这个问题中有一个拼写错误,导致语法为 LL(1)、SLR(1) 和 LALR(1)。删除错字后,语法不是 LL(1)、SLR(1) 或 LALR(1)。但是,我认为最好将其作为一个不同的问题发布,否则我必须从头开始完全重做我的答案。

标签: compiler-construction programming-languages ll lalr lr


【解决方案1】:

这个文法确实是LL(1)。这是解析表:

      a     b     d       $
S     aBDb
B           eps   eps
D           eps   dD

也是单反(1)。以下是 FOLLOW 集:

S: $
B: d, b
D: b

这里是配置集:

 S' -> .S$ 
 S  -> .aBDb  ($)

 S' -> S.$

 S  -> a.BDb   ($)
 B  -> .       (b, d)

 S  -> aB.Db   ($)
 D  -> .       (b)
 D  -> .dD     (b)

 D  -> d.D     (b)
 D  -> .dD     (b)
 D  -> .       (b)

 D  -> dD.     (b)

不存在移位/归约或归约/归约冲突,因此该语法为 SLR(1)。因此,它也是 LALR(1)。

希望这会有所帮助!

【讨论】:

  • 亲爱的 templatetypede,请您发送您的电子邮件地址吗?
  • 你的答案完全错误,不是 LALR 也不是 SLR。
  • @user153695 我可能在这里犯了一个错误,但我不明白它是什么。你能指出我犯了什么错误吗?我希望这个答案对未来的读者有所帮助。
  • @user153695 我很抱歉 - 我发现了我的错误。我离开了 SLR 州之一的生产。答案已更新!
  • 我确定这不是 LL(1) 也不是 SLR 也不是 LALR,你同意我的观点吗?
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2014-11-29
  • 2011-02-10
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多