資源簡介
哈工大威海編譯原理實驗報告和源代碼:
實驗一 詞法分析
實驗二 語法分析
實驗三 語義分析和中間代碼生成
附有代碼和實驗報告~僅供參考~
代碼片段和文件信息
#include??
#include??
#include???
#include????
using?namespace?std;??
#define??MAX?50????//長度最大值?50?????????
char?ch?=‘?‘;??????//??空格
string?keyword[50]={“else““if““int“};//關鍵字為else,if,int
????????????
int?alphabet(char?c)?{??//字母的處理過程????
????if(((c<=‘z‘)&&(c>=‘a‘))||((c<=‘Z‘)&&(c>=‘A‘)))?
return?1;?
????else?
return?0;
}
int?KeyWord(string?c){??????//關鍵字的處理過程??
???int?i;
???for(i=0;i ??????if(keyword[i].compare(c)==0)
??return?1;??
???????}?
????return?0;
}
int?num(char?c){????????//數字的處理過程
?????if(c>=‘0‘&&c<=‘9‘)?
?return?1;?
?????else?
?return?0;
}
void?operation(FILE?*fpin){//運算符處理過程
ofstream?out(“token.txt“ios::out);?
????string?arr=““;?????????????????????????
?while((ch=fgetc(fpin))!=EOF)?{?????????????
????????????arr=““;?????????????????????????
?????????if(ch==‘?‘||ch==‘\t‘||ch==‘\n‘){}???//空格,縮進,換行,均不做操作???
?????????else?if(alphabet(ch)){????????????????????
???????????????while(alphabet(ch)||num(ch))?{??????
???????????????????????arr=arr+ch;???????????
????????????????????ch=fgetc(fpin);??????????
???????????????????????????????}
??????????fseek(fpin-1LSEEK_CUR);????????//循環結束后,重定位流指針從當前位置左移一位。開始判斷新的輸入是什么類型?
??????if?(KeyWord(arr)){out< ???????else??out< ???????????????}
?else?if(num(ch)){?????????????//若是數字
??????????????????while(num(ch)||ch==‘.‘&&num(fgetc(fpin))||fgetc(fpin)==‘e‘||ch==‘e‘)
??{???
??if(ch==‘.‘)????
??fseek(fpin-1LSEEK_CUR);//指針左移
??arr=arr+ch;
?if(ch==‘e‘)?????
??{??
??ch=fgetc(fpin);?//?新讀入
?
??if(?ch==‘+‘)?arr+=‘+‘;
??else?{arr+=‘-‘?fseek(fpin-1LSEEK_CUR);};//指針左移 ??
??}
????????????????????????ch=fgetc(fpin);?
??????????????????}?? ???
??????????????????fseek(fpin-3LSEEK_CUR);??
??????????????????out< ?????????????}
???????else?switch(ch){??????????
???????????????case‘+‘:
???????????????case‘-‘?:
???????????????case‘*‘?:
???????????????case‘=‘?:
???????????????case‘/‘?:out< ???????????????case‘(‘?:
???????????????case‘)‘?:
???????????????case‘[‘?:
???????????????case‘]‘?:? ???
???????????????case‘;‘?:
???case‘#‘?:
???????????????case‘.‘?:
???????????????case‘‘?:
???????????????case‘{‘?:
???????????????case‘}‘?:out< ???
case?‘“‘:{
????string?string1=““;
??do?
???{
???string1+=ch;
??ch=fgetc(fpin);
??}?while?(ch!=‘“‘);//循環得到?““
??string1+=ch;??????????
out< ???}break;?
???case‘:‘?:{ch=fgetc(fpin);
???if(ch==‘=‘)?out<<“:=“<<“????\t4“<<“\t運算符“<
else?{out<<“=“<<“????\t4“<<“\t運算符“< ???
?fseek(fpin-1LSEEK_CUR);}?//當指針回退一個字符
????????????????????????}break;?
????
??case
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4836??2014-05-19?20:16??編譯原理\實驗1?詞法分析\CiFa.cpp
?????文件???????3377??2014-05-19?21:38??編譯原理\實驗1?詞法分析\CiFa.dsp
?????文件????????516??2014-05-19?21:38??編譯原理\實驗1?詞法分析\CiFa.dsw
?????文件??????41984??2014-05-19?21:38??編譯原理\實驗1?詞法分析\CiFa.ncb
?????文件??????48640??2014-05-19?21:38??編譯原理\實驗1?詞法分析\CiFa.opt
?????文件???????1176??2014-05-19?21:38??編譯原理\實驗1?詞法分析\CiFa.plg
?????文件?????????72??2014-05-19?12:29??編譯原理\實驗1?詞法分析\test.txt
?????文件????????638??2014-05-19?21:38??編譯原理\實驗1?詞法分析\token.txt
?????文件??????11258??2014-05-19?20:49??編譯原理\實驗2?語法分析\GT.CPP
?????文件???????3353??2014-05-19?21:35??編譯原理\實驗2?語法分析\GT.DSP
?????文件????????512??2014-05-19?21:38??編譯原理\實驗2?語法分析\GT.DSW
?????文件??????41984??2014-05-19?21:38??編譯原理\實驗2?語法分析\GT.ncb
?????文件??????48640??2014-05-19?21:38??編譯原理\實驗2?語法分析\GT.OPT
?????文件???????1160??2014-05-19?21:35??編譯原理\實驗2?語法分析\GT.PLG
?????文件?????????32??2014-05-19?20:34??編譯原理\實驗2?語法分析\MP.txt
?????文件?????????22??2014-05-19?21:35??編譯原理\實驗2?語法分析\PLMP.txt
?????文件?????????32??2014-05-19?20:29??編譯原理\實驗2?語法分析\PM.txt
?????文件?????????60??2014-05-19?21:35??編譯原理\實驗2?語法分析\RP.txt
?????文件?????????22??2014-05-19?20:49??編譯原理\實驗2?語法分析\SP.txt
?????文件??????24915??2014-05-19?21:20??編譯原理\實驗3?語義分析和中間代碼生成\GG.CPP
?????文件???????3353??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\GG.DSP
?????文件????????512??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\GG.DSW
?????文件??????50176??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\GG.ncb
?????文件??????48640??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\GG.OPT
?????文件???????1327??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\GG.PLG
?????文件????????138??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\string.txt
?????文件?????????96??2014-05-19?21:30??編譯原理\實驗3?語義分析和中間代碼生成\test.txt
?????文件????????253??2014-05-19?21:37??編譯原理\實驗3?語義分析和中間代碼生成\token.txt
?????文件?????215603??2014-05-27?23:03??編譯原理\實驗報告.doc
?????目錄??????????0??2014-05-19?21:38??編譯原理\實驗1?詞法分析
............此處省略6個文件信息
評論
共有 條評論