2014-10-22 80 views
0

我在下面有这个语法并试图弄清楚是否可以使用LL语法分析器进行分析?如果没有,请解释。LL语法分析器语法

S --> ab | cB 
A --> b | Bb 
B --> aAb | cC 
C --> cA | Aba 

从我所了解的两组交集必须是空的通过配对不相交测试。

但我不知道从哪里开始,一直在浏览我的教科书和http://en.wikipedia.org/wiki/LL_parser#Parsing_procedure,但无法理解或发现任何示例需要遵循。我只需要查看一些步骤或步骤来了解如何解决其他类似问题。任何帮助表示赞赏。

+0

如果存在左递归,则LL(k)解析器无法解析它。 – Mephy 2014-10-22 02:28:28

+0

@Mephy:不幸的是,反过来并不成立 - 即使没有左递归,它也可能不是LL(k) – 2014-10-22 02:33:54

回答

1

计算所有非终端的FIRST集合,并检查FIRST是否为给定非终端的备选集合设置都是不相交的。如果都是,那是LL,并且如果有任何非终端它不是。如果有任何的ε规则,您还需要FOLLOW集。

计算FIRST 设置是很容易的,并会告诉你,如果语法是LL(1)。计算FIRST k集合涉及的内容相当多,但会告诉您,如果语法是LL(k),对于您计算的第一个集合中的任何特定k值,

+0

所以B的第一组是{a,c},C是{c,b,a }和A是{b,a,c}。我是否正确?所以现在S会是什么? – 2014-10-22 06:06:44

+0

@JessicaDinh是的,它看起来像正确计算了A,B和C的FIRST设置。并且因为它们不是不相交的,所以语法不是LL1可解析的。现在你可以继续为更大的Ks生成FIRST集,直到找到合适的K或放弃。您是否必须确定语法是否为任何K的LL(1)或LL(K)? – 2014-10-22 17:23:22