词法分析程序构造原理以及实现方法Word文档下载推荐.docx

上传人:b****2 文档编号:14268888 上传时间:2022-10-21 格式:DOCX 页数:14 大小:17.97KB
下载 相关 举报
词法分析程序构造原理以及实现方法Word文档下载推荐.docx_第1页
第1页 / 共14页
词法分析程序构造原理以及实现方法Word文档下载推荐.docx_第2页
第2页 / 共14页
词法分析程序构造原理以及实现方法Word文档下载推荐.docx_第3页
第3页 / 共14页
词法分析程序构造原理以及实现方法Word文档下载推荐.docx_第4页
第4页 / 共14页
词法分析程序构造原理以及实现方法Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

词法分析程序构造原理以及实现方法Word文档下载推荐.docx

《词法分析程序构造原理以及实现方法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《词法分析程序构造原理以及实现方法Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

词法分析程序构造原理以及实现方法Word文档下载推荐.docx

设计方法 

7

3.2.1 

总体结构图 

3.2.2 

主程序判读部分流程图 

8

程序测试 

9

4.1 

测试用例 

4.2 

测试结果 

程序源码 

1程序功能描述

1.1输入输出

1.1.1输入

输入为一个写有字符串的txt文件。

程序读入txt文件,并进行操作。

1.1.2输出

输出为一个写有二元组(syn,String)的txt文件。

其中二元组(syn,String) 

syn为单词符号的类别编码,

String为单词符号字符串

例:

输入txt中含有:

<

<

>

:

=

输出txt中二元组应为(26,<

),(28,<

),(30,:

=)

在输入的txt:

ceshi.txt中写入:

在程序中输入文件名,程序运行完毕

在输出的jieguo.txt中显示出来二元组即为:

(26,<

)(28,<

)(30,:

=)\

1.2大小写不敏感

对字母的大小写不进行区分,所输出的二元组都是以小写形式输出。

1.3查错功能

当输入串为未定义的字符时,在输出文件中显示“不能识别的字符”。

例如:

当输入文件中有未定义的字符“#”的时候

输入文件如下:

1.4注释功能

当输入文件中出现了/*的字符串之后,程序会自动忽略之后的输入字符串,直到遇到*/。

当输入中含有/*的时候:

输入:

程序只会输出/*,之后的部分便会全部省略。

2主要数据结构

本程序仅由一个main函数组成,未定义以及调用子程序。

在程序中利用了字符数组来实现了输入字符串的读入。

3程序结构描述

3.1单词符号类别编码

单词符号

种别码

单词符号

begin

1

无符号整数

16

end

2

+

17

If

3

-

18

then

4

*

19

else

5

;

20

for

6

21

do

7

22

while

8

23

and

9

24

or

10

25

not

11

26

标识符

15

27

28

:

29

30

/

31

/*

32

3.2设计方法

3.2.1总体结构图

3.2.2主程序判读部分流程图

4程序测试

4.1测试用例

1.beginEgib2876

2.+-<

=>

=:

#

3./*shdaohfoi*/shi

4.2测试结果

1.

2.

3.

5程序源码

#include<

stdio.h>

conio.h>

string.h>

stdlib.h>

ctype.h>

voidwordanalysis(FILE*fin,FILE*fout)

{

chararr[200];

charch;

inti=0;

//字符

intj=0;

//数字

char*keyword[11]={"

begin"

"

end"

if"

then"

else"

for"

do"

while"

and"

or"

not"

};

intsyn;

intsyb=1;

while

(1) 

//判断是否读到末尾

ch=fgetc(fin);

if(feof(fin)){

syb=0;

break;

}

if(ch=='

'

||ch=='

){

//

}

elseif(isalpha(ch)){

printf("

a"

);

ch=tolower(ch);

while(isalpha(ch)||isdigit(ch)){

if(isalpha(ch)){

arr[i]=ch;

i++;

if(ch==EOF){syb=0;

b"

fseek(fin,-1L,SEEK_CUR);

char*temp=(char*)malloc(i+1);

memcpy(temp,arr,i);

temp[i]='

\0'

i=0;

syn=15;

for(intn=0;

n<

11;

n++)

if(strcmp(temp,keyword[n])==0)

syn=n+1;

fprintf(fout,"

(%d,%s)"

syn,temp);

elseif(isdigit(ch)){

while(isdigit(ch)){

arr[j]=ch;

j++;

fscanf(fin,"

%c"

&

ch);

if(feof(fin)){syb=0;

char*temp2=(char*)malloc(j+1);

memcpy(temp2,arr,j);

temp2[j]='

j=0;

syn=16;

syn,temp2);

if(syb==0){break;

switch(ch){

case'

+'

syn=17;

(%d,%c)"

syn,ch);

-'

syn=18;

*'

syn=19;

'

syn=20;

('

syn=21;

)'

syn=22;

='

syn=23;

syn=24;

else{

syn=25;

syn,"

="

fseek(fin,-2L,SEEK_CUR);

ch=fgetc(fin);

syn=26;

syn=27;

elseif(ch=='

syn=28;

"

syn=29;

syn=30;

/'

syn=31;

syn=32;

/*"

while

(1){

if(ch=='

#'

不能识别的字符。

voidmain(){

intnum=10;

char*filename=newchar[100];

FILE*fout=fopen("

jieguo.txt"

w"

memset(filename,'

100);

输入文件名:

scanf("

%s"

filename);

FILE*fin=fopen(filename,"

r"

wordanalysis(fin,fout);

fclose(fout);

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

当前位置:首页 > 高等教育 > 院校资料

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

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