欢迎来到天天文库
浏览记录
ID:13714042
大小:153.52 KB
页数:11页
时间:2018-07-24
《编译技术-实验1-词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、标准实验报告(实验)课程名称编译技术实验报告学生姓名:学号:指导教师:实验地点:实验时间:13.10.19一、实验室名称:通用计算机软件实验室二、实验项目名称:词法分析器三、实验学时:4学时四、实验原理:单词单词表示的源程序词法分析程序字符串表示的源程序词法分析程序的实现方案五、实验目的:理解词法分析在编译程序中的作用,掌握词法分析的实现方法和技术,以加深对编译技术中词法分析的理解。六、实验内容:用C语言(或C++)对一个简单语言编制一个一遍扫描编译程序,扫描源程序字符,按语言的词法规则识别各类单词(如:语言的保留字
2、、标识符、常数)、符号(如运算符、赋值符等),并将有关字符组合成为单词,完成相关转化和处理,最终以二元式形式输出。其中标识符和无符号整数各作为一类,保留字和符号一符一类。具体实验内容包括:1.从源程序的第一个字符开始,顺序地读字符,根据所读进的字符识别各类单词;2.将所识别的单词分类别分别存储到符号表;其中对常数完成数字字符串到数值的转换;3.删去空格、换行、制表等字符和注释。4.按要求输出源程序的“单词符号流”,并输出相应符号表的内容,以便检查。实验输出格式要求1.首先输出自己姓名、学号;2.之后输出词法分析结果:
3、行号+词法分析结果二元式,即:linexx:(单词类别,单词属性)3.如果类别是标识符,还需要输出该标识符在符号表中的内容;4.如果类别是常数,还需要输出该常数的值;5.最后将词法分析结果打印到屏幕并输出到当前目录的lex.txt文件6.将符号表内容打印到屏幕并输出到当前目录的symtab1.txt文件7.将词法错误打印到屏幕并输出到error.txt七、实验器材(设备、元器件):硬件要求:pc机,CPUPII以上,64M内存,100M硬盘空间即可。软件要求:Windows7/XP/2003等,包括C编译器的IDE。
4、八、实验步骤、实验编程与运行结果:1.程序编码#include#include#include#definetrue1#definefalse0#defineMAX100#defineMAX130#define$SYMBOL1#define$CONSTANT2#define$ADD3#define$SUB4#define$MUL5#define$DIV6#define$L7#define$LE8#define$G9#define$GE10#define$NE1
5、1#define$E12#define$ASSIGN13#define$LPAR14#define$RPAR15#define$COM16#define$SEM17#define$INT18#define$BEGIN19#define$FUNCTION20#define$IF21#define$THEN22#define$ELSE23#define$END24#define$READ25#define$WRITE26FILE*fp_print;FILE*fp_symbol;FILE*fp_error;FILE*fp;
6、typedefstructEys{charBM[MAX1];intn;}Erys;Eryssym[MAX]={' '},cons[MAX]={' '};/*定义符号表和常数表*/chartoken[MAX1],character=' ',ret=' ';intc=0,s=0,t,l=1;voidGetchar(){character=fgetc(fp);return;}voidgetnbc(){/*读入非空白字符函数*/while(character==''
7、
8、character=='t')Getchar(
9、);return;}voidconcat(){/*连接字符串函数*/token[t]=character;t=t+1;return;}intletter(){/*判断字母的函数*/if(character>='A'&&character<='Z')returntrue;elseif(character>='a'&&character<='z')returntrue;elsereturnfalse;}intdigit(){/*判断数字的函数*/if(character>='0'&&character<='9')retu
10、rntrue;elsereturnfalse;}charretract(){/*回退字符函数*/ret=character;returnret;}intreserve(){/*处理保留字的函数*/if(!strcmp(token,"int"))return$INT;if(!strcmp(token,"begin"))return$BEGIN;i
此文档下载收益归作者所有