欢迎来到天天文库
浏览记录
ID:49689603
大小:222.24 KB
页数:43页
时间:2020-03-03
《东北大学编译原理实验3.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、编译原理程序设计实验报告——四元式生成班级:计算机1507班姓名:罗艺博学号:20154377一、实验目标:利用上次实验所编写的语法分析器,完成算术表达式四元式翻译器的设计。二、实验内容:1.概要设计:2.流程图主程序Z子程序E子程序T子程序F3.关键函数//主程序intParserPlus(){is=0;//初始化flag=0;qt=qToken.front();//Next(w)qreal=qTreal.front();SubE();if(qt==50&&flag==0){cout<<"语法正确!"<2、cout<3、4、qt==61){if5、(qt==60)//GEQ(+){Nextword();SubT();charc='+';GEQ(c);}elseif(qt==61)//GEQ(-){Nextword();SubT();charc='-';GEQ(c);}}return0;}//子程序TintSubT(){SubF();while(qt==706、7、qt==71){if(qt==70)//GEQ(*){Nextword();SubF();charc='*';GEQ(c);}elseif(qt==71)//GEQ(/){Nextword();SubF(8、);charc='/';GEQ(c);}}return0;}//子程序FintSubF(){qtw=qt/10;if(qtw==19、10、qtw==2)//为i的情况下{sem.push(qt);qsem.push(qreal);Nextword();}elseif(qtw==3)//为(的情况下{Nextword();//cout<11、ndl;if(qtw==4)//若为){Nextword();}else{flag=3;cout<<"语法错误(err3)!"<12、ngel2=qsem.top();qsem.pop();sem.pop();stringel1=qsem.top();qsem.pop();sem.pop();inttt=Newtemp();sem.push(10);stringtreal="t";treal+=to_string(tt);qsem.push(treal);Send(c,el1,el2,treal);}//将四元式作为类对象储存voidSend(chars,stringe1,stringe2,stringt){myQT.push_back(QT(s,13、e1,e2,t));}源程序代码:(加入注释)intParserPlus()//主程序{is=0;//初始化flag=0;qt=qToken.front();//Next(w)qreal=qTreal.front();SubE();if(qt==50&&flag==0){cout<<"语法正确!"<14、ag;}//cout<<"myQT.size="<15、16、qt==61){if(qt==60)//GEQ(+){
2、cout<3、4、qt==61){if5、(qt==60)//GEQ(+){Nextword();SubT();charc='+';GEQ(c);}elseif(qt==61)//GEQ(-){Nextword();SubT();charc='-';GEQ(c);}}return0;}//子程序TintSubT(){SubF();while(qt==706、7、qt==71){if(qt==70)//GEQ(*){Nextword();SubF();charc='*';GEQ(c);}elseif(qt==71)//GEQ(/){Nextword();SubF(8、);charc='/';GEQ(c);}}return0;}//子程序FintSubF(){qtw=qt/10;if(qtw==19、10、qtw==2)//为i的情况下{sem.push(qt);qsem.push(qreal);Nextword();}elseif(qtw==3)//为(的情况下{Nextword();//cout<11、ndl;if(qtw==4)//若为){Nextword();}else{flag=3;cout<<"语法错误(err3)!"<12、ngel2=qsem.top();qsem.pop();sem.pop();stringel1=qsem.top();qsem.pop();sem.pop();inttt=Newtemp();sem.push(10);stringtreal="t";treal+=to_string(tt);qsem.push(treal);Send(c,el1,el2,treal);}//将四元式作为类对象储存voidSend(chars,stringe1,stringe2,stringt){myQT.push_back(QT(s,13、e1,e2,t));}源程序代码:(加入注释)intParserPlus()//主程序{is=0;//初始化flag=0;qt=qToken.front();//Next(w)qreal=qTreal.front();SubE();if(qt==50&&flag==0){cout<<"语法正确!"<14、ag;}//cout<<"myQT.size="<15、16、qt==61){if(qt==60)//GEQ(+){
3、
4、qt==61){if
5、(qt==60)//GEQ(+){Nextword();SubT();charc='+';GEQ(c);}elseif(qt==61)//GEQ(-){Nextword();SubT();charc='-';GEQ(c);}}return0;}//子程序TintSubT(){SubF();while(qt==70
6、
7、qt==71){if(qt==70)//GEQ(*){Nextword();SubF();charc='*';GEQ(c);}elseif(qt==71)//GEQ(/){Nextword();SubF(
8、);charc='/';GEQ(c);}}return0;}//子程序FintSubF(){qtw=qt/10;if(qtw==1
9、
10、qtw==2)//为i的情况下{sem.push(qt);qsem.push(qreal);Nextword();}elseif(qtw==3)//为(的情况下{Nextword();//cout<11、ndl;if(qtw==4)//若为){Nextword();}else{flag=3;cout<<"语法错误(err3)!"<12、ngel2=qsem.top();qsem.pop();sem.pop();stringel1=qsem.top();qsem.pop();sem.pop();inttt=Newtemp();sem.push(10);stringtreal="t";treal+=to_string(tt);qsem.push(treal);Send(c,el1,el2,treal);}//将四元式作为类对象储存voidSend(chars,stringe1,stringe2,stringt){myQT.push_back(QT(s,13、e1,e2,t));}源程序代码:(加入注释)intParserPlus()//主程序{is=0;//初始化flag=0;qt=qToken.front();//Next(w)qreal=qTreal.front();SubE();if(qt==50&&flag==0){cout<<"语法正确!"<14、ag;}//cout<<"myQT.size="<15、16、qt==61){if(qt==60)//GEQ(+){
11、ndl;if(qtw==4)//若为){Nextword();}else{flag=3;cout<<"语法错误(err3)!"<12、ngel2=qsem.top();qsem.pop();sem.pop();stringel1=qsem.top();qsem.pop();sem.pop();inttt=Newtemp();sem.push(10);stringtreal="t";treal+=to_string(tt);qsem.push(treal);Send(c,el1,el2,treal);}//将四元式作为类对象储存voidSend(chars,stringe1,stringe2,stringt){myQT.push_back(QT(s,13、e1,e2,t));}源程序代码:(加入注释)intParserPlus()//主程序{is=0;//初始化flag=0;qt=qToken.front();//Next(w)qreal=qTreal.front();SubE();if(qt==50&&flag==0){cout<<"语法正确!"<14、ag;}//cout<<"myQT.size="<15、16、qt==61){if(qt==60)//GEQ(+){
12、ngel2=qsem.top();qsem.pop();sem.pop();stringel1=qsem.top();qsem.pop();sem.pop();inttt=Newtemp();sem.push(10);stringtreal="t";treal+=to_string(tt);qsem.push(treal);Send(c,el1,el2,treal);}//将四元式作为类对象储存voidSend(chars,stringe1,stringe2,stringt){myQT.push_back(QT(s,
13、e1,e2,t));}源程序代码:(加入注释)intParserPlus()//主程序{is=0;//初始化flag=0;qt=qToken.front();//Next(w)qreal=qTreal.front();SubE();if(qt==50&&flag==0){cout<<"语法正确!"<14、ag;}//cout<<"myQT.size="<15、16、qt==61){if(qt==60)//GEQ(+){
14、ag;}//cout<<"myQT.size="<15、16、qt==61){if(qt==60)//GEQ(+){
15、
16、qt==61){if(qt==60)//GEQ(+){
此文档下载收益归作者所有