课程设计词法分析器Word格式文档下载.docx

上传人:b****2 文档编号:14955835 上传时间:2022-10-26 格式:DOCX 页数:13 大小:281.45KB
下载 相关 举报
课程设计词法分析器Word格式文档下载.docx_第1页
第1页 / 共13页
课程设计词法分析器Word格式文档下载.docx_第2页
第2页 / 共13页
课程设计词法分析器Word格式文档下载.docx_第3页
第3页 / 共13页
课程设计词法分析器Word格式文档下载.docx_第4页
第4页 / 共13页
课程设计词法分析器Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

课程设计词法分析器Word格式文档下载.docx

《课程设计词法分析器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计词法分析器Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

课程设计词法分析器Word格式文档下载.docx

7.心得体会12

8.小组成员任务分配及工作进度安排12

1.需求分析

1.1问题描述

本次课程设计旨在是设计并实现一个具体的词法分析程序,加深对词法分析的原理的理解。

该词法分析程序能输入源程序并输出单词符号。

在扫描源程序字符串时,一旦识别出关键字、分隔符、标识符、无符号常数中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。

每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。

1.2基本要求

1.对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单词类型,单词符号)显示;

2.可以将要分析的程序保存到文件中进行读取;

3.删除无用的空白字符、回车符、及其它非实质性符号。

2.概要设计

2.1待分析的简单语言词法

(1)关键字"

main"

"

void"

int"

char"

printf"

scanf"

else"

if"

return"

(2)运算符:

"

+"

-"

*"

/"

="

(3)界符:

{"

}"

["

]"

;

."

("

)"

:

(4)其他标记如字符串,表示以字母开头的标识符。

(5)空格、回车、换行符跳过。

2.2主要函数

intIsAlpha(charc)//判断是否为字母

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

intIsKey(char*Word)//识别关键字函数

voidscanner(FILE*fp)//扫描函数

3.详细设计

#include<

string.h>

stdio.h>

stdlib.h>

ctype.h>

char//定义关键字

*Key[10]={"

};

charWord[20],ch;

//存储识别出的单词流

intIsAlpha(charc)//判断是否为字母

{

if(((c<

='

z'

)&

&

(c>

a'

))||((c<

Z'

A'

)))return1;

elsereturn0;

}

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

if(c>

0'

c<

9'

)return1;

intIsKey(char*Word)//识别关键字函数

intm,i;

for(i=0;

i<

9;

i++)

{

if((m=strcmp(Word,Key[i]))==0)

{

if(i==0)

return2;

return1;

}

}

return0;

voidscanner(FILE*fp)//扫描函数

charWord[20]={'

\0'

charch;

inti,c;

ch=fgetc(fp);

//获取字符,指针fp并自动指向下一个字符

if(IsAlpha(ch))//判断该字符是否是字母

Word[0]=ch;

ch=fgetc(fp);

i=1;

while(IsNum(ch)||IsAlpha(ch))//判断该字符是否是字母或数字

Word[i]=ch;

i++;

ch=fgetc(fp);

Word[i]='

//'

代表字符结束(空格)

fseek(fp,-1,1);

//回退一个字符

c=IsKey(Word);

//判断是否是关键字

if(c==0)printf("

%s\t$普通标识符\n\n"

Word);

//不是关键字

elseif(c==2)printf("

%s\t$主函数\n\n"

elseprintf("

%s\t$关键字\n\n"

//输出关键字

else//开始判断的字符不是字母

if(IsNum(ch))

{//判断是否是数字

Word[0]=ch;

i=1;

while(IsNum(ch)){

Word[i]=ch;

i++;

ch=fgetc(fp);

Word[i]='

fseek(fp,-1,1);

//回退

printf("

%s\t$无符号实数\n\n"

else//开始判断的字符不是字母也不是数字

switch(ch){

case'

['

]'

('

)'

{'

}'

'

'

printf("

%s\t$界符\n\n"

break;

+'

ch=fgetc(fp);

Word[1]=ch;

if(ch=='

){

printf("

%s\t$运算符\n\n"

//运算符“+=”

}

elseif(ch=='

//判断结果为“++”

else{

fseek(fp,-1,1);

//判断结果为“+”

break;

-'

//判断结果为“--”

//判断结果为“-”

*'

/'

!

if(ch=='

printf("

<

Word[1]=ch;

//判断结果为运算符“<

=”

//判断结果为“<

}

case'

>

)printf("

fseek(fp,-1,1);

%'

){printf("

if(IsAlpha(ch))printf("

%s\t$类型标识符\n\n"

%s\t$取余运算符\n\n"

default:

无法识别字符!

\n\n"

);

}

main()

////////////////////////////////////////////////////////////////////////////////\n\n"

printf("

/**********************************词法分析器**********************************/\n\n"

/*编译原理课程设计*/\n\n"

/*0901班侯阳琳李彩凤芦光霞张进*/\n\n"

charin_fn[30];

//文件路径

FILE*fp;

\n请输入源文件名(包括路径和后缀名):

while(true){

gets(in_fn);

//scanf("

%s"

in_fn);

if((fp=fopen(in_fn,"

r"

))!

=NULL)break;

//读取文件内容,并返回文件指针,该指针指向文件的第一个字符

elseprintf("

文件路径错误!

请重新输入:

\n*******************词法分析结果如下*******************\n"

do{

if(ch=='

#'

)break;

//文件以#结尾,作为扫描结束条件

elseif(ch=='

'

||ch=='

\t'

\n'

){}//忽略空格,空白,和换行

else

//回退一个字节开始识别单词流

scanner(fp);

}while(ch!

return(0);

4.调试与分析

4.1解析源文件

voidmain()

inta=3;

a+=b;

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

当前位置:首页 > PPT模板

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

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