- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验报告
中南林业科技大学
实验报告
课程名称: 编译原理
专业班级:2012级计算机科学与技术2班
姓 名: 陈晓燚
学 号:
2015 年 7 月 8日
实验一 词法分析
一、实验目的
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。
二、实验题目
如源程序为C语言。输入如下一段:
main()
{
int a=-5,b=4,j;
if(a=b)
j=a-b;
else j=b-a;
}
要求输出如下:
(2,”main”)(5,”(”) (5,”)”)
(5,”{”) (1,”int”) (2,”a”)
(4,”=”) (3,”-5”) (5,”,”)
(2,”b”) (4,”=”) (3,”4”)
(5,”,”) (2,”j”) (5,”;”)
(1,”if”) (5,”(”) (2,”a”)
(4,”=”) (2,”b”) (5,”)”)
(2,”j”) (4,”=”) (2,”a”)
(4,”-”) (2,”b”) (5,”;”)
(1,”else”) (2,”j”) (4,”=”)
(2,”b”) (4,”-”) (2,”a”)
(5,”;”) (5,”}”)
三、实验理论依据
(一)识别各种单词符号
程序语言的单词符号一般分为五种:
关键字(保留字/ 基本字)if 、while 、begin…
标识符:常量名、变量名…
常数:34 、56.78 、true 、‘a’ 、…
运算符:+ 、- 、* 、/ 、〈 、and 、or 、….
界限符:, ; ( ) { } /*…
识别单词:掌握单词的构成规则很重要
标识符的识别:字母| 下划线+( 字母/ 数字/ 下划线)
关键字的识别:与标识符相同,最后查表
常数的识别
界符和算符的识别
大多数程序设计语言的单词符号都可以用转换图来识别,如图1-1
图1-1
词法分析器输出的单词符号常常表示为二元式:(单词种别,单词符号的属性值)
单词种别通常用整数编码,如1 代表关键字,2 代表标识符等
关键字可视其全体为一种,也可以一字一种。采用一字一种得分法实际处理起来较为方便。
标识符一般统归为一种
常数按类型(整、实、布尔等)分种
运算符可采用一符一种的方法。
界符一般一符一种的分法。
(二)超前有哪些信誉好的足球投注网站方法
词法分析时,常常会用到超前有哪些信誉好的足球投注网站方法。
如当前待分析字符串为“a+” ,当前字符为“” ,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢?
显然,只有知道下一个字符是什么才能下结论。于是分析器读入下一个字符’+’ ,这时可知应将’’ 解释为大于运算符。但此时,超前读了一个字符’+’ ,所以要回退一个字符,词法分析器才能正常运行。又比如:‘+’ 分析为正号还是加法符号
(三)预处理
预处理工作包括对空白符、跳格符、回车符和换行符等编辑性字符的处理,及删除注解等。由一个预处理子程序来完成。
四、词法分析器的设计
设计方法:
写出该语言的词法规则。
把词法规则转换为相应的状态转换图。
把各转换图的初态连在一起,构成识别该语言的自动机
设计扫描器
把扫描器作为语法分析的一个过程,当语法分析需要一个单词时,就调用扫描器。
扫描器从初态出发,当识别一个单词后便进入终态,送出二元式
图1-2 取单词程序框图
程序代码
#includestdio.h
#includestring
#includectype.h
FILE *fp;
char cbuffer;
char *key[14]={main,if,else,for,while,do,return,break,continue,int,float,
double,boolean,long
};
int atype,id=4;
//判断单词是保留字还是标识符
int search(char searchchar[],int wordtype){
int i=0;
int p;
switch(wordtype){
case 1:
for(i=0;i=13;i++){
if(strcmp(key[i],searchchar)==0){
//是保留字则p为非0且不重复的整数
p=i+1;
break;
}else p=0; //不是保留字则用于返回的p
您可能关注的文档
- 贝叶斯例子1.docx
- 贝叶斯信念网络.doc
- 贝叶斯信用评估模型.docx
- 贝叶斯网络参数的在线学习算法及应用.doc
- 背包问题九讲和源程序(答案).doc
- 被历史谈忘的民族英雄胡宗宪.doc
- 贲门失驰缓症诊治新进展.docx
- 苯溴马隆的药物经济学评价-.doc
- 鼻腔恶性黑色素瘤-a.doc
- 鼻饲病人的饮食护理.doc
- 2024年学校党总支巡察整改专题民主生活会个人对照检查材料3.docx
- 2025年民主生活会个人对照检查发言材料(四个带头).docx
- 县委常委班子2025年专题生活会带头严守政治纪律和政治规矩,维护党的团结统一等“四个带头方面”对照检查材料四个带头:.docx
- 巡察整改专题民主生活会个人对照检查材料5.docx
- 2024年度围绕带头增强党性、严守纪律、砥砺作风方面等“四个方面”自我对照(问题、措施)7.docx
- 2025年度民主生活会领导班子对照检查材料(“四个带头”).docx
- 国企党委书记2025年度民主生活会个人对照检查材料(五个带头).docx
- 带头严守政治纪律和政治规矩,维护党的团结统一等(四个方面)存在的问题整改发言提纲.docx
- 党委书记党组书记2025年带头增强党性、严守纪律、砥砺作风方面等“四个带头”个人对照检查发言材料.docx
- 2025年巡视巡察专题民主生活会对照检查材料.docx
文档评论(0)