-
大小: 1.05MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2024-01-07
- 語(yǔ)言: 其他
- 標(biāo)簽: for循環(huán)??LR??方法??三元式??
資源簡(jiǎn)介
編譯原理課程設(shè)計(jì)
for循環(huán)
用LR法實(shí)現(xiàn)
中間代碼用三元式表示

代碼片段和文件信息
#include“init.h“
int?main(){
input();//輸入
scanner();//掃描輸入串進(jìn)行詞法分析,詞法分析存于tokenList中,有單詞和類型碼
grammar();//語(yǔ)法分析和語(yǔ)義分析,二者穿插進(jìn)行
outfile1.close();//關(guān)閉打開的文件
outfile2.close();//關(guān)閉打開的文件
outfile3.close();//關(guān)閉打開的文件
return?0;
}
void?input(){//輸入函數(shù),以#控制
char?c;
cout<<“******************BEGIN*******************“< cout<<“*????????????for循環(huán)語(yǔ)句的分析???????????*“< cout<<“*????????????????????????????????????????*“< cout<<“*包括的內(nèi)容如下:?????????????????????????*“< cout<<“*1.詞法分析??????????????????????????????*“< cout<<“*2.語(yǔ)法分析??????????????????????????????*“< cout<<“*3.語(yǔ)義分析??????????????????????????????*“< cout<<“*????????????????????????????????????????*“< cout<<“*****************END**********************“< cout< cout<<“請(qǐng)輸入for循環(huán)語(yǔ)句并以#結(jié)束:“< do{ ????
c=cin.get();
s+=c;
}while(c!=‘#‘);//不以#結(jié)尾則重新輸入
}?
void?scanner(){
int?t;
while(num switch(sort(s[num])){
case?0:
error();
num++;
break;
case?1:?
t=recog_id(s[num]);
if(t==-1)error();
break;
case?2:t=recog_dig(s[num]);
if(t==-1)error();
break;
case?3:t=recog_delimeter(s[num]);
if(t==-1)error();
break;
case?4:t=recog_oper(s[num]);
if(t==-1)error();
break;
case?5:
num++;
break;
}
}
write_token();
}
int?sort(char?ch){//排序函數(shù)
if(isalpha(ch)?||?ch==‘_‘)return?1;//標(biāo)識(shí)符以字母或下劃線開始
else?if(isdigit(ch))return?2;//數(shù)字
else?if(isin(chdelimeter12))return?3;//若是‘,則是字符常數(shù)
else?if(isin(choper10))return?4;//若是其他符號(hào)
else?if(ch==‘?‘?||?ch==9)return?5;//9表示水平制表符
else?return?0;
}
int?recog_id(char?ch){//ch為給定字符串的第一個(gè)字符
char?state=‘0‘;//出示狀態(tài)為0
while(state!=‘2‘){
switch(state){
case?‘0‘://若當(dāng)前是狀態(tài)0,讀入一個(gè)字母或下劃線,轉(zhuǎn)向狀態(tài)1
if(isalpha(ch)?||?ch==‘_‘){
state=‘1‘;
tokenList[count].word.push_back(ch);
tokenList[count].token=0;
}
else?return?-1;
break;
case?‘1‘://若當(dāng)前是狀態(tài)1,讀入字母或數(shù)字或下劃線,仍為狀態(tài)1
if(isalpha(ch)?||?isdigit(ch)?||?ch==‘_‘){
state=‘1‘;
tokenList[count].word.push_back(ch);
}
else{
state=‘2‘;
tokenList[count].token=2;
num--;//退回當(dāng)前讀入的字符
}
}
ch=s[++num];
}
string?str;//截取字符串,并判斷是否是關(guān)鍵字
for(int?i=0;i str+=tokenList[count].word[i];
}
if(isin(strkeyword33))tokenList[count].token=1;
count++;
return?0;
}
int?recog_dig(char?ch){//識(shí)別常數(shù)
char?state=‘0‘;//初始狀態(tài)為0
while(state!=‘7‘){
switch(state){
case?‘0‘:
if(isdigit(ch)){
state=‘1‘;
tokenList[count].word.push_back(ch);
tokenList[count].token=0;
}
else?return?-1;
break;//讀入一個(gè)數(shù)字
case?‘1‘:
if(isdigit(ch)){
state=‘1‘;
tokenList[count].word.push_back(ch);
}//仍然讀入數(shù)字
else?if(ch==‘.‘){
state=‘2‘;
tokenList[count].word.push_back(ch);
}//讀入小數(shù)點(diǎn),識(shí)別實(shí)數(shù)
else?if(ch==‘e‘?||?ch==‘E‘){
state=‘4‘;
tokenList[count].word.push_back(ch);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????630821??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\for.exe
?????文件?????853372??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\for.ilk
?????文件????2568072??2009-06-18?18:53??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\for.pch
?????文件????1188864??2009-06-18?19:08??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\for.pdb
?????文件?????434801??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\main.obj
?????文件??????82944??2009-06-18?19:41??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\vc60.idb
?????文件?????135168??2009-06-18?19:08??編譯原理課程設(shè)計(jì)for循環(huán)\Debug\vc60.pdb
?????文件???????4308??2009-06-18?19:39??編譯原理課程設(shè)計(jì)for循環(huán)\for.dsp
?????文件????????529??2009-06-18?18:52??編譯原理課程設(shè)計(jì)for循環(huán)\for.dsw
?????文件??????41984??2009-06-18?19:42??編譯原理課程設(shè)計(jì)for循環(huán)\for.ncb
?????文件??????53760??2009-06-18?19:42??編譯原理課程設(shè)計(jì)for循環(huán)\for.opt
?????文件????????871??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\for.plg
?????文件???????4733??2009-06-18?18:53??編譯原理課程設(shè)計(jì)for循環(huán)\init.h
?????文件??????20628??2009-06-21?19:44??編譯原理課程設(shè)計(jì)for循環(huán)\main.cpp
?????文件????????219??2009-06-18?01:03??編譯原理課程設(shè)計(jì)for循環(huán)\產(chǎn)生式.txt
?????文件????????350??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\詞法分析結(jié)果.txt
?????文件????????186??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\語(yǔ)義分析結(jié)果.txt
?????文件???????1694??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\賦值語(yǔ)句分析過(guò)程.txt
?????文件????????524??2009-06-18?19:40??編譯原理課程設(shè)計(jì)for循環(huán)\過(guò)程分析.txt
?????目錄??????????0??2009-06-19?12:11??編譯原理課程設(shè)計(jì)for循環(huán)\Debug
?????目錄??????????0??2009-06-22?02:04??編譯原理課程設(shè)計(jì)for循環(huán)
-----------?---------??----------?-----??----
??????????????6023828????????????????????21
- 上一篇:udp丟包率統(tǒng)計(jì)
- 下一篇:ls -R 遞歸顯示
評(píng)論
共有 條評(píng)論