資源簡介
詞法分析器:1) 定義目標語言的可用符號表和構詞規則;
2) 依次讀入源程序符號,對源程序進行單詞切分和識別,直到源程序結束;
3) 對正確的單詞,按照它的種別以的形式保存在符號表中;
4) 對不正確的單詞,做出錯誤處理。
算符優先算法:
若輸入文法:
E->E+T | T
T->T*F | F
F-> (E) | i
根據算符優先分析法,將賦值語句進行語法語義分析,翻譯成等價的一組基本操作,每一基本操作用四元式表示

代碼片段和文件信息
#include?
#include?
#include?
//#include
using?namespace?std;
string?KEYWORD[15]=?{“if““else““void““return““while““then““for““do“?????//關鍵字
?????????????????????“int““char““double““float““case““cin““cout“
????????????????????};
char?SEPARATER[8]=?{‘;‘‘‘‘{‘‘}‘‘[‘‘]‘‘(‘‘)‘};???//界符
char?OPERATOR[8]=?{‘+‘‘-‘‘*‘‘/‘‘>‘‘<‘‘=‘‘!‘};????//運算符
char?FILTER[4]=?{‘?‘‘\t‘‘\r‘‘\n‘};???????????????????//過濾符(空格?水平制表?回車?換行)
const?int?IDENTIFIER=200;?????????//標識符值
const?int?CONSTANT=201;???????????//常數值
const?int?FILTER_VALUE=202;???????//過濾字符值
//判斷是否為關鍵字
bool?IsKeyword(string?word)
{
????for(int?i=0;?i<15;?i++)
????{
????????if(KEYWORD[i]==word)
????????{
????????????return?true;
????????}
????}
????return?false;
}
//判斷是否為界符
bool?IsSeparater(char?ch)
{
????for(int?i=0;?i<8;?i++)
????{
????????if(SEPARATER[i]==ch)
????????{
????????????return?true;
????????}
????}
????return?false;
}
//判斷是否為運算符
bool?IsOperator(char?ch)
{
????for(int?i=0;?i<8;?i++)
????{
????????if(OPERATOR[i]==ch)
????????{
????????????return?true;
????????}
????}
????return?false;
}
//判斷是否為過濾符
bool?IsFilter(char?ch)
{
????for(int?i=0;?i<4;?i++)
????{
????????if(FILTER[i]==ch)
????????{
????????????return?true;
????????}
????}
????return?false;
}
//判斷是否為大寫字母
bool?IsUpLetter(char?ch)
{
????if(ch>=‘A‘?&&?ch<=‘Z‘)?return?true;
????return?false;
}
//判斷是否為小寫字母
bool?IsLowLetter(char?ch)
{
????if(ch>=‘a‘?&&?ch<=‘z‘)?return?true;
????return?false;
}
//判斷是否為數字
bool?IsDigit(char?ch)
{
????if(ch>=‘0‘?&&?ch<=‘9‘)?return?true;
????return?false;
}
//返回每個字的值
template?
int?value(T?*aint?nT?str)
{
????for(int?i=0;?i<=n;?i++)
????{
????????if(a[i]==str)?return?i+1;
????}
????return?-1;
}
//詞法分析
void?analyse(FILE?*?fpin)
{
????//ofstream?f(“詞法分析的結果.txt“);
????char?ch=‘?‘;
????string?arr=““;
????while((ch=fgetc(fpin))!=EOF)//當不為結束字符時
????{
????????arr=““;
????????if(IsFilter(ch))?{}?????????????//判斷是否為過濾符
????????else?if(IsLowLetter(ch))????????//判斷是否為關鍵字
????????{
????????????while(IsLowLetter(ch))
????????????{
????????????????arr?+=?ch;
????????????????ch=fgetc(fpin);
????????????}
????????????fseek(fpin-1LSEEK_CUR);
????????????if(IsKeyword(arr))
????????????{
????????????????cout<<“1“<<“?“<<‘\t‘< ????????????}
????????????else
????????????{
????????????????cout<<“2“<<“?“<<‘\t‘< ????????????}
????????}
????????else?if(IsDigit(ch))????????????//判斷是否為數字
????????{
????????????while(IsDigit(ch)||(ch==‘.‘&&IsDigit(fgetc(fpin))))
????????????{
????????????????arr?+=?ch;
????????????????ch=fgetc(fpin);
????????????}
????????????fseek(fpin-1LSEEK_CUR);
????????????cout<<“3“<<“?“<<‘\t‘< ????????}
????????else?if(IsUpLetter(ch)||IsLowLetter(ch)||ch==‘_‘)
????????{
????????????while(IsUpLetter(ch)||IsLowLetter(ch)||ch==‘_‘||IsDigit(ch))
????????????{
?????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????988337??2018-05-27?10:19??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\bin\Debug\詞法分析器?.exe
?????文件???????4975??2018-05-27?17:12??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\main.cpp
?????文件??????40555??2018-05-27?10:19??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\obj\Debug\main.o
?????文件???????1116??2018-05-26?20:52??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\詞法分析器?.cbp
?????文件????????147??2018-05-27?10:21??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\詞法分析器?.depend
?????文件????????321??2018-05-27?17:12??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\詞法分析器?.layout
?????文件????????152??2018-05-27?10:14??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\詞法分析器.depend
?????文件????????323??2018-05-27?10:19??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\詞法分析器.layout
?????文件?????976279??2018-05-28?13:18??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\bin\Debug\詞法分析器.exe
?????文件?????976309??2018-05-27?10:56??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\bin\Debug\語法分析器.exe
?????文件???????7974??2018-05-28?13:25??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\main.cpp
?????文件??????22083??2018-05-28?13:18??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\obj\Debug\main.o
?????文件???????1130??2018-05-26?20:37??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\語法分析器.cbp
?????文件????????147??2018-05-27?11:08??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\語法分析器.depend
?????文件????????324??2018-05-28?13:25??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\語法分析器.layout
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\bin\Debug
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\obj\Debug
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\bin\Debug
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\obj\Debug
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\bin
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器\obj
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\bin
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器\obj
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\詞法分析器
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼\語法分析器
?????目錄??????????0??2019-01-07?21:36??編譯原理--詞法分析器+語法分析器?源代碼
-----------?---------??----------?-----??----
??????????????3020172????????????????????26
- 上一篇:機票預訂系統需求分析報告
- 下一篇:Axure谷歌chrome瀏覽器插件0.6.3版
評論
共有 條評論