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

上传人:b****5 文档编号:14311934 上传时间:2023-06-22 格式:DOCX 页数:12 大小:394.03KB
下载 相关 举报
简单的词法分析器设计.docx_第1页
第1页 / 共12页
简单的词法分析器设计.docx_第2页
第2页 / 共12页
简单的词法分析器设计.docx_第3页
第3页 / 共12页
简单的词法分析器设计.docx_第4页
第4页 / 共12页
简单的词法分析器设计.docx_第5页
第5页 / 共12页
简单的词法分析器设计.docx_第6页
第6页 / 共12页
简单的词法分析器设计.docx_第7页
第7页 / 共12页
简单的词法分析器设计.docx_第8页
第8页 / 共12页
简单的词法分析器设计.docx_第9页
第9页 / 共12页
简单的词法分析器设计.docx_第10页
第10页 / 共12页
简单的词法分析器设计.docx_第11页
第11页 / 共12页
简单的词法分析器设计.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

简单的词法分析器设计

 

简单的词法分析器设计

《编译原理》

课程设计

院系

专业

年级11级

学号

姓名

 

2014年05月

实验一简单的词法分析器设计

一、设计内容

熟悉并实现一个简单的词法分析器

二、设计目的

了解高级语言单词的分类,了解如何识别单词规则,掌握状态图到识别程序的编程。

源程序中,存在许多编辑用的符号,他们对程序逻辑功能无任何影响。

例如:

回车,换行,多余空白符,注释行等。

在词法分析之前,首先要先剔除掉这些符号,使得词法分析更为简单。

三、实验步骤

1.

将每个单词符号进行不同类别的划分。

单词符号可以划分成5中。

(1)标识符:

用户自己定义的名字,常量名,变量名和过程名。

(2)常数:

各种类型的常数。

(3)保留字(关键字):

如if、begin、then、while、do等。

(4)运算符:

如+、-、*、<、>、=等。

(5)界符:

如逗号、分号、括号等。

2.

将所有合法的单词符号转化为便于计算机处理的二元组形式:

(单词分类号,单词自身值);以图形化界面显示出来。

3.

可选择性地将结果保存到文件中。

四、概要设计

1.待分析的简单语言的词法

(1)关键字:

whiledorelopletteridnumber所有关键字都是小写。

(2)运算符和界符:

:

=+–*/<<=<>>>==;()#

(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:

如课本P20例

空格由空白、制表符和换行符组成。

空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

2.词法分析器的结构

图词法分析器的结构

3.部分单词的正规式与状态转换图

图部分单词的状态转换图

4.功能模块

表词法分析器的C#程序过程或函数功能表

过程或函数名

简要功能说明

voidscaner()

分析源程序得到单个单词并大致区分其类型,并生成二元组

voidmain()

输入源程序

五、详细设计

1.流程图

图程序总体流程图

六、编程调试

1.源代码

#include""

#include""

#include""

charprog[100],token[20];

charch;

intsyn,p,m=0,n,row,sum=0;

char*rwtab[6]={"while","do","relop","letter","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')||(ch>='A'&&ch<='Z'))

{

m=0;

while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

{

token[m++]=ch;

ch=prog[p++];

}

token[m++]='\0';

p--;

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=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;

}

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--;

}

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;

case'=':

syn=25;token[0]=ch;break;

case';':

syn=26;token[0]=ch;break;

case'(':

syn=27;token[0]=ch;break;

case')':

syn=28;token[0]=ch;break;

case'#':

syn=0;token[0]=ch;break;

case'\n':

syn=-2;break;

default:

syn=-1;break;

}

}

voidmain()

{

p=0;

row=1;

cout<<"请输入字符串(字符#是字符串输入结束标志):

"<

do

{

(ch);

prog[p++]=ch;

}

while(ch!

='#');

cout<<"字符串输出结果为:

"<

p=0;

do

{

scaner();

switch(syn)

{

case11:

cout<<"("<

case-1:

cout<<"Errorinrow"<

"<

case-2:

row=row++;break;

default:

cout<<"("<

}

}

while(syn!

=0);

}

2.调试

七、收获(体会)与建议

通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言直接编写此法分析程序。

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2