最近我遇到了先找到并按照
的问题S->cAd
A->Ab|a
在这里,我对A的第一个感到困惑 哪一个是正确的{a},{empty,a},因为在A的制作中有左递归。 我很困惑是否在A的第一个中包含空字符串 任何帮助,将不胜感激。 -------------编辑---------------
首先是什么,并遵循这一点,这是我见过的令人困惑的语法
S->SA|A
A->a
我需要证明这个语法不是在LL(1)中使用解析表但是无法做到,因为我没有在单个单元格中获得2个条目。
答案 0 :(得分:1)
首先,您需要删除导致
的左递归S -> cAd
A -> aA'
A' -> bA' | epsilon
然后,你可以计算
FIRST(A) = a // as a is the only terminal nderived first from A.
<强> EDIT :-
强>
关于第二个问题,
S -> AS'
S' -> AS' | epsilon
A -> a
FIRST(A) = a
FIRST(S) = a
FIRST(S') = {a,epsilon}.
在计算FIRST()
和FOLLOW()
之前删除左递归的想法可以学习here。