词法分析实验报告实验一.docx

上传人:b****1 文档编号:2081407 上传时间:2023-05-02 格式:DOCX 页数:19 大小:37.44KB
下载 相关 举报
词法分析实验报告实验一.docx_第1页
第1页 / 共19页
词法分析实验报告实验一.docx_第2页
第2页 / 共19页
词法分析实验报告实验一.docx_第3页
第3页 / 共19页
词法分析实验报告实验一.docx_第4页
第4页 / 共19页
词法分析实验报告实验一.docx_第5页
第5页 / 共19页
词法分析实验报告实验一.docx_第6页
第6页 / 共19页
词法分析实验报告实验一.docx_第7页
第7页 / 共19页
词法分析实验报告实验一.docx_第8页
第8页 / 共19页
词法分析实验报告实验一.docx_第9页
第9页 / 共19页
词法分析实验报告实验一.docx_第10页
第10页 / 共19页
词法分析实验报告实验一.docx_第11页
第11页 / 共19页
词法分析实验报告实验一.docx_第12页
第12页 / 共19页
词法分析实验报告实验一.docx_第13页
第13页 / 共19页
词法分析实验报告实验一.docx_第14页
第14页 / 共19页
词法分析实验报告实验一.docx_第15页
第15页 / 共19页
词法分析实验报告实验一.docx_第16页
第16页 / 共19页
词法分析实验报告实验一.docx_第17页
第17页 / 共19页
词法分析实验报告实验一.docx_第18页
第18页 / 共19页
词法分析实验报告实验一.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

词法分析实验报告实验一.docx

《词法分析实验报告实验一.docx》由会员分享,可在线阅读,更多相关《词法分析实验报告实验一.docx(19页珍藏版)》请在冰点文库上搜索。

词法分析实验报告实验一.docx

词法分析实验报告实验一

编译原理词法分析实验报告

软工082班

兰洁

200831104044

一、实验内容

二、实验目的

三、实验预期

四、程序规定

五、实验原理

•程序流程图

•判别浮点功能扩展流程图

•状态转换图

六、程序代码与浮点判别功能扩展

七、测试用例

•扩展功能测试用例;

•普通功能测试用例

八、输出结果

九、实验心得

一、实验内容:

词法分析:

1、识别简单语言的单词符号;

2、识别关键字、标识符、数字、运算符等。

并扩展浮点识别功能。

二、实验目的

调试词法分析程序,加深对词法分析原理的理解,掌握编写简单词法分析程序的一般步骤。

三、实验预期结果:

经过调试源代码程序,程序能够成功运行编译,对输入的简单字符串,能够别关键字、

标识符、数字、运算符等,并且给岀单词符号的对应编码。

四、程序规定:

1、天键子:

function,if,then,while,do,endfunc:

2、算术运算符:

”+”,"-”,”*”,”/”,”二”:

3、关系运算符:

4、界符:

"(""、”甘;

5、标识符规泄以字母开头,字母均为小写;

6、空格和换行符跳过:

7、单词对应编码:

单词符号

对应编码

单词符号

对应编码

单词符号

对应编码

function

1

>

23

==

25

if

2

<

20

!

29

then

3

+

13

26

while

4

14

27

do

5

*

15

28

endfunc

6

/

16

<>

21

标识符

10

>=

24

其他

-1

数字

11

<=

22

浮点数

80

#

0

18

十、实验原理:

输入串〉词法分析程序〉单词符号串

输入:

字符串以#结朿。

输出:

单词的二元组(syn,token/sum)

十•―卜••••卜■r

«-・r

9•■■・'•V•♦■■'•:

■/®Y:

■/:

9J•/■

■■•・■

■••r■7:

■/■/Y:

・<"T•T•~■

■••aa

I

n・n

p・*・4*・》・i*・》W・l

•-T-T-VT-v-r•:

r-r-r-t-r-r

十十

「・:

••厂

炉呃砧他郴匏®4

..

"iWs

I■+

■•••»gF・■

・・・•■■・・•・・・・

••仪

■••PF

•»w»吋w»

II••a

厂厂丁

t-i---

r-t-

十匸

.十十

•r-r-:

-r*

瞑4丄解廊

»•••#•

»•••#•

r-t

r-r-r-t-:

-

H

•lZ

f......T.:

r-t-

n

—;

r-T....r.-

F-4--

--4-4---

4

…"卄!

••;•;」丄…

ir—-4-vr—

irl^lJ.!

rI

L卜

删卿昨S

十卜+

1••••>•••••!

••!

•••••!

••I、•:

•!

•:

••l4—:

•十

Lt~

人一^

p・£・・p•号•£••,・£••》•■•£••》•£•

r-4-~

••J•••

)••••・•••

I|:

I:

r-r-;r.iI;i;Lf~-r~

r-T....f-.

>I:

•:

••严•••

••<・•••••••・■・

I:

II:

I:

II:

I:

II

•••»J»»fi»•••广

/••••/•▼•••

厂叮

厂■•叮

>••••>・{*・;

f••••/•▼•••

/•r**°

•••■•

 

开始

sumint^O;n=O仪Y

sumint-sumint*10+sunil[n]・O:

nT:

4〃计算整数部分

Syn=lI;

suml[k]-ch;ch二prog[++c];

将数字放Buml这个数

组里

r-i

:

.1••:

ch=nrop

4cl:

g・■■

•■■••••••

■Ct”

Jtcnshu[i]-ch;

i++;

4~N—<

••1•

・•••••••

..U.J

1•

...

I•-•

*

••—r*・.・・

•;1•

••■・・Y・・•,•••・•

•:

f•

1••

•••

•1

•I

•・•

调用血呵)函数,用来

判斯浮点数的小数部分

是否充全玻进i&shu这

个数组中

sumf=sumf^0.1+(fenshu[k』卜⑪)检1;竹I•算小数部分

■厂

Syn-80?

N-WsumM):

k=i-2

{・•:

••■•••••・••••••:

1•.•s

•I..:

..;.

••

■・•:

vr•

B

1■9»

、Syn80/>>

调用shU2i()凶埶用来判断浮点数的整数部分是否克全放进suml这个数组巾

X——-fudian-sumini+bumE浮点数计算syn=80;

 

状态转换图

六.程序代码:

/*词法分析源代码柠

#include#include

scaner0;

charprog[80_,token[8」;

charch;

intsyn,p,m,n,sum;

char*rwtab16]={,zfunction"*,"辻"then","while","do","endfunc"};

mainO

{p二0;

printf(z,\npleaseinputstring:

\n");

do{

scanf(,z%c,z,&ch);

prog[++pj=ch;}

while(ch!

二'#');

P二0;

do

{

scaner0;

switch(syn)

//ch取后一个数字

;//这个函数用来分析浮点数的整数部分是否

已经输入到数组里

〃计算整数部分

〃这个函数用来分析浮点数的小数部分是否已经输入到数组里

//计算浮点数的小数部分

〃浮点数计算

//若是整数,ch等于原来的值

else

switch(ch)case*:

m=0;

token[m++]=ch;ch=progL++p];

辻(ch二二'二')

{syn=22;

token[m++]=ch;

}

else

if(ch='>')

{

syn=21;

token[m++]二ch;

}

else

{syn=20;ch=prog[―p]:

}break;

case*>':

m=0;

token[m++]=ch;

ch二prog[++p];

辻(ch二二'二')

{syn=24;

token=ch;

}

else

{syn=23;

ch=prog[―p];

}

break;

case*:

m=0;

token[m++]=ch;ch=progL++p];

if(ch二二'二')

{syn=25;

tokenLm++]=ch;

}

else

{syn=18;

ch二prog-―p];

}

break;

case*!

':

m^O:

token[m++]=ch;

ch二prog[++p];

辻(ch二二'二')

{syn=22;

token[m++]二ch;

}

else

{

syn=-l;

P—;

}

break;

case*+':

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

case*:

syn=14;tokenEO]=ch:

break:

case**':

syn=15;token[0]=ch:

break:

case*/':

syn=16;tokenEO]=ch;break:

case*:

syn=26;token[0]=ch:

break:

case*(':

syn=27;tokenEO]=ch:

break:

case*)':

syn=28;tokenEO]=ch:

break:

case*:

syn=0;token[0]=ch:

break:

default:

syn=-l;

}

}

七.测试用例^

测试用例1

输岀结果

测试用例2

输出结果

测试用例3

输出结果

1+1=2;#

(11,1)

a*b=c;

(10,a)

function

(1,function)

(13,+)

c=l+s2b;

(15,*)

while(a=l)

(4,wh订e)

(11,1)

(10,b)

if(sb>=2)

(27,0

(1&=)

(1&二)

2=s2b;

(10,a)

(11,2)

(10,c)

endfunc

(1&=)

(26,;)

(26,;)

#

(11,1)

(0,#)

(10,c)

(28,))

测试用例4

输岀结果

(1&二)

(2,if)

error

(11,1)

(27,0

~!

@$好&_#

error

(13,+)

(10,sb)

error

(10,s2b)

(24,>=)

error

(26,;)

(11,2)

error

(0,#)

(28,))

error

(11,2)

error

(18,=)

error

(10,s2b)

error

(26,;)

(0,#)

(6,endfunc)

(0,#)

输入数据1

显示结果

输入数据

显示结果

输入数据

显示结果

a+b=l.1;

(10,a)

a=l+2.2

(10,a)

a=l*2.3;

(10,a)

a=2.3#

(13,+)

b=3・2;

(18,=)

2*12.2=24.4#

(18,=)

(10,b)

1+2.3=3.3#

(11,1)

(11,1)

(18,=)

(13,+)

(15,*)

(80,1.100000)

(80,2.200000)

(80,2.300000)

(26,;)

(10,b)

(26,;)

(10,a)

(18,=)

(11,2)

(18,=)

(80,3.200000)

(15,♦)

(80,2.300000)

(26,;)

(80,12.200000)

(0,#)

(11,1)

(18,=)

(13,+)

(80,24.400000)

(80,2.300000)

(18,=)

(80,3.300000)

(o,n)

(o,#)

八、程序输出结果:

-MH:

«译原理\代码记事丰Qebug词法分祈涯代码(wanchenflJ.exB

pieaseinput:

stfingr=a*b=l.±;

卜=2・3tt

<10.a>

<13.*>

<10.b>

<18.=>

<80.1・丄0000

<26.;>

<10.a>

<18.=>

<80.2・300000A

<0,IDPressanyketocontinue

|/・H:

晦译原锂'代玛记爭本\Debum词法分靳潭代码佃anulwng)・aca・

plea.se±npci七:

&七i*in^-

耳=1+2.2

b=3.2;

1*2.3=3.3#

<10.a>

<18,=>

<11.1>

<13,+>

<80,2.200000>

<10,b)

<18,=)

<80,3.200000>

<26,;)

<11,1)

<13,+)

<80,2.300000><18,=>

<80^3.300000>

<0^.tt>Pressctnj/keytoconi:

inue

“"H:

炉译原理玛左l事本gebug阖法分折灌代码tvuanulwngheKe"

pledase:

inputst:

tiding

L=l*2-3;

2*±2.2=24.4#<10,

<18,=>

<11,1>

<15,*)<80,2-300000>

;〉

<11,2)<15,*>

<80,12.260003><18,=>

<80,24.400000)<0,.lt>Pi:

*essa.nykeytoconf:

inLie

普通功能测试用例显示结果

九、实验心得

通过编译原理实验一词法分析实验,使得自己对词法分析的流程有了更深刻的了解,虽然源代码并非由自己设讣,但是在调试程序的过程中,尤其是进行测序功能扩展的过程中,想了很多种办法,终于找到了最合适的方法,而且还进行了代码的优化,这个过程虽然有时有些枯燥,但是更多时候是欣喜的,不仅复习了C语言的许多内容,并且有了更深的理解。

很好的理解了程序的思想,理淸了词法分析程序的思路。

从一开始对程序的陌生,到后来逐步了解程序的流程,当我耐心的一步一步理解程序思想,一次次的更改测试用例,一迪遍的调试,最终终于得到了预期的答案。

这次实验使我对理论的词法分析的理解更加具体淸晰,收获很大。

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

当前位置:首页 > 工程科技 > 能源化工

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

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