收藏 分享(赏)

编译技术-实验1-词法分析.docx

上传人:fmgc7290 文档编号:6825528 上传时间:2019-04-23 格式:DOCX 页数:11 大小:153.52KB
下载 相关 举报
编译技术-实验1-词法分析.docx_第1页
第1页 / 共11页
编译技术-实验1-词法分析.docx_第2页
第2页 / 共11页
编译技术-实验1-词法分析.docx_第3页
第3页 / 共11页
编译技术-实验1-词法分析.docx_第4页
第4页 / 共11页
编译技术-实验1-词法分析.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、标 准 实 验 报 告(实验)课程名称 编译技术 实 验 报 告学生姓名: 学 号: 指导教师:实验地点: 实验时间:13.10.19一、实验室名称:通用计算机软件实验室 二、实验项目名称:词法分析器三、实验学时:4 学时四、实验原理:词法分析程序的实现方案五、实验目的:理解词法分析在编译程序中的作用,掌握词法分析的实现方法和技术,以加深对编译技术中词法分析的理解。六、实验内容:用 C 语言(或 C+)对一个简单语言编制一个一遍扫描编译程序,扫描源程序字符,按语言的词法规则识别各类单词(如:语言的保留字、标识符、常数) 、符号(如运算符、赋值符等) ,并将有关字符组合成为单词,完成相关转化和处

2、理,最终以二元式形式输出。其中标识符和无符号整数各作为一类,保留字和符号一符一类。具体实验内容包括:1 从源程序的第一个字符开始,顺序地读字符,根据所读进的字符识别各类单词;2 将所识别的单词分类别分别存储到符号表;其中对常数完成数字字符串到数值的转换;3 删去空格、换行、制表等字符和注释。4 按要求输出源程序的“单词符号流” ,并输出相应符号表的内容,字符串表示的源程序词法分析程序单词表示的源程序字 符 单词以便检查。实验输出格式要求1 首先输出 自己姓名、学号;2 之后输出词法分析结果: 行号 + 词法分析结果二元式, 即:line xx: (单词类别,单词属性) 3 如果类别是标识符,还

3、需要输出该标识符在符号表中的内容;4 如果类别是常数,还需要输出该常数的值 ;5 最后将词法分析结果打印到屏幕并输出到当前目录的 lex.txt 文件 6 将符号表内容 打印到屏幕并输出到当前目录的 symtab1.txt 文件 7 将词法错误 打印到屏幕 并 输出到 error.txt七、实验器材(设备、元器件):硬件要求:pc 机,CPU PII 以上,64M 内存,100M 硬盘空间即可。 软件要求:Windows 7/XP/2003 等,包括 C 编译器的 IDE。八、实验步骤、实验编程与运行结果:1.程序编码#include #include #include #define tru

4、e 1#define false 0#define MAX 100#define MAX1 30#define $SYMBOL 1#define $CONSTANT 2#define $ADD 3#define $SUB 4#define $MUL 5#define $DIV 6#define $L 7#define $LE 8#define $G 9#define $GE 10#define $NE 11#define $E 12#define $ASSIGN 13#define $LPAR 14#define $RPAR 15#define $COM 16#define $SEM 17#d

5、efine $INT 18#define $BEGIN 19#define $FUNCTION 20#define $IF 21#define $THEN 22#define $ELSE 23#define $END 24#define $READ 25#define $WRITE 26FILE *fp_print;FILE *fp_symbol;FILE *fp_error;FILE *fp;typedef struct Eys char BMMAX1;int n;Erys;Erys symMAX=0,consMAX=0; /*定义符号表和常数表*/char tokenMAX1,charac

6、ter=0,ret=0;int c=0,s=0,t,l=1;void Getchar()character=fgetc(fp);return ;void getnbc() /*读入非空白字符函数 */ while(character= |character=t)Getchar();return ;void concat() /*连接字符串函数*/tokent=character;t=t+1;return; int letter() /*判断字母的函数*/if(character=Astrcpy(syms.BM,token);fprintf(fp_symbol,“%d:%sn“,s,token)

7、;return s;int constant() /*常数存入常数表的函数*/int i=1;for(i;ic)c=c+1;strcpy(consc.BM,token);return c;void Return(int n,int i) printf(“行数:%d “,l);fprintf(fp_print,“行数:%d “,l);printf(“(%d,%d)“,n,i);fprintf(fp_print,“(%d,%d)“,n,i);if(n=2)printf(“ 值为%d“,atoi(token);fprintf(fp_print,“ 值为%d“,atoi(token);printf(“

8、n“);fprintf(fp_print,“n“);return ;void error() /*出错处理函数*/printf(“代码第%d 行出现错误 .n“,l);fprintf(fp_error,“代码第%d 行出现错误.n“,l);void LexAnalyze() /*词法分析函数*/int val;for(int i=0;i:Getchar();if(character=)Return($GE,0); /*返回“=“符号*/elseretract();Return($G,0); /*返回“ 符号*/break;case =:Getchar();if(character=)Retur

9、n($E,0); /*返回“=“符号*/elseretract();Return($ASSIGN,0); /*返回“=“符号*/break;case !:Getchar();if(character=)Return($NE,0); /*返回“!=“ 符号*/else error();break;case +:Return($ADD,0); /*返回“+“符号*/break;case -:Return($SUB,0); /*返回“-“符号 */break;case *:Return($MUL,0); /*返回“*“ 符号*/break;case /:Return($DIV,0); /*返回“/“

10、符号*/break;case (:Return($LPAR,0); /*返回“(“符号*/break;case ):Return($RPAR,0); /*返回“)“符号*/break;case ,:Return($COM,0); /*返回“,“符号*/break; case ;:Return($SEM,0); /*返回“;“符号*/break;case n: l=l+1;break;case #: break;default : error();break;return ;int main(void)fp_print=fopen(“E:wxylex.txt“,“w“);fp_symbol=fo

11、pen(“E:wxysymtab1.txt“,“w“);fp_error=fopen(“E:wxyerror.txt“,“w“);fp=fopen(“E:wxyget.txt“,“r“);if(fp=NULL)return 0;char ch=fgetc(fp);while(character!=#)t=0;LexAnalyze(); /*执行词法分析函数 */ printf(“*符号表*n“);for(int i=1;i=s;i+)printf(“%d:%sn“,i,symi.BM);fclose(fp_print);fclose(fp_symbol);fclose(fp_error);re

12、turn 0; 2.文件 get.txt 截图:3.程序运行结果截图4.文件 lex.txt 截图:5.文件 symtab1.txt 的截图6.文件 error.txt 截图:九、实验结论:本实验用 c 语言编写的代码实现了词法分析器,其中编写了函数 Character() 、Getchar()、Getbc()等十几个函数,以词法分析器函数 LexAnalyze()为主,实验过程比较顺利,最终结果很理想,这次实验比较成功。十、总结及心得体会:本次实验通过 C 语言来实现词法分析器,不仅让我们更加熟悉了词法分析器,而且也锻炼了我们编写程序的思维,对我们以后的学习有很大的帮助。十一、对本实验过程及方法、手段的改进建议:本次实验中代码的不足和需要改进的地方:1.它所识别的 get.txt 文件中的语句要以开头和结尾2.在写入 error.txt 中的错误不能显示错误的字符和原因3. 程序能识别的保留字的范围小。如若要改进,则主要在实验代码进行改进。报告评分:指导教师签字:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报