- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验报告
(词法分析部分)
姓名:王豪
学号专业:软件工程
班级:软件1班
实验题目:
《手工设计c语言的词法分析器(可以是c语言的子集)》
实验内容:
处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。
实验目的:
了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。
实验环境:
系统:Win10
编译工具:VS2010
语言:C++
需求分析:
要求手工设计c语言的词法分析器(可以是c语言的子集)。
词法分析器需要先处理c语言源程序,过滤掉无用符号。
词法分析器的主要功能是判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。
概要设计:
可以将词法分析程序分为字符文件缓冲区、词法分析、结果输出三部分。
基本流程:
使用的数据结构:
//词法分析器返回类型结构体
struct WORD_TYPE
{
int ID;
char value[MAX_TOKEN_SIZE];
};
//WORD_TYPE的缺省空值
WORD_TYPE NULL_WT={0,0};
//WORD_TYPE的错误值
WORD_TYPE ERR_WT={-1,-1};
详细设计:
IsLetter函数判断是否为字母、IsKey函数判断是否为关键字、IsDigit判断是否为数字,通过analyse()函数进行分析,analyse()为主要的函数体,主要通过case语句和if—else语句实现各种各种运算符的判别过程,最后main()函数调用并且输出结果。
结果测试
测试程序代码:
#include stdafx.h
#includeGetWord.h
int _tmain(int argc, _TCHAR* argv[])
{
fstream file(H:\\test2.txt, ios_base::trunc|ios::out );
WORD_TYPE wt;
InitBuffer(H:\\test.txt);
wt=GetWord();
fileID:wt.ID Value:wt.valueendl;
while(wt.ID!=0)
{
wt=GetWord();
if(wt.ID!=0)
fileID:wt.ID Value:wt.valueendl;
if(wt.ID==-1)
{
break;
}
}
file.close();
return 0;
}
输入的原始数据:
测试结果:
截图1 截图2
九、小结
通过编写这次的课程设计,学会了用C++语言编写词法分析器,掌握了词法分析器的原理以及功能且加深对编译原理和应用程序的理解。通过设计调试词法分析程序,实现了从程序中分出各种单词的方法,从而加深了对该知识的理解,提高了词法分析的实践能力。
总之,通过本次实验,提高了自己的能力,使我受益匪浅。
附代码:
//=======================
//定义的宏
//=======================
#define MAX_BUFFER_SIZE 256
#define MAX_TOKEN_SIZE 128
#define SIGN_SIZE 12
#define OTHER_SYMBOL_SIZE 2
#define REVERSE_SIZE 1
#define SIGN_START_ID 1
#define REVERSE_START_ID 11
//=======================
//词法分析全局变量的定义
//=======================
WORD_TYPE NULL_WT={0,0};
WORD_TYPE ERR_WT={-1,-1};
fstream source_File;
char Buffer[MAX_BUFFER_SIZE];
int buffer_Index;
int buffer_Size;
char CHAR;
char TOKEN[MAX_TOKEN_SIZE];
int token_Index;
char ReserveTable[REVERSE_SIZE][30]=
{
clear
};
char SignTable[SIGN_SIZE]=
{
=, ?, +, -, *,
/, (, ), X, X,
X, ;
};
//================================
//词法分析的函数声明
//================================
//**初始化文件缓
您可能关注的文档
最近下载
- 民事陪审员培训课件.pptx VIP
- 材料科学基础:第十二章 金属材料强韧化机制.ppt VIP
- CNAS-GL27-2009 声明检测或校准结果及与规范符合性的指南.pdf VIP
- 胃脘痛护理查房.ppt VIP
- 【行业研报】2023年肯尼亚行业企业战略规划方案及未来五年行业预测报告.docx VIP
- 人民陪审员培训课件.pptx VIP
- 《氧化还原反应方程式的配平》练习题 .pdf VIP
- 部编六年级下册第11课《十六年前的回忆》一等奖教学设计说课稿.docx VIP
- GB_T 39637-2020 金属和合金的腐蚀 土壤环境腐蚀性分类.pdf
- 聚硼硅氮烷合成、掺杂及SiBCN陶瓷应用研究.docx VIP
文档评论(0)