编译原理-词法分析器-实验报告Word文件下载.doc

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

编译原理-词法分析器-实验报告Word文件下载.doc

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

编译原理-词法分析器-实验报告Word文件下载.doc

=

运算符

2

<

>

*

+

/

:

ident

标识符

3

number

常数

4

分隔符

5

;

.

状态转换图:

①标识符及保留字:

Start

letter

letterordigitt

②number:

7

6

start

other

digit

E

+|-

③关系操作符:

(<

=,2)

2)

2)

(=,2)

(>

(>

(:

=,2)

④分隔符:

(;

5)

((,5)

(),5)

(,,5)

(.,5)

⑤算术运算符:

(+,2)

(-,2)

(*,2)

(/,2)

使用环境:

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

freopen("

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;

b=getchar();

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;

b=getchar();

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:

if(b>

state=3;

elsestate=8;

break;

case3:

elseif(b=='

elsestate=7;

case4:

if(b=='

+'

-'

){state=5;

elseif(b>

){state=6;

elsestate=8;

break;

case5:

break;

case6:

elsestate=7;

case7:

f=1;

break;

case8:

}

}

if(state==7&

(b<

'

||b>

)&

printf("

4,%s\n"

elseif(state==7&

(b>

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

{

while((b>

{d[i++]=b;

b=getchar();

}

errorline%d\n"

linenum);

}

elseprintf("

f

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

当前位置:首页 > 党团工作 > 其它

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

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