关于LL(1)语法转换的问题

时间:2015-03-23 12:45:18

标签: parsing grammar ll

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

> A ::= B | A ; B 

> B ::= C | [ A ]

> C ::= D | C , D

> D ::= x | (C)

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

1 个答案:

答案 0 :(得分:0)

这里的主要问题是制作

  

A→A;乙

  

C→C,D

是左递归的。在这两种情况下,这些产品都会生成一系列由某种分隔符分隔的对象(第一种情况下是分号,第二种情况下是逗号),所以你可以像这样重写它们:

  

A→B;甲

     

C→D,C

这给出了语法

  

A→B | B;甲

     

B→C | [A]

     

C→D | D,C

     

D→x | (C)

现在的问题是A和C的产品有一个共同的前缀。但这没什么值得担心的:我们可以像这样留下因素:

  

A→B H

     

H→ε| ;甲

     

B→C | [A]

     

C→D I

     

我→ε| ç

     

D→x | (C)

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