简单的词法分析器设计.doc

上传人:飞****9 文档编号:137835610 上传时间:2020-07-12 格式:DOC 页数:8 大小:105KB
返回 下载 相关 举报
简单的词法分析器设计.doc_第1页
第1页 / 共8页
简单的词法分析器设计.doc_第2页
第2页 / 共8页
简单的词法分析器设计.doc_第3页
第3页 / 共8页
简单的词法分析器设计.doc_第4页
第4页 / 共8页
简单的词法分析器设计.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《简单的词法分析器设计.doc》由会员分享,可在线阅读,更多相关《简单的词法分析器设计.doc(8页珍藏版)》请在金锄头文库上搜索。

1、编译原理课 程 设 计院 系 专 业 年 级 11级 学 号 姓 名 2014年 05月实验一 简单的词法分析器设计一、设计内容 熟悉并实现一个简单的词法分析器二、设计目的 了解高级语言单词的分类,了解如何识别单词规则,掌握状态图到识别程序的编程。源程序中,存在许多编辑用的符号,他们对程序逻辑功能无任何影响。例如:回车,换行,多余空白符,注释行等。在词法分析之前,首先要先剔除掉这些符号,使得词法分析更为简单。三、实验步骤1.将每个单词符号进行不同类别的划分。单词符号可以划分成5中。 (1)标识符:用户自己定义的名字,常量名,变量名和过程名。(2)常数:各种类型的常数。(3) 保留字(关键字):

2、如if、begin、then、while、do等。(4) 运算符:如+、-、*、=等。(5)界符:如逗号、分号、括号等。2.将所有合法的单词符号转化为便于计算机处理的二元组形式:(单词分类号,单词自身值);以图形化界面显示出来。3.可选择性地将结果保存到文件中。四、概要设计1待分析的简单语言的词法(1)关键字:while do relop letter id number所有关键字都是小写。(2)运算符和界符:: = + * / = = = ; ( ) #(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义: 如课本P20例2.6空格由空白、制表符和换行符组成。空格一般用来分

3、隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 2词法分析器的结构源程序输入缓冲区预处理子程序扫描缓冲区1扫描缓冲区2词法分析子程序调用数据返回单词图6.1 词法分析器的结构 3部分单词的正规式与状态转换图图6.2部分单词的状态转换图 4功能模块表6.2 词法分析器的C#程序过程或函数功能表过程或函数名简要功能说明void scaner()分析源程序得到单个单词并大致区分其类型,并生成二元组void main( )输入源程序五、详细设计1流程图开始输入C语言源程序初始化source逐个遍历字符,并去除空格符State 为0进入switch分支循环判断根据state的值选择适当的

4、处理调用相关函数输出处理结果开始 图7.1程序总体流程图六、编程调试1.源代码#includestdio.h#includestring.h#includeiostream.hchar prog100,token20;char ch;int syn,p,m=0,n,row,sum=0;char *rwtab6=while,do,relop,letter,id,number; void scaner()for(n=0;n=a&ch=A&ch=0&ch=a&ch=A&ch=Z)tokenm+=ch;ch=progp+;tokenm+=0;p-;syn=10;for(n=0;n=0&ch=0&ch3

5、2767)syn=-1;else switch(ch)case)syn=21;tokenm+=ch;else if(ch=)syn=22;tokenm+=ch;elsesyn=23;p-;break;case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=24;tokenm+=ch;elsesyn=20;p-;break;case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=18;tokenm+=ch;elsesyn=17;p-;break;case*:syn=13;token0=ch;break;case/:syn=14;token0=c

6、h;break;case+:syn=15;token0=ch;break;case-:syn=16;token0=ch;break;case=:syn=25;token0=ch;break;case;:syn=26;token0=ch;break;case(:syn=27;token0=ch;break;case):syn=28;token0=ch;break;case#:syn=0;token0=ch;break;casen:syn=-2;break;default: syn=-1;break;void main()p=0;row=1;cout请输入字符串(字符#是字符串输入结束标志):en

7、dl;docin.get(ch);progp+=ch;while(ch!=#);cout字符串输出结果为:endl;p=0;doscaner();switch(syn)case 11: cout(syn,sum)endl; break; case -1: coutError in row row!endl; break;case -2: row=row+;break; default: cout(syn,token)endl;break;while (syn!=0);2.调试七、收获(体会)与建议通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言直接编写此法分析程序。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号