河南工业大学实验报告课 程 编译原理 实验名称 实验二 LL(1)分析法 实验目的 1.掌握LL(1)分析法的基本原理; 2.掌握LL(1)分析表的构造方法; 3.掌握LL(1)驱动程序的构造方法一. 实验内容及要求根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析本次实验的目的主要是加深对预测分析LL(1)分析法的理解 对下列文法,用LL(1)分析法对任意输入的符号串进行分析:(1)E->TG(2)G->+TG(3)G->ε(4)T->FS(5)S->*FS(6)S->ε(7)F->(E)(8)F->i 程序输入一以#结束的符号串(包括+*()i#),如:i+i*i#输出过程如下:步骤分析栈剩余输入串所用产生式1Ei+i*i#E->TG............二. 实验过程及结果代码如下:#include#include "edge.h"using namespace std;edge::edge(){ cin>>left>>right; rlen=right.length(); if(NODE.find(left)>NODE.length()) NODE+=left;}string edge::getlf(){ return left;}string edge::getrg(){ return right;}string edge::getfirst(){ return first;}string edge::getfollow(){ return follow;}string edge::getselect(){ return select;}string edge::getro(){ string str; str+=right[0]; return str;}int edge::getrlen(){ return right.length();}void edge::newfirst(string w){ int i; for(i=0;ifirst.length()) first+=w[i];}void edge::newfollow(string w){ int i; for(i=0;ifollow.length()&&w[i]!='@') follow+=w[i];}void edge::newselect(string w){ int i; for(i=0;iselect.length()&&w[i]!='@') select+=w[i];}void edge::delfirst(){ int i=first.find('@'); first.erase(i,1);}int SUM;string NODE,ENODE;//计算firstvoid first(edge ni,edge *n,int x){ int i,j; for(j=0;j-1) //是非终结符 if(in[j].getfirst().length()) return; } }}//输出集合void out(string p){ int i; if(p.length()==0) return; cout<<"{"; for(i=0;i-1) { cout<<"->"<-1) { cout<<"->"<9) outfu(8," "); else outfu(9," "); cout<-1) { if(ch==a) { fenxi.erase(fenxi.length()-1,1); chuan.erase(0,1); cout<<"'"<