在判断LL(1)文法是否符合的时候需要判断LL(1)文法是否存在左公因子,和左递归的情况以下给出相应的判断方法以及通过提取左公因子和消除左递归使非LL(1)文法转換为LL(1)法的方法
第一种情况:存在左公因子 ;解决方法:提取左公因子;
A->ay|ab 两个产生式左部第一个符号相同,则不符合LL(1)文法指代不奣,则表示存在左公因子
第二种情况:存在左递归;
(这里第二种情况注意因为是左递归,所以看得就是第一个字符一定要跟这个类型一样的A->B.... 以及B->A.... 这种才是左递归,如果A->B.... ,B->aA..., 这种就不是左递归了因为样式不同,请注意)
同样消除左递归的方法:
如果是间接左递归则先转換成直接左递归:
就是得出结论,优先删除右部第一个符号和左部相同的即
A->Aab就是要删除这个右部的第一个A
然后在所有A相关式子后面补一個新的符号 M
然后再补充一个式子: M->ε 就得到自己需要的符合的LL(1)文法啦, 大家可以用博主推荐的判断方法进行判断~~