编译原理 语法分析问题,30分全给了!救人
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:数学作业 时间:2024/07/03 05:07:22
编译原理 语法分析问题,30分全给了!救人
对下面文法G:
S->SaA|bB
A->aB|c
B->Bb|d
1.消除该方法的左递归.
2.计算消除左递归后的方法的每个非终结符的FIRST集和FOLLOW集.
3.判断方法是否为LL(1)方法,若是请构造它的预测分析表.
麻烦把过程写下,
对下面文法G:
S->SaA|bB
A->aB|c
B->Bb|d
1.消除该方法的左递归.
2.计算消除左递归后的方法的每个非终结符的FIRST集和FOLLOW集.
3.判断方法是否为LL(1)方法,若是请构造它的预测分析表.
麻烦把过程写下,
![编译原理 语法分析问题,30分全给了!救人](/uploads/image/z/16921121-41-1.jpg?t=%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86+%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E9%97%AE%E9%A2%98%2C30%E5%88%86%E5%85%A8%E7%BB%99%E4%BA%86%21%E6%95%91%E4%BA%BA)
1.
S->bBS'
S'->aAS'|ε
A->aB|c
B->dB'
B'->bB'|ε
2.
First(S)={b}
First(S')={a,ε}
First(A)={a,c}
First(B)={d}
First(B')={b,ε}
Follow(S)={#}
Follow(S')={a,#}
Follow(A)={a}
Follow(B)={a}
Follow(B')={a}
3.不是LL(1)文法,因为
SELECT(S'->aAS')∩SELECT(S'->ε)={a}∩{a,#} ={a}≠空集
SELECT(A->aB)∩SELECT(A->c)={a}∩{c}=空集
SELECT(B'->bB')∩SELECT(B'->ε)={b}∩{a}=空集
S->bBS'
S'->aAS'|ε
A->aB|c
B->dB'
B'->bB'|ε
2.
First(S)={b}
First(S')={a,ε}
First(A)={a,c}
First(B)={d}
First(B')={b,ε}
Follow(S)={#}
Follow(S')={a,#}
Follow(A)={a}
Follow(B)={a}
Follow(B')={a}
3.不是LL(1)文法,因为
SELECT(S'->aAS')∩SELECT(S'->ε)={a}∩{a,#} ={a}≠空集
SELECT(A->aB)∩SELECT(A->c)={a}∩{c}=空集
SELECT(B'->bB')∩SELECT(B'->ε)={b}∩{a}=空集