資源簡介
c++ 編譯原理 詞法分析 算術表達式 語法分析

代碼片段和文件信息
//:LexicalAnalyzer.cpp
//編譯原理第一階段:詞法分析
//{L}syntacticAnalyzer.h
#include?“syntacticAnalyzer.h“
#include
#include
#include
#include?
#include
using?namespace?std;
#define?PR(arg1?arg2)?\
cout<<“(?“<
vector?vline;//存放未處理的一行行句子
vector?vword;//存放以分組的詞
vector?vnum;//存放整數
vector?vide;//存放標識符
vector?vid;//存放類別
vector?vvalue;//存放屬性
int?id;//類別
class?LAResult
{
public:
int?id;
int?value;
public:
LAResult();
LAResult(int?idd?int?val);
output();
};
LAResult::LAResult(int?idd?int?val)
{
id?=?idd;
value?=?val;
}
LAResult::LAResult()
{
id?=?-1;
value?=?-1;
}
LAResult::output()
{
PR(id?value);
}
//判斷空格
bool?isSpace(char?c)
{
if(c?==?32)
return?true;
return?false;
}
//判斷字符
bool?isLet(char?c)
{
if((c>=65?&&?c<=90)?||(c>=97?&&c<=122))
return?true;
return?false;
}
//判斷數字
bool?isNum(char?c)
{
if(c>=48?&&?c<=57)
return?true;
return?false;
}
//判斷界符和算符
bool?isOpOrSep(char?c)
{
if((c>=40?&&?c<=45)?||?(c==47)?||(c>=59?&&c<=62)?||?(c==123)?||?(c==125))
return?true;
return?false;
}
//返回種別id
int?getId(string?s)
{
//運算符
if(s==“+“)
return?0;
else?if(s==“-“)
return?1;
else?if(s==“*“)
return?2;
else?if(s==“/“)
return?3;
else?if(s==“=“)
return?4;
else?if(s==“==“)
return?5;
else?if(s==“>“)
return?6;
else?if(s==“>=“)
return?7;
else?if(s==“<“)
return?8;
else?if(s==“<=“)
return?9;
//界符
else?if(s==“(“)
return?10;
else?if(s==“)“)
return?11;
else?if(s==“{“)
return?12;
else?if(s==“}“)
return?13;
else?if(s==“;“)
return?14;
else?if(s==““)
return?15;
//關鍵字
else?if(s==“main“)
return?16;
else?if(s==“int“)
return?17;
else?if(s==“char“)
return?18;
else?if(s==“string“)
return?19;
else?if(s==“void“)
return?20;
else?if(s==“while“)
return?21;
else?if(s==“for“)
return?22;
else?if(s==“if“)
return?23;
else?if(s==“else“)
return?24;
else?if(s==“ifstream“)
return?25;
else?if(s==“ofstream“)
return?26;
else?if(s==“cout“)
return?27;
else?if(s==“cin“)
return?28;
else?if(s==“class“)
return?29;
else?if(isNum(s[0]))//整數、只要字符串包含整數,此字符串就是整數串
return?31;
//標識符
return?30;
}
//詞法分析
void?analyzeLexical()
{
string?word;
//判斷并分詞
for(int?i?=?0;?i? {
int?j?=?0;
while(j {
//判斷空格
while(isSpace(vline[i][j]))
{
j++;
}
//判斷字母
if(isLet(vline[i][j]))
{
while(isLet(vline[i][j])||isNum(vline[i][j]))
{
word?+=?vline[i][j];
j++;
}
}
if(word!=““)//如果word為空,則說明word沒存入數據,則不向vector添加數據
{
vword.push_back(word);
word?=?““;
continue;
}
//判斷數字
while(isNum(vline[i][j]))
{
word?+=?vline[i][j];
j++;
}
if(word!=““)//同上
{
vword.push_ba
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-04-17?13:47??編譯器(1+2)\
?????目錄???????????0??2014-04-17?13:47??編譯器(1+2)\Compiler\
?????文件????????4243??2014-03-11?19:08??編譯器(1+2)\Compiler\Compiler.dsp
?????文件?????????524??2014-03-11?19:08??編譯器(1+2)\Compiler\Compiler.dsw
?????文件???????41984??2014-04-17?10:33??編譯器(1+2)\Compiler\Compiler.ncb
?????文件???????48640??2014-04-17?10:33??編譯器(1+2)\Compiler\Compiler.opt
?????目錄???????????0??2014-04-17?13:37??編譯器(1+2)\Compiler\Debug\
?????文件??????626770??2014-04-17?13:37??編譯器(1+2)\Compiler\Debug\LexicalAnalyzer.exe
?????文件?????1110920??2014-04-17?13:37??編譯器(1+2)\Compiler\Debug\LexicalAnalyzer.ilk
?????文件??????413858??2014-04-17?13:19??編譯器(1+2)\Compiler\Debug\LexicalAnalyzer.obj
?????文件??????186920??2014-04-17?10:40??編譯器(1+2)\Compiler\Debug\LexicalAnalyzer.pch
?????文件?????1434624??2014-04-17?13:37??編譯器(1+2)\Compiler\Debug\LexicalAnalyzer.pdb
?????文件??????152956??2014-04-17?13:37??編譯器(1+2)\Compiler\Debug\syntacticAnalyzer.obj
?????文件??????107520??2014-04-17?13:46??編譯器(1+2)\Compiler\Debug\vc60.idb
?????文件??????143360??2014-04-17?13:37??編譯器(1+2)\Compiler\Debug\vc60.pdb
?????文件????????7107??2014-04-17?13:19??編譯器(1+2)\Compiler\LexicalAnalyzer.cpp
?????文件????????3655??2014-04-17?10:38??編譯器(1+2)\Compiler\LexicalAnalyzer.dsp
?????文件?????????538??2014-03-12?19:18??編譯器(1+2)\Compiler\LexicalAnalyzer.dsw
?????文件???????50176??2014-04-17?13:47??編譯器(1+2)\Compiler\LexicalAnalyzer.ncb
?????文件???????48640??2014-04-17?13:47??編譯器(1+2)\Compiler\LexicalAnalyzer.opt
?????文件?????????264??2014-04-17?13:46??編譯器(1+2)\Compiler\LexicalAnalyzer.plg
?????文件????????2445??2014-04-17?13:37??編譯器(1+2)\Compiler\syntacticAnalyzer.cpp
?????文件??????????81??2014-04-17?11:05??編譯器(1+2)\Compiler\syntacticAnalyzer.h
?????文件??????????79??2014-04-17?13:46??編譯器(1+2)\Compiler\待處理代碼段.txt
?????文件?????????601??2014-04-17?13:46??編譯器(1+2)\Compiler\詞法分析結果.txt
?????文件?????????420??2014-03-11?21:28??編譯器(1+2)\Compiler\詞法規則對照.txt
評論
共有 條評論