简单的词法分析器设计

简单的词法分析器设计

ID:33734780

大小:105.50 KB

页数:8页

时间:2019-02-28

简单的词法分析器设计_第1页
简单的词法分析器设计_第2页
简单的词法分析器设计_第3页
简单的词法分析器设计_第4页
简单的词法分析器设计_第5页
资源描述:

《简单的词法分析器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、型的常数。(3)保留字(关键字):如if、begin、then、while、do等。(4)运算符:如+、-、*、<、>、=等。(5)界符:如逗号、分号、括号等。2.将所有合法的单词符号转化为便于计算机处理的二元组形式:(单词分类号,单词自身值);以图形化界面显示出来。3.可选择性地将结果保存到文件中。四、概要设计1.待分析的简单语言的词法(1)关键字:whiledorelopletteridnumber所有关键字都是小写。(2)运算符和界符::=+–*/<<=<>>>==;()#(3)其他单词是标识符(ID)和整型常数(NUM

3、),通过以下正规式定义:如课本P20例2.6空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。2.词法分析器的结构7源程序输入缓冲区预处理子程序扫描缓冲区1扫描缓冲区2词法分析子程序调用数据返回—单词图6.1词法分析器的结构3.部分单词的正规式与状态转换图图6.2部分单词的状态转换图4.功能模块表6.2词法分析器的C#程序过程或函数功能表过程或函数名简要功能说明voidscaner()分析源程序得到单个单词并大致区分其类型,并生成二元组voidmain()输入源程序五、

4、详细设计1.流程图7开始输入C语言源程序初始化source逐个遍历字符,并去除空格符State为0进入switch分支循环判断根据state的值选择适当的处理调用相关函数输出处理结果开始图7.1程序总体流程图六、编程调试1.源代码#include"stdio.h"#include"string.h"#include"iostream.h"charprog[100],token[20];charch;intsyn,p,m=0,n,row,sum=0;char*rwtab[6]={"while","do","relop","let

5、ter","id","number"};voidscaner(){for(n=0;n<8;n++)token[n]=NULL;ch=prog[p++];while(ch==''){ch=prog[p];p++;}if((ch>='a'&&ch<='z')

6、

7、(ch>='A'&&ch<='Z')){7m=0;while((ch>='0'&&ch<='9')

8、

9、(ch>='a'&&ch<='z')

10、

11、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}token[m++]='';p-

12、-;syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0'&&ch<='9')){{sum=0;while((ch>='0'&&ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;syn=11;if(sum>32767)syn=-1;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=

13、21;token[m++]=ch;}elseif(ch=='='){syn=22;token[m++]=ch;}else{syn=23;p--;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;7}else{syn=20;p--;}break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}else{syn=17;p--;}

14、break;case'*':syn=13;token[0]=ch;break;case'/':syn=14;token[0]=ch;break;case'+':syn=15;token[0]=ch;break;case'-':syn=16;token[0]=ch;break;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。