编译原理词法分析实验含代码Word下载.doc

上传人:b****2 文档编号:13319753 上传时间:2022-10-09 格式:DOC 页数:8 大小:92.50KB
下载 相关 举报
编译原理词法分析实验含代码Word下载.doc_第1页
第1页 / 共8页
编译原理词法分析实验含代码Word下载.doc_第2页
第2页 / 共8页
编译原理词法分析实验含代码Word下载.doc_第3页
第3页 / 共8页
编译原理词法分析实验含代码Word下载.doc_第4页
第4页 / 共8页
编译原理词法分析实验含代码Word下载.doc_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

编译原理词法分析实验含代码Word下载.doc

《编译原理词法分析实验含代码Word下载.doc》由会员分享,可在线阅读,更多相关《编译原理词法分析实验含代码Word下载.doc(8页珍藏版)》请在冰豆网上搜索。

编译原理词法分析实验含代码Word下载.doc

<

=<

=>

=();

{}

关键字 mainifthenelsewhiledoint(可根据需要添加)

2、根据状态图,设计词法分析函数intscan(),完成以下功能:

1)从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,

2)以二元式形式输出单词<

单词种类,单词属性>

其中单词种类用整数表示:

0:

标识符

1:

十进制整数

2:

八进制整数

3:

十六进制整数

运算符和界符,关键字采用一字一符,不编码

其中单词属性表示如下:

标识符,整数由于采用一类一符,属性用单词表示

运算符和界符,关键字采用一字一符,属性为空

3、编写测试程序,反复调用函数scan(),输出单词种别和属性。

四、实验环境

PC微机

DOS操作系统或Windows操作系统

TurboC程序集成环境或VisualC++程序集成环境

五、实验步骤

1、根据正规式,画出状态转换图;

2、根据状态图,设计词法分析算法;

3、采用C或C++语言,设计函数scan(),实现该算法;

4、编制测试程序(主函数main);

5、调试程序:

读入文本文件program.txt,运行程序得到输出结果result.txt,并检查输出结果是否正确。

六、测试数据

输入数据:

编辑一个文本文件program.txt,在文件中输入一段程序代码,如:

ifdata+92>

0x3fthen

data=data+01;

else

data=data-01;

将输出结果存放在result.txt文件中,输出格式如下:

<

if,->

0,data>

+,->

1,92>

>

->

3,3f>

then,->

=,->

2,1>

;

->

else,->

-,->

2,->

七、实验报告要求

实验报告应包括以下几个部分:

1、词法的正规式描述;

2、变换后的状态图;

3、词法分析程序的数据结构与算法。

【源程序】

#include<

iostream>

#include<

string>

usingnamespacestd;

#defineLENGTH5

charch='

'

stringkey[5]={"

if"

"

then"

else"

while"

do"

};

intIskey(stringc){//关键字判断

inti;

for(i=0;

i<

LENGTH;

i++){

if(key[i].compare(c)==0)return1;

}

return0;

}

intIsLetter(charc){//判断是否为字母

if(((c<

='

z'

)&

&

(c>

a'

))||((c<

Z'

A'

)))return1;

elsereturn0;

intIsLetter1(charc){//判断是否为a~f字母

f'

F'

intIsNum(charc){//判断是否为数字

if(c>

0'

c<

9'

)return1;

elsereturn0;

voidscan(FILE*fpin){

stringarr="

"

while((ch=fgetc(fpin))!

=EOF)

{

arr="

if(ch=='

||ch=='

\t'

\n'

){}

elseif(IsLetter(ch)||ch=='

_'

{

arr=arr+ch;

ch=fgetc(fpin);

while(IsLetter(ch)||IsNum(ch))

{

if((ch<

(ch>

))ch=ch+32;

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

if(Iskey(arr)){cout<

arr<

关键字>

endl;

}

elsecout<

普通标识符>

}

elseif(IsNum(ch))

intflag=0;

if(ch=='

{

arr=arr+ch;

ch=fgetc(fpin);

if(ch>

ch<

7'

){

while(ch>

{

flag=1;

arr=arr+ch;

ch=fgetc(fpin);

}

}

elseif(ch=='

x'

X'

{

flag=2;

arr=arr+ch;

ch=fgetc(fpin);

while(IsNum(ch)||IsLetter1(ch))

arr=arr+ch;

ch=fgetc(fpin);

'

'

){

cout<

整数0>

fseek(fpin,-1L,SEEK_CUR);

if(flag==1)cout<

八进制整数>

elseif(flag==2)cout<

十六进制整数>

}

else

while(IsNum(ch))

arr=arr+ch;

ch=fgetc(fpin);

fseek(fpin,-1L,SEEK_CUR);

cout<

十进制整数>

elseswitch(ch)

{

case'

+'

:

-'

:

*'

/'

cout<

运算符>

break;

('

)'

['

]'

.'

{'

}'

界符>

{ch=fgetc(fpin);

if(ch=='

)cout<

="

else{cout<

fseek(fpin,-1L,SEEK_CUR);

}break;

case'

if(ch=='

)cout<

输入控制符>

else{cout<

fseek(fpin,-1L,SEEK_CUR);

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

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1