找到LL(1)语法?

时间:2013-12-02 02:28:26

标签: context-free-grammar ll

我如何找到该语言的LL(1)语法:

  

L = a m b n c m + n

m和n是自然界的元素吗?我的无上下文语法是:

  

S→AB

     

A→acA | AC

     

B→bcB | BC

有人能告诉我,我是否走在正确的轨道上?

编辑:我的新CFG

  

S→aSc |乙

     

B→bBc | BC

但是我想我可能有关于LL(1)的错误,因为B的两个推导都以b ...开头是正确的吗?

修改 谢谢,我想我明白了:

  

S→aSc |乙

     

B→bBc |拉姆达

1 个答案:

答案 0 :(得分:1)

你的语法有两个主要问题:

  1. 您目前可以生成一些不在语言中的字符串。例如,你的语法可以生成acacbcbc,而不是语言。

  2. 您的语法不是LL(1),因为您有许多FIRST / FIRST冲突。例如,一对产品A→acA和A→ac都以a开头,因此给定非终结符号A和字符a,您无法确定要应用哪种生产。

  3. 作为提示,您所用语言中的字符串恰好是 m b n c n c 形式的字符串米。换句话说,试着看看你是否可以在前面生成m a,在后面生成m c,然后切换并生成与n c匹配的n b。您可能想先尝试为 m c m 查找语法,看看是否可以对其进行调整。

    编辑新语法:这看起来好多了!但是,您在制作中仍然存在FIRST / FIRST冲突

      

    B→bBc

      

    B→bc

    此外,您的语法无法生成字符串ac或ε。您应该能够通过修复FIRST / FIRST冲突来解决这两个问题。作为提示:你如何用一个不产生字符的产品替换第二个产品?

    希望这有帮助!