一、实验内容与要求
- 先从键盘读入要分析的文法,由程序自动构造FIRST、FOLLOW 集以及SELECT集合,判断是否为LL (1)文法。
分析文法为G[E]:
(0)E→ TE’
(1)E’→ +TE’
(2)E’→ε
(3)T→ FT’
(4)T’→ *FT’
(5)T’→ε
(6)F→ (E)
(7)F→a
- 若符合LL (1)文法,由程序自动构造LL (1)分析表;
- 由算法判断给定的输入符号串a*(a+a)是否为该文法的句型。
二、实验代码
#include #include #include #include #include #include #include #include #include #include using namespace std; mapgetnum; vectorgetzf; vectorproce(10); vectorfirst(20); vectorfollow(20); int table[100][100]; //预测分析表 int num; int numv;//终结符的数量-1 char j[2]; //读取终结符、非终结符与产生式 void read() { char c; int i=0; int n=0; cout