資源簡介
詞法分析
語法分析
編譯器的構造和設計
一、實驗目的
設計、編制并調試一個詞法分析程序,加深對詞法分析原理的理解。
二、基本知識
1、正則表達式
2、正則表達式到有限自動機的轉換
3、有限自動機的確定化與最小化
三、實驗環境
1、Windows操作系統
2、C/C++/Java語言
四、實驗要求
1、做好實驗預習,掌握并熟悉本實驗中所使用的編程、測試環境及相應的軟件
2、寫出實驗報告
語法分析
編譯器的構造和設計
一、實驗目的
設計、編制并調試一個詞法分析程序,加深對詞法分析原理的理解。
二、基本知識
1、正則表達式
2、正則表達式到有限自動機的轉換
3、有限自動機的確定化與最小化
三、實驗環境
1、Windows操作系統
2、C/C++/Java語言
四、實驗要求
1、做好實驗預習,掌握并熟悉本實驗中所使用的編程、測試環境及相應的軟件
2、寫出實驗報告

代碼片段和文件信息
#define?_CRT_SECURE_NO_WARNINGS
#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]?==?‘/‘)
{//若為單行注釋“//”則去除注釋后面的東
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-06-07?11:04??實驗1-詞法分析器-1606100068陳家樂\
?????文件?????????162??2019-06-07?11:04??實驗1-詞法分析器-1606100068陳家樂\~$1-詞法分析器-1606100068陳家樂.doc
?????文件??????298496??2019-05-19?06:28??實驗1-詞法分析器-1606100068陳家樂\實驗1-詞法分析器-1606100068陳家樂.doc
?????文件????????9731??2019-05-06?04:20??實驗1-詞法分析器-1606100068陳家樂\源.cpp
?????目錄???????????0??2019-06-17?21:42??實驗2-語法分析器-1606100068陳家樂\
?????文件??????134144??2019-06-07?19:45??實驗2-語法分析器-1606100068陳家樂\實驗2-語法分析器-1606100068陳家樂.doc
?????文件????????9969??2019-06-07?19:43??實驗2-語法分析器-1606100068陳家樂\源.cpp
?????目錄???????????0??2019-06-22?20:52??實驗3-編譯器的構造和設計-1606100068陳家樂\
?????文件?????6175093??2013-04-18?13:14??實驗3-編譯器的構造和設計-1606100068陳家樂\model.txt
?????文件????????1948??2019-06-17?19:35??實驗3-編譯器的構造和設計-1606100068陳家樂\SpellingCorrection.cpp
?????文件?????????223??2013-04-18?12:19??實驗3-編譯器的構造和設計-1606100068陳家樂\stdafx.cpp
?????文件???????99784??2019-06-22?20:52??實驗3-編譯器的構造和設計-1606100068陳家樂\實驗3-編譯器的構造和設計-1606100068陳家樂.doc
評論
共有 條評論