資源簡介
編譯原理詞法分析c++實現,包含實驗報告和完整源碼,附有詞法分析樣例

代碼片段和文件信息
#include?“stdio.h“
#include?“stdlib.h“
#include?“string.h“
#include?“iostream“
using?namespace?std;
/*
第一類:標識符???letter(letter?|?digit)*??無窮集
第二類:常數????(digit)+??無窮集
第三類:保留字(32)
auto???????break????case?????char????????const??????continue
default????do???????double???else????????enum???????extern
float??????for??????goto?????if??????????int????????long
register???return???short????signed??????sizeof?????static
struct?????switch???typedef??union???????unsigned???void
volatile????while
第四類:界符??‘/*’、‘//’、?()?{?}?[?]?“?“??‘
第五類:運算符?<、<=、>、>=、=、+、-、*、/、^、
對所有可數符號進行編碼:
<$0>
...
<+,33>
<-34>
<*35>
36>
<<37>
<<=38>
<>39>
<>=40>
<=41>
<==42>
<;44>
<(45>
<)46>
<^47>
<48>
<“49>
<‘50>
<#51>
<&52>
<&&53>
<|54>
<||55>
<%56>
<~57>
<<<58>左移
<>>59>右移
<[60>
<]61>
<{62>
<}63>
<\64>
<.65>
66>
<:67>
“[““]““{““}“
<常數99??數值>
<標識符100?,標識符指針>
*/
//全局變量,保留字表
static?char?reserveWord[32][20]?=?{
????“auto“?“break“?“case“?“char“?“const“?“continue“
????“default“?“do“?“double“?“else“?“enum“?“extern“
????“float“?“for“?“goto“?“if“?“int“?“long“
????“register“?“return“?“short“?“signed“?“sizeof“?“static“
????“struct“?“switch“?“typedef“?“union“?“unsigned“?“void“
????“volatile“?“while“
};
//界符運算符表根據需要可以自行增加
static?char?operatorOrDelimiter[36][10]?=?{
????“+“?“-“?“*“?“/“?“<“?“<=“?“>“?“>=“?“=“?“==“
????“!=“?“;“?“(“?“)“?“^“?““?“\““?“\‘“?“#“?“&“
????“&&“?“|“?“||“?“%“?“~“?“<<“?“>>“?“[“?“]“?“{“
????“}“?“\\“?“.“?“\?“?“:“?“!“
};
static??char?IDentifierTbl[1000][50]?=?{?““?};//標識符表
/****************************************************************************************/
/********查找保留字*****************/
int?searchReserve(char?reserveWord[][20]?char?s[])
{
????for?(int?i?=?0;?i?32;?i++)
????{
????????if?(strcmp(reserveWord[i]?s)?==?0)
????????{//若成功查找,則返回種別碼
????????????return?i?+?1;//返回種別碼
????????}
????}
????return?-1;//否則返回-1,代表查找不成功,即為標識符
}
/********查找保留字*****************/
/*********************判斷是否為字母********************/
bool?IsLetter(char?letter)
{//注意C語言允許下劃線也為標識符的一部分可以放在首部或其他地方
????if?(letter?>=?‘a‘&&letter?<=?‘z‘?||?letter?>=?‘A‘&&letter?<=?‘Z‘||?letter==‘_‘)
????{
????????return?true;
????}
????else
????{
????????return?false;
????}
}
/*********************判斷是否為字母********************/
/*****************判斷是否為數字************************/
bool?IsDigit(char?digit)
{
????if?(digit?>=?‘0‘&&digit?<=?‘9‘)
????{
????????return?true;
????}
????else
????{
????????return?false;
????}
}
/*****************判斷是否為數字************************/
/********************編譯預處理,取出無用的字符和注釋**********************/
void?filterResource(char?r[]?int?pProject)
{
????char?tempString[10000];
????int?count?=?0;
????for?(int?i?=?0;?i?<=?pProject;?i++)
????{
????????if?(r[i]?==?‘/‘&&r[i?+?1]?==?‘/‘)
????????{//若為單行注釋“//”則去除注釋后面
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????261??2019-04-15?18:48??詞法分析\1.txt
?????文件????????468??2019-04-15?18:48??詞法分析\2.txt
?????文件?????735232??2019-07-08?11:35??詞法分析\編譯原理詞法分析實驗報告.doc
?????文件??????11549??2019-04-15?18:48??詞法分析\詞法分析.cpp
?????文件?????657148??2019-04-15?18:48??詞法分析\詞法分析.exe
?????文件?????171092??2019-04-15?18:48??詞法分析\詞法分析.o
?????目錄??????????0??2019-07-08?11:50??詞法分析
-----------?---------??----------?-----??----
??????????????1575750????????????????????7
評論
共有 條評論