编译原理词法分析器实验报告Word下载.docx

上传人:b****6 文档编号:16299818 上传时间:2022-11-22 格式:DOCX 页数:15 大小:76.79KB
下载 相关 举报
编译原理词法分析器实验报告Word下载.docx_第1页
第1页 / 共15页
编译原理词法分析器实验报告Word下载.docx_第2页
第2页 / 共15页
编译原理词法分析器实验报告Word下载.docx_第3页
第3页 / 共15页
编译原理词法分析器实验报告Word下载.docx_第4页
第4页 / 共15页
编译原理词法分析器实验报告Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

编译原理词法分析器实验报告Word下载.docx

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

编译原理词法分析器实验报告Word下载.docx

odd

end

then

procedure

=

运算符

2

<

>

*

+

/

:

ident

标识符

3

number

常数

4

分隔符

5

;

.

状态转换图:

①标识符及保留字:

②number:

③关系操作符:

④分隔符:

⑤算术运算符:

使用环境:

Windowsxp下的visualc++6.0

程序测试:

input1:

inta,b;

a=b+2;

input2:

while(a>

=0)

7x=x+6.7E+23;

end;

input3:

begin:

x:

=9

ifx>

0thenx:

=x+1;

whilea:

=0do

b:

=2*x/3,c:

=a;

output1:

3,int

3,a

5,,

3,b

5,;

2,=

2,+

4,2

output2:

1,while

5,(

2,>

4,0

5,)

1,do

errorline3

3,x

4,6.7E+23

1,end

output3:

1,begin

errorline1

2,:

4,9

1,if

1,then

4,1

2,*

2,/

4,3

3,c

测试结果与预期结果一致

源程序代码:

#include<

stdio.h>

string.h>

voidmain()

{

inti=0,j,k=0,state=1,f=0,linenum=1;

chara[11][10]={"

const"

"

var"

call"

begin"

if"

while"

do"

odd"

end"

then"

procedure"

};

charb,d[40]={"

\0"

freopen("

input.txt"

r"

stdin);

output.txt"

w"

stdout);

b=getchar();

while(b!

=EOF)/*判断所输入字符是否为结束符*/

{

if(b=='

'

||b=='

\n'

\t'

)/*滤过空格、换行等分隔符号*/

{if(b='

)linenum++;

b=getchar();

}

elseif((b>

='

a'

&

b<

z'

)||(b>

A'

Z'

))/*识别标识符以及保留字*/

{

d[i++]=b;

while((b>

0'

9'

))

{

d[i++]=b;

b=getchar();

}

for(j=0;

j<

11;

j++)/*查询保留字表确定该单词是否是保留字*/

{if(strcmp(d,a[j])==0)

{printf("

1,%s\n"

d);

k=1;

break;

if(k==0)/*在保留字表中没有查到该单词,是标识符*/

printf("

3,%s\n"

=i;

j++)

d[j]='

\0'

i=0;

k=0;

elseif(b>

)/*识别常数*/

{d[i++]=b;

while(f!

=1){

switch(state){

case1:

if(b>

){

state=1;

d[i++]=b;

b=getchar();

}

elseif(b=='

.'

){state=2;

d[i++]=b;

b=getchar();

E'

){state=4;

elsestate=7;

break;

case2:

state=3;

elsestate=8;

break;

case3:

case4:

if(b=='

+'

-'

){state=5;

elseif(b>

){state=6;

case5:

case6:

case7:

f=1;

break;

case8:

}

if(state==7&

(b<

'

||b>

)&

printf("

4,%s\n"

elseif(state==7&

(b>

))/*数字后接字母的出错控制*/

{

while((b>

b=getchar();

errorline%d\n"

linenum);

elseprintf("

for(j=0;

i=0;

f=0;

elseif(b=='

)/*识别'

、'

和'

*/

printf("

2,%s\n"

i=0;

else

{printf("

{d[i++]=b;

elseprintf("

for(j=0;

d[j]='

*'

/'

)/*识别运算符*/

{printf("

2,%c\n"

b);

('

)'

'

)/*识别分隔符*/

5,%c\n"

else

实验心得:

此次实验让我了解了如何设计、编制并调试词法分析程序,并加深了我对词法分析器原理的理解;

熟悉了直接构造词法分析器的方法和相关原理,并学会使用c语言直接编写词法分析器;

同时更熟练的掌握用c语言编写程序,实现一定的实际功能。

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

当前位置:首页 > 小学教育 > 语文

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

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