資源簡介
設計一個語法制導翻譯器,將WHILE語句翻譯成四元式。要求:先確定一個定義WHILE語句的文法,為其設計一個語法分析程序,為每條產生式配備一個語義子程序,按照一遍掃描的語法制導翻譯方法,實現翻譯程序。對用戶輸入的任意一個正確的WHILE語句,程序將其轉換成四元式輸出

代碼片段和文件信息
#include
#include?
#include
#include?
#include
#include
#include?“conio.h“
using?namespace?std;
ofstream?coutf(“cifa.txt“ios::out);//結果輸出至文件cifa.txt
ofstream?couty(“yufa.txt“ios::out);//結果輸出至文件yufa.txt
ofstream?couts(“obj.txt“ios::out);//結果輸出至文件obj.txt
char?shuru[100]tmp;
char?sr[100];
char?b[10]op[10]rop[10];
char?a[10];
int?q=0;
struct?Table{
????char?act_0[10];
????int?act_1[10];
????int?go[4];
}action[18];
struct??sys{
char?f;
char?op1;
char?op2;
char?result;
}equ[10];
void?Init(){
????/*---------------???????ACTION??????-----------------------*/
????action[0].act_0[0]=‘s‘;???????action[0].act_1[0]=2;
????action[1].act_0[9]=‘Z‘;??????
????action[2].act_0[1]=‘s‘;???????action[2].act_1[1]=3;
????action[3].act_0[5]=‘s‘;???????action[3].act_1[5]=5;
????action[4].act_0[2]=‘s‘;???????action[4].act_1[2]=6;
????action[5].act_0[2]=‘r‘;???????action[5].act_1[2]=7;
????action[5].act_0[7]=‘s‘;???????action[5].act_1[7]=7;
????action[6].act_0[3]=‘s‘;???????action[6].act_1[3]=9;
????action[7].act_0[5]=‘s‘;???????action[7].act_1[5]=8;
????action[8].act_0[2]=‘r‘;???????action[8].act_1[2]=6;?
????action[9].act_0[5]=‘s‘;???????action[9].act_1[5]=14;
????action[10].act_0[4]=‘r‘;??????action[10].act_1[4]=3;
????action[10].act_0[5]=‘s‘;??????action[10].act_1[5]=14;
????action[11].act_0[4]=‘s‘;??????action[11].act_1[4]=12;
action[12].act_0[9]=‘r‘;??????action[12].act_1[9]=1;
????action[13].act_0[4]=‘r‘;??????action[13].act_1[4]=2;
????action[14].act_0[8]=‘s‘;??????action[14].act_1[8]=17;
????action[14].act_0[6]=‘s‘;??????action[14].act_1[6]=15;
????action[15].act_0[5]=‘s‘;??????action[15].act_1[5]=14;
action[16].act_0[4]=‘r‘;?????action[16].act_1[4]=4;
action[16].act_0[5]=‘r‘;?????action[16].act_1[5]=4;
action[17].act_0[4]=‘r‘;?????action[17].act_1[4]=5;
action[17].act_0[5]=‘r‘;?????action[17].act_1[5]=5;
????/*--------------------?????GOTO??????-------------------------*/
????action[0].go[0]=1;
????action[3].go[2]=4;;
????action[9].go[1]=11;
????action[9].go[3]=10;
????action[10].go[1]=13;
????action[10].go[3]=10;
????action[15].go[3]=16;
????
}
void?cifa()
{
int?i=0j=0k=0m=0;
????for(q=1;q ????{
???? tmp=sr[q];
??????????if(tmp>=‘0‘&&tmp<=‘9‘||tmp>=‘a‘&&tmp<=‘z‘||tmp>=‘A‘&&tmp<=‘Z‘)
???????a[i++]=tmp;
?????else?if(tmp==‘+‘||tmp==‘-‘||tmp==‘/‘||tmp==‘*‘)
?????????op[j++]=tmp;
??????else?if(tmp==‘>‘||tmp==‘<‘)
?????????????????rop[k++]=tmp;
????????????else?if(tmp==‘(‘||tmp==‘)‘||tmp==‘{‘||tmp==‘}‘||tmp==‘;‘)
?????????????????????b[m++]=tmp;??????????????????
????}
????cout<<“詞法分析完成結果輸出到文件cifa.txt“< ????coutf<<“詞法分析結果:“< ????coutf<<“關鍵字:“<<“w“< ????coutf<<“變量名:“;
????????for(i=0;i ????{?
????????coutf<????}
?????coutf< ?????coutf<<“表達式運算符:“;
????for(i=0;i ????{?
????????coutf< ????}
????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9925??2009-06-21?15:22??黃金\文檔\WHILE循環語句的翻譯程序設計(LR方法、輸出四元式).txt
?????文件?????520192??2009-06-23?10:19??黃金\文檔\課設報告.doc
?????目錄??????????0??2009-06-21?22:35??黃金\文檔
?????文件???????9925??2009-06-21?22:33??黃金\源程序及輸出結果\while(LR).cpp
?????文件?????????17??2009-06-21?22:34??黃金\源程序及輸出結果\input.txt
?????文件?????????59??2009-06-21?22:34??黃金\源程序及輸出結果\obj.txt
?????文件???????1093??2009-06-21?22:34??黃金\源程序及輸出結果\yufa.txt
?????文件????????101??2009-06-21?22:34??黃金\源程序及輸出結果\cifa.txt
?????目錄??????????0??2009-06-21?22:35??黃金\源程序及輸出結果
?????目錄??????????0??2009-06-21?22:30??黃金
-----------?---------??----------?-----??----
???????????????541312????????????????????10
- 上一篇:白盒測試——基本路徑測試法
- 下一篇:基于LabVIEW傳感器實驗平臺的開發
評論
共有 條評論