编译原理实验报告1Word文件下载.docx

上传人:b****3 文档编号:15885398 上传时间:2022-11-16 格式:DOCX 页数:25 大小:69.09KB
下载 相关 举报
编译原理实验报告1Word文件下载.docx_第1页
第1页 / 共25页
编译原理实验报告1Word文件下载.docx_第2页
第2页 / 共25页
编译原理实验报告1Word文件下载.docx_第3页
第3页 / 共25页
编译原理实验报告1Word文件下载.docx_第4页
第4页 / 共25页
编译原理实验报告1Word文件下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

编译原理实验报告1Word文件下载.docx

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

编译原理实验报告1Word文件下载.docx

63||

1整型常量

22sho

43--

64?

:

2auto

23sig

44-

65=

3brea

24siz

45*

66+=

4case

25sta

46&

67-=

5char

26str

47/

68*=

6cons

27swi

48%

69/=

7cont

28typ

49+

70%=

8defa

29uni

50-

71>

>

=

9do

30uns

51<

<

72<

10dou

31voi

52>

73&

11els

32vol

53<

74^=

12enu

33whi

54<

75|=

13ext

34(

55>

76,

14flo

35)

56>

77'

15for

36[

57==

78;

16got

37]

58!

79:

17if

38->

59&

80\{

18int

39.

60^

81}

19lon

40!

61|

82//

20reg

41~

62&

&

3、关键数据结构的描述

计数器count:

将二元组写入文件时通过count判断是否是首次写入,若是则清空文件,否则追加写入;

字符串常量endStr:

其值为“end”,在分析判断每一单词的种类时,该字符串作为rwtab表的结束标志;

数组prog[200]:

暂存从文件中读取的源程序代码,该词法分析器约定源代码长度不超过199;

数组token[20]:

暂存每次分离出的单个具有独立意义的单词,该词法分析器约定每个单词的长度不超过19;

结构体result:

存放一个单词的种别码和单词本身的值,在写入文件时以结构体中的元素为单位依次写入;

4、程序结构的描述

本程序采用结构化设计方法,共有两个文件,六个模块,分别介绍如下:

rwtab.h文件包含一个模块,即各种单词符号对应的种别码,作为外部文件被main.cpp文件引用。

main.cpp文件包含以下五个平行模块:

1)main()函数:

程序入口,控制整个程序的执行流程;

2)scanner()函数:

词法扫描程序;

3)print()函数:

由main()函数调用,判别每一个已识别单词的种类,并将其以结构体形式标准化;

4)readFromFile()函数:

由main()函数调用,将源程序代码读出,并暂存至数组prog[200]中;

5)writeToFile()函数:

由main()函数调用,把标准的二元组写入文件中。

三、程序运行截屏

四、源代码

#include<

stdio.h>

#include<

stdlib.h>

#include"

ctype.h"

string.h"

/**************************************判断字符区域*开始********************************************/

intcharacters_exist=0;

/*用来判断是否是纯数字*/

intcountoffinal=0;

/*finalresult函数执行的次数*/

intword(charch)/*判断是否为字母*/

{

intch_exist=0;

if(isalpha(ch))

{

ch_exist=1;

characters_exist=1;

}

return(ch_exist);

}

intdigit(charch)/*判断是否为数字*/

{

intdig_exist=0;

if(isdigit(ch))

dig_exist=1;

return(dig_exist);

intdelimiter(charch)/*判断是否是分界符*/

intdel_exist=0;

inti;

chardelimiters[13]={'

+'

'

-'

*'

/'

;

'

('

)'

='

'

#'

};

for(i=0;

i<

13;

i++)

if(ch==delimiters[i])

{

del_exist=1;

break;

}

}

return(del_exist);

intkeywordcompare(charkey[],charkeyword[])/*比较关键字*/

intm=0;

intequal=1;

while(keyword[m]!

if(key[m]==keyword[m])m++;

else

{

equal=0;

break;

}

return(equal);

intkeyword(charkey[])/*判断是否是关键字*/

charifkeyword[3]={'

i'

f'

charelsekeyword[5]={'

e'

l'

s'

charthenkeyword[5]={'

t'

h'

n'

charforkeyword[4]={'

o'

r'

charwhilekeyword[6]={'

w'

chardokeyword[3]={'

d'

charandkeyword[4]={'

a'

charnotkeyword[4]={'

charorkeyword[3]={'

intkeyword_exist=0;

if(keywordcompare(key,ifkeyword)||keywordcompare(key,elsekeyword)||keywordcompare(key,thenkeyword)||keywordcompare(key,forkeyword)||keywordcompare(key,whilekeyword)||keywordcompare(key,dokeyword)||keywordcompare(key,andkeyword)||keywordcompare(key,notkeyword)||keywordcompare(key,orkeyword))

keyword_exist=1;

return(keyword_exist);

/**************************************判断字符区域*结束********************************************/

/**************************************写入文件区域*开始********************************************/

voidwritetofile(charcha[])/*将数组cha[]写入文件Dualistic_formula*/

inti=0;

intnumberofspace=0;

/*用来实现写入文件时跳过过多的空格*/

FILE*fpa;

if((fpa=fopen("

Dualistic_formula"

"

a"

))==NULL)

printf("

cannotopenfileDualistic_formula\n"

);

exit(0);

while(cha[i]!

numberofspace<

=1)/*数组不结束且连续空格数最多为2时满足循环条件*/

if(cha[i]=='

)numberofspace++;

else

numberofspace=0;

fputc(cha[i],fpa);

i++;

fclose(fpa);

voidkeywordtofile(charcha[])/*将关键字写入文件keyword*/

keyword"

cannotopenfilekeyword\n"

if(cha[i]=='

voidwordstofile(charcha[])/*将标识符写入文件words*/

words"

cannotopenfilewords\n"

=1)/*数组不结束且连续空格数最多为2时满足循环条件*/

voiddigittofile(charcha[])/*将数字写入文件digit*/

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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