【问题标题】:Problems about LL(1) grammar transformationLL(1)文法转换问题
【发布时间】:2015-05-26 11:05:15
【问题描述】:

我在将以下非 LL(1) 语法转换为 LL(1) 语法时遇到了一些问题。有没有可能变身?

> A ::= B | A ; B 

> B ::= C | [ A ]

> C ::= D | C , D

> D ::= x | (C)

其中 ;, x, (, ), [,] 是终结符。

【问题讨论】:

    标签: parsing grammar ll


    【解决方案1】:

    这里的主要问题是产生式

    A → A ;乙

    C → C, D

    是左递归的。在这两种情况下,这些产生式都会生成由某种分隔符分隔的对象字符串(第一种情况是分号,第二种情况是逗号),因此您可以像这样重写它们:

    A → B ;一个

    C → D, C

    这给出了语法

    A → B |乙;一个

    B → C | [一]

    C → D | D、C

    D → x | (C)

    现在的问题是 A 和 C 的产生式有一个共同的前缀。但这没什么好担心的:我们可以像这样对它们进行左因子:

    A → B H

    H → ε | ;一个

    B → C | [一]

    C → D I

    我 → ε | C

    D → x | (C)

    我相信这个语法现在是 LL(1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多