编译原理实验1扫描器的设计与实现Word格式文档下载.docx

上传人:b****0 文档编号:13473752 上传时间:2022-10-11 格式:DOCX 页数:30 大小:68.39KB
下载 相关 举报
编译原理实验1扫描器的设计与实现Word格式文档下载.docx_第1页
第1页 / 共30页
编译原理实验1扫描器的设计与实现Word格式文档下载.docx_第2页
第2页 / 共30页
编译原理实验1扫描器的设计与实现Word格式文档下载.docx_第3页
第3页 / 共30页
编译原理实验1扫描器的设计与实现Word格式文档下载.docx_第4页
第4页 / 共30页
编译原理实验1扫描器的设计与实现Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

编译原理实验1扫描器的设计与实现Word格式文档下载.docx

《编译原理实验1扫描器的设计与实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《编译原理实验1扫描器的设计与实现Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

编译原理实验1扫描器的设计与实现Word格式文档下载.docx

}

预测结果:

(513,#)(14,define)(100,pi)(200,3)(514,.)(200,14)(1,void)(2,main)(502,()(503,))

(506,{)(15,double)(100,r)(402,=)(200,2)(514,.)(200,5)(501,;

)(15,double)(100,s)

(402,=)(200,0)(514,.)(200,0)(501,;

)(100,s)(402,=)(100,pi)(416,*)(100,r)(416,*)

(100,r)(501,;

)(12,printf)(502,()(509,"

)(511,%)(100,f)(509,"

)(512,,)(100,s)(503,))

(501,;

)(507,})

1.4.实验内容及步骤

1、输入已给的文本格式的扫描程序Lexical.c文件,然后编译运行,检查修改错误。

2、编译成功后,提示输入C语言测试程序,用回车键查看输出的单词流,即单词符号及其属性。

3、比较自己分析的结果和屏幕上的输出结果。

1.5.实验小结

1、得到的经验。

通过本次实验,我了解了如何设计、编制并调试词法分析程序,加深了对词法分析原理的理解。

同时,在编制和调试程序时要全面考虑,避免漏掉或者错误定义定界符等,造成不必要的错误。

2、遇到的主要问题。

忘记对空格、回车符等定界符进行设置等。

3、改进方案。

(1)char*keywords[15]={"

void"

"

main"

if"

then"

break"

int"

char"

float"

include"

for"

while"

printf"

scanf"

define"

double"

};

(2)case13:

{

flag=14;

status=1;

break;

case14:

flag=15;

(3)case'

.'

:

words[j]=ch;

words[j+1]='

\0'

;

flag=514;

case'

'

words[j]='

flag=250;

\n'

flag=251;

(4)elseif(flag==250||flag==251){

修改前源代码:

#include"

stdio.h"

stdlib.h"

string.h"

inti,j,k,flag,number,status;

/*statuswhichisusetojudgethestringiskeywordsornot!

*/

charch;

charwords[10]={"

"

charprogram[500];

intScan(charprogram[])

char*keywords[13]={"

number=0;

status=0;

j=0;

ch=program[i++];

/*Tohandlethelettlespaceandstab*/

/*handleletters*/

if((ch>

='

a'

)&

&

(ch<

z'

))

while((ch>

words[j++]=ch;

ch=program[i++];

i--;

words[j++]='

for(k=0;

k<

13;

k++)

if(strcmp(words,keywords[k])==0)

switch(k)

case0:

flag=1;

case1:

flag=2;

case2:

flag=3;

case3:

flag=4;

case4:

flag=5;

case5:

flag=6;

case6:

flag=7;

case7:

flag=8;

case8:

flag=9;

case9:

flag=10;

case10:

flag=11;

case11:

flag=12;

case12:

flag=13;

if(status==0)

flag=100;

/*handledigits*/

elseif((ch>

0'

9'

))

)&

number=number*10+(ch-'

);

ch=program[i++];

flag=200;

/*opereationandedgehandle*/

elseswitch(ch)

case'

='

if(ch=='

words[j++]=ch;

words[j]='

flag=401;

else

flag=402;

>

'

flag=403;

flag=404;

<

flag=405;

flag=406;

!

flag=407;

flag=408;

+'

flag=409;

elseif(ch=='

flag=410;

flag=411;

-'

flag=412;

elseif(ch=='

flag=413;

flag=414;

*'

flag=415;

flag=416;

/'

flag=417;

flag=418;

flag=501;

('

flag=502;

)'

flag=503;

['

flag=504;

]'

words[j]=

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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