- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告
填写时间:2018.4.25
课程名称
编译原理
实验名称
设计词法分析器
姓名 学号 专业年级
一、实验目的:
设计并实现 个小型程序语言的词法分析器,实现源程序的输入,预处理 词法分析,最后以编译程序需要的内部表示形式将识别的单词、符号、数 字等关键字输出。
二、实验内容:
设计词法分析器,定义关键字,待程序运行,输入待分析的程序段或程 序的路径及名称,即可进行词法分析。
三、实验步骤:
在 Microsoft Visual C++ 6.0 中新建源文件;
编写头文件及类函数;
定义关键字;
关键字、字母、数字判断;
编写词法分析代码;
编写主函数;
新建待分析程序段,记住其路径及名称;
运行此分析程序;
输入待分析的程序段的路径及名称。
四、实验结果与结论: 核心代码和程序的运行效果)
核心代码1:
Stri ngkey[15]={begi n,e nd,if,the n,else,while,write,read,do, call,const,char,until,procedure,repeat} 。// 关键字定义
核心代码2:
int Iskey(string c{ // 关键字判断
int i 。
for(i=0 o iMAX i++ {
if(key[i].compare(c==0 retur n 1 。
}
return 0 。
}
int lsLetter(char c { //判断是否为字母
if(((c=z(c=a?||((c=Z(c=A? return 1 else return 0 。
//判断是否为数字
//判断是否为数字
int IsDigit(char c{
if(c=0c=9 return 1
else return 0
}
核心代码3:
void analyse(FILE *fpin{ // 词法分析
stri ng arr= 。
while((ch=fgetc(fp in !=EOF { arr= 。
else if(lsLetter(ch{ while(lsLetter(ch||lsDigit(ch { if((ch=Z(ch=A? ch=ch+32 arr=arr+ch ch=fgetc(fp in}
else if(lsLetter(ch{ while(lsLetter(ch||lsDigit(ch { if((ch=Z(ch=A? ch=ch+32 arr=arr+ch ch=fgetc(fp in
}
fseek(fpi n,-1L,SEEK_CUR
if (arr==key[0]{coutarrvv\t8 $
else
if
(arr==key[1]{coutarr\t9
$关键字
endl。}
else
if
(arr==key[2]{coutarr\t3
$关键字
endl。}
else
if
(arr==key[3]{coutarr\t4
$关键字
endl。}
else
if
(arr==key[4]{coutarr\t5
$关键字
endl。}
else
if
(arr==key[5]{coutarr\t6
$关键字
endl。}
else
if
(arr==key[6]{coutarr\t7
$关键字
endl。}
else
if
(arr==key[7]{coutarr\t10
$关键字
endl。}
else
if
(arr==key[8]{coutarr\t11
$关键字
endl。}
else
if
(arr==key 心{8山汀%12
$关键字
0
关键字e ndl
}
o
II
II
II
II
II
II
II
II
endl。}
else
if
(arr==key[10]{coutarrvv\t13
endl。}
else
if
(arr==key[11]{coutarrvv\t14
endl。}
else
if
(arr==key[12]{coutarr\t15
endl。}
else
if
(arr==key[13]{coutarr\t16
endl。}
else
if
(arr==key[14]{coutarr\t17
endl。}
else
coutarr\t0 $
普通标识符endl
}
关键
关键
关键
关键
关键
else if(lsDigit(ch{ while(lsDigit(ch||ch==.lsDigit(fgetc(fpi n{ arr=arr+ch 。
ch=fgetc(fp in 。
coutv=vv\t63运算符e ndl
coutv=vv\t63
运算符e ndl
}
fseek(fpi n,-1L,SEEK_CUR 。
coutarr\t2 $
无符号实数endl。
}
else switch(c
您可能关注的文档
最近下载
- 2023年资料员资格考试题库【轻巧夺冠】.docx
- 2025年河南省公务员录用考试《行测》真题及答案解析(回忆版).docx VIP
- 《项目经理的晋级之道——研发项目管理高级实战》.pptx VIP
- MJ-50数控车床液压系统设计.doc VIP
- 《超重问题与减重策略》课件.ppt VIP
- 贯彻新时代党的组织路线会议精神PPT模板.pptx VIP
- 水产动物营养与饲料 微量矿物元素营养 铁.pptx VIP
- 岭南版6年级美术 第1课《源远流长的古代美术》课件.pptx
- 学堂课程在线人工智能原理(北大)章节测试答案.docx
- 2024届高二物理第十二章《电能 能量守恒定律》测试题(含答案).docx VIP
原创力文档


文档评论(0)