- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学院(系)名称:计算机工程系
姓名
学号
专业
班级
实验项目
实验一:词法分析
课程名称
编译原理
课程代码
0310243
实验时间
2013年 4月28 日 第 1、2 节
2013年 5月 7 日 第1 、2 节
实验地点
第一教学楼1508
批改意见
成绩
教师签字:
实验内容:
实现标准C语言词法分析器
实验目的:
1.掌握程序设计语言词法分析的设计方法;
2.掌握DFA的设计与使用方法;
3.掌握正规式到有限自动机的构造方法;
实验要求:
1.单词种别编码要求
基本字、运算符、界符:一符一种;
标识符:统一为一种;
常量:按类型编码;
2.词法分析工作过程中建立符号表、常量表,并以文本文件形式输出;
3.词法分析的最后结果以文本文件形式输出;
4.完成对所设计词法分析器的功能测试,并给出测试数据和实验结果;
5.为增加程序可读性,请在程序中进行适当注释说明;
6.整理上机步骤,总结经验和体会;
7.认真完成并按时提交实验报告。
实验步骤:
1.基本思想:从源程序中依次读入字符并解析,与关键字、运算符、结束符进行比较,得出其中的关键字,并将它存入到数组中去。
2.程序源代码:
#includestdio.h
#includecstring
#includestdlib.h
#define MaxSize1 17//关键字的个数
#define MaxSize2 20//运算符的个数
#define MaxSize3 4//结束符的个数
//数据结构
struct TNode
{
char value[20]; //存放标识符的值
int number; //存放标识符的种别码
char description[20];//描述
}KeyWords[MaxSize1],Operation[MaxSize2],EndOperation[MaxSize3];
//存放关键字的数组
char *WordsBuff[MaxSize1]={const,long,float,double,void,main,if,else,then,break,int,char,include,for,while,printf,scanf};
//存放运算符的数组
char *OperationBuff[MaxSize2]={+,-,*,/,+=,-=,*=,++,--,,=,,=,,=,(,),#,{,}};
char EndOperationBuff[MaxSize3]={ ,;,\n,\t};
//存放词法分析程序输出的结果
TNode Table1[500];
TNode Variable[100];//标识符表
TNode Const[100];
//关键字数组初始化
void inputKeyWords(char * buff[],int size)
{
//关键字编码从1-size
for(int i=0;isize;i++)
{
strcpy(KeyWords[i].value,buff[i]);
KeyWords[i].number=i+1;
strcpy(KeyWords[i].description,关键字);
}
}
//运算符数组初始化
void inputOperation(char * buff[],int size)
{
//运算符编码从50-(50+size)
for(int i=0;isize;i++)
{
strcpy(Operation[i].value,buff[i]);
Operation[i].number=i+50;
strcpy(Operation[i].description,运算符);
}
}
//结束符数组初始化
void inputEndOperation(char buff[],int size)
{
//结束符编码从100-(100+size);
for(int i=0;isize;i++)
{
EndOperation[i].value[0]=buff[i];
EndOperation[i].value[1]=\0;
EndOperation[i].number=i+100;
strcpy(EndOperation[i].description,结束符);
}
}
第 PAGE 12页 共 NUMPAGES 12页
//输出数据结构数组中的信息
void outputInfo(TNode a[],int size)
{
for(int i=0;isize;i++)
{
printf((%d,a[i].n
您可能关注的文档
- 比亚迪F3全车电路图手册.doc
- 比亚迪M6空调系统培训课件 (2).doc
- 比亚迪股份有限公司股票投资分析报告.doc
- 比亚迪汽车营销策略分析.doc
- 比亚迪汽车营销策略分析【,绝对精品】.doc
- 必修2第5章 曲线运动学案【新课标人教版】.doc
- 必修四高一英语期末测试题.doc
- 必修五外研版课后知识点.ppt
- 必修一到必修五课内作文素材迁移 (1).doc
- 必须知道的76个历史文化常识.doc
- 河北省邯郸市部分学校2025届高三上学期11月模拟语文试卷.docx
- 河南省信阳市罗山县2024-2025学年八年级上学期期中语文试题(解析版).docx
- 河北省邯郸市部分学校2025届高三上学期11月模拟生物试卷.docx
- 山东省菏泽市2024-2025学年高二上学期11月期中生物试题(解析版).docx
- 山西省太原市2024-2025学年高二上学期期中考试政治试卷.docx
- 山东省淄博市淄博十一中、淄博一中联考2024-2025学年高一上学期期中考试英语试卷.docx
- 河南省周口市鹿邑县2024-2025学年高三上学期11月期中英语试题.docx
- 中国滤盒行业市场情况研究及竞争格局分析报告.pdf
- 中国滤砖行业市场情况研究及竞争格局分析报告.pdf
- 中国滤波补偿装置行业市场情况研究及竞争格局分析报告.pdf
文档评论(0)