这个 LL(1) parse table 是正确的吗?
This LL(1) parse table is correct?
给出的语法:
S -> AB
A -> aA | b
B -> CA
C -> cC | ɛ
它的LL(1)解析table是这个吗?
不,由于这些计算,它并不完全正确:
第一个(S)=第一个(A)= {a,b}
第一(A)= {a,b}
第一(B)=第一(C)= {c,ε}
第一(C)= {c,ε}
考虑到每个非终结符号的跟随是紧随其后的终结符号:
Follow(S) ={a,b}
(如果 SAB --> AB 那么 SaAB --> aAB 或 SbB --> bB)
Follow(A) = {a,c}
(如果 AaA-->aA 和 Ab --> b 那么 AaA --> aA 或 Ab --> b)
Follow(B)=Follow(A)={a,c}
(模型制作A-->aB,其中一个终端,且a=ε,则Follow(A)=Follow(B))
Follow(C) = {a,b}
(从 B-->CA,B-->CaA 或 B-->Cb)
因此,您的解析 table 和这些计算的不同之处在于,在非终端 B 行中,a 列和 b 列的值为 NULL。
给出的语法:
S -> AB
A -> aA | b
B -> CA
C -> cC | ɛ
它的LL(1)解析table是这个吗?
不,由于这些计算,它并不完全正确:
第一个(S)=第一个(A)= {a,b}
第一(A)= {a,b}
第一(B)=第一(C)= {c,ε}
第一(C)= {c,ε}
考虑到每个非终结符号的跟随是紧随其后的终结符号:
Follow(S) ={a,b}
(如果 SAB --> AB 那么 SaAB --> aAB 或 SbB --> bB)
Follow(A) = {a,c}
(如果 AaA-->aA 和 Ab --> b 那么 AaA --> aA 或 Ab --> b)
Follow(B)=Follow(A)={a,c}
(模型制作A-->aB,其中一个终端,且a=ε,则Follow(A)=Follow(B))
Follow(C) = {a,b}
(从 B-->CA,B-->CaA 或 B-->Cb)
因此,您的解析 table 和这些计算的不同之处在于,在非终端 B 行中,a 列和 b 列的值为 NULL。