编译原理实验(二)—— 递归子程序分析器的设计与实现

本文最后更新于:2019年11月15日 晚上

概览:基于《编译原理(第三版)》(清华大学出版社,王生原版)的递归子程序分析器程序。

实验内容

本分析程序所分析的文法如下:

1
2
3
4
5
G[E]:
E→eBaA
A→a|bAcB
B→dEd|aC
C→e|dC

针对上述文法编写一递归子程序分析程序,该程序的输入是任意符号串,输出是本次输入的符号串是否是该文法的句子的结论。
测试样例为:

1
2
3
eadeaa#
edeaebd#
edeaeaadabacae#

分析说明

分析说明:
针对上述文法求得各个非终结符的First集Follow集以及各个产生式的Select集

1
2
3
4
5
6
7
8
9
10
FIRST(E) = {e}、FIRST(A) = {a,b}、FIRST(B) = {a,d}、FIRST(C) = {d,e}
FOLLOW(E) = {#,d} FOLLOE(A) = {#,c,d}
FOLLOW(B) = {#,a,c,d} FOLLOW(C) = {#,a,c,d}
SELECT(E->eBaA) = {e}
SELECT(A->a) = {a}
SELECT(A->bAcB) = {b}
SELECT(B->dEd) = {d}
SELECT(B->Ac) = {a}
SELECT(C->e) = {e}
SELECT(C->dC) = {d}