1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言词法分析器报告 C语言词法分析器构造实验报告.doc

c语言词法分析器报告 C语言词法分析器构造实验报告.doc

时间:2023-07-18 11:51:02

相关推荐

c语言词法分析器报告 C语言词法分析器构造实验报告.doc

C语言词法分析器构造实验报告

02计算机(2) 2002374203 冯绍欣

一、题目要求:

完成一个C语言的词法分析器的构造。此词法分析器能识别附值语句、循环语句、条件语句、并能处理注释。

二、设计方案:

这个词法分析器分析的主要关键字有:main, int, float, char, if, else, for, while, do, switch, case, break; default。选择要分析的c文件,首先对其去掉注释和与空格处理,再根据字符的不同类型分析。

1、全局数据结构:

字符数组 set[ ]:存放从文件中读到的所有字符;

str[ ]:存放经过注释处理和预空格处理的字符;

strtoken[ ]:存放当前分析的字符;

结构体 KEYTABLE:存放关键字及其标号;

全局字符变量 ch:当前读入字符;

全局整型变量 sr, to:数组str, strtoken 的指针。

2、以层次图形式描述模块的组成及调用关系

Main ( )

Main ( )

Analysis ( )

Analysis ( )

S

Set32()

Openfile ( )R

Openfile ( )

Reflesh()

Concat()

GetBC()GetChar()Process()

GetBC()

GetChar()

Process()

Reserve()

Reserve()

IsDigit()

GetChar()

GetChar()

IsLetter()R

IsLetter()

Retract()

3、主要函数的设计要求(功能、参数、返回值):

openfile:打开文件;

GetChar:将下一个输入字符读到ch中,搜索指示器前移一字符位置;

GetBC:检查ch中的字符是否为空白。若是,则调用GetChar直至ch中进入一个非空白字符;

Concat:将ch中的字符连接到strtoken之后;

IsLetter 和IsDigit:布尔函数过程,分别判断ch中的字符是否为字母和数字;

Reserve:整型函数过程,对strtoken中的字符串查找关键字表,若是关键字则返回编码,否则返回-1;

Retract:将搜索指示器回调一个字符位置,将ch置为空白字符;

reflesh:刷新,把strtoken数组置为空;

prearrange1:将注释部分置为空格;

prearrange2:预处理空格,去掉多余空格;

analysis:词法分析;

main:主函数。

4、状态转换图:

61

6

1

字母或数字

字母 非字母或数字

702 数字 数字

7

0

2

非数字

83 字符a

8

3

字符a

94 字符b

9

4

‘ = ’

5 字符c

5

字符a包括:= , & , | , + , --

字符b包括:-- , < , > , | , *

字符c包括:, , : , ( , ) , { , } , [ , ] , ! ,# , % , ” , / , * , + , -- , > ,

三、源代码如下:

#include

#include

char set[1000],str[500],strtoken[20];

char sign[50][10],constant[50][10];

char ch;

int sr,to,id=0,st=0;

typedef struct keytable /*放置关键字*/

{

char name[20];

int kind;

}KEYTABLE;

KEYTABLE keyword[]={ /*设置关键字*/

{"main",0},

{"int",1},

{"floa

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。