- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
词法分析程序的构造剖析
通达学院
专业课程设计II
题 目: 词法分析程序的构造
专 业 计 算 机 通 信
学 生 姓 名
班 级 学 号 28班
指 导 教 师 徐 佳
指 导 单 位 计算机学院计算机科学与技术系
日 期 2012.11.12-2012.11.23
教师评语
同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。
教师签名:
年 月 日 成绩评定 备 注
词法分析程序的构造
课题内容和要求
通过状态转换图构造C或者PASCAL语言子集的词法分析程序。
原理解析:选取语言,例如选取了C语言,选取其中一个子集,例如包含了部分关键字main、float、if、for等等,特殊符号( 、、=、+等等,特殊定义的标识符变量以及部分常量等,采用《编译原理》词法分析中有穷自动机的思想构建出该语言子集的状态转换图,并编码实现。
基本要求:(1)将选取的语言子集编写一个简单程序,放在一个文本文件中;
(2)要将一个个单词区分清楚并归类(例如for属于关键字)。
char cbuffer;
char*keyword[14]={if,else,for,while,do,float,return,break,continue,int,void,main,const,printf}; //关键字
char *border[8]={ , , ; , { , } , ( , ) ,:=,.}; //分隔符
char *arithmetic[6]={+ , - , * , / , ++ , --}; //运算符
char *relation[7]={ , = , = , , = , == ,!=}; //关系运算符
char *lableconst[80]; //标识符
2)函数调用:
search(char searchchar[],int wordtype)//查找类型
alphaprocess(char buffer) //字符处理过程
digitprocess(char buffer) //数字处理过程
otherprocess(char buffer) //分隔符、运算符、逻辑运算符等
main()//主函数
3状态转换图的形式:
■每个状态对应一个带标号的case语句
■转向边对应goto语句switch (wordtype)
{
case 1:
{ for (i=0;i=13;i++) //关键字
{
if (strcmp(keyword[i],searchchar)==0)
return(i+1);
}
return(0);}
case 2:
{
for (i=0;i=7;i++) //分隔符
{
if (strcmp(border[i],searchchar)==0)
return(i+1);
}
return(0);
}
case 3:
{
for (i=0;i=5;i++) //运算符
{
if (strcmp(arithmetic[i],searchchar)==0)
return(i+1);
}
return(0);
}
case 4:
{
for (i=0;i=6
原创力文档


文档评论(0)