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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值