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

c语言词法分析器报告,C语言词法分析器构造实验报告.doc相关推荐

  1. 哈工大 c语言测试与系统控制 ad,哈工大——c语言在测量与控制中应用实验报告.pdf...

    哈工大--c语言在测量与控制中应用实验报告 Harbin Institute of Technology Harbin Institute of Technology C 语言在测量与控制中的 C 语 ...

  2. 五猴分桃c语言课程设计,c语言程序设计五猴分桃问题实验报告.doc

    c语言程序设计五猴分桃问题实验报告.doc 课程设计报告学院.系:吉林大学珠海学院计算机科学与技术系专业名称:软件工程课程设计科目C语言程序课程设计所在班级:10班学生学号:04121010学生姓名: ...

  3. c语言五猴分桃案例分析,C语言程序设计五猴分桃问题实验报告.doc

    C语言程序设计五猴分桃问题实验报告 课 程 设 计 报 告 学院.系:吉林大学珠海学院计算机科学与技术系专业名称:软件工程课程设计科目C语言程序课程设计所在班级:10班学生学号:学生姓名:赵学文指导教 ...

  4. c++语言程序设计教程与实验实验报告,C++程序设计课程设计实验报告—网络五子棋...

    C++程序设计课程设计实验报告-网络五子棋 计算机学院 实验报告 课程名称: C++程序设计课程设计 开课学期: 2010-2011学年第2学期 院 班: 计算机学院 093 指导老师: 项目题目: ...

  5. 计算机组装与维护预实验报告,计算机组装与维护实验报告.doc

    计算机组装与维护实验报告计算机组装与维护实验报告 江西公安专科学校 实 验 报 告 课程名称 年级专业 学 号 姓 名 \ 实 验 报 告 说 明 1.实验项目名称:要用最简练的语言反映实验的内容.要 ...

  6. linux用户和组管理的实验报告,linux用户管理任务实验报告

    linux用户管理任务实验报告 <实用操作系统>实验报告 实验报告:实验项目名称:用户管理任务 班级:学号:姓名: 地点:时间: 实验内容: 一.用户管理 (一)添加用户useradd 1 ...

  7. 堰流实验报告思考题_水力学的实验报告2篇

    水力学的实验报告2篇 水力学的实验报告1 本学期我们进行了七周的水力学实验,从这些实验中我学到了很多. 例如,所有实验都是需要耐心地去测量一组一组的数据,还需要在实验后认真处理核对每一组数据.这些实验 ...

  8. 用MATLAB拟合实验报告,MATLAB插值与拟合实验报告材料

    <MATLAB插值与拟合实验报告材料>由会员分享,可在线阅读,更多相关<MATLAB插值与拟合实验报告材料(9页珍藏版)>请在人人文库网上搜索. 1.实用标准文档文案大全CEN ...

  9. 计算机大机实验报告,大学计算机一实验报告二大学算机一实验报告二大学计算机一实验报告二大学计算机一实验报告二.doc...

    大学计算机一实验报告二大学算机一实验报告二大学计算机一实验报告二大学计算机一实验报告二 广东金融学院实验报告 课程名称:大学计算机Ⅰ 实验编号 及实验名称实验二中文Word 2010 实验系 别姓 名 ...

最新文章

  1. ArrayList原理分析(重点在于扩容)
  2. 英语口语-文章朗读Week10 Monday
  3. 操作系统之内存管理:3、基本分页存储管理
  4. linux 安全防护管理
  5. python重命名文件夹下所有文件_Python3.4.3重命名当前文件夹下的文件
  6. 进程的定义组成组织方式特征
  7. pytorch项目代码总结
  8. Delphi TBitmap Scanline
  9. 区块链技术将有可能彻底颠覆音乐行业,思想启迪+P2Ptech,end
  10. OpenCV2中矩阵的归一化 normalize函数详解
  11. 《鸟哥Linux私房菜》 全套视频和PDF资料—— 老段带你学鸟哥Linux视频课程
  12. sql按照字符串格式拼接
  13. 1582年10月份日历表_1582年10月发生了什么 日历为什么凭空少了十天
  14. 电脑桌面图标变成长方形咋办_为什么我的界面上的图标全部被一个长方形的图标覆盖了?...
  15. log4j不打日志问题之实战解决方案(二)
  16. STM32精英版(正点原子STM32F103ZET6开发板)学习篇12——电容触摸按键实验
  17. 被奇安信青睐的火绒 究竟有着怎样的魔力?
  18. C#如何新建Excel
  19. 微信小程序java美食厨房食谱大全分享系统
  20. 解决‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

热门文章

  1. bean的加载-配置文件的解析
  2. 数制转换的概念和转换
  3. java 之文件输入输出流
  4. 宏杉科技的第一,不是魔术变出来的
  5. PHP 蒙太奇马赛克拼图,轻松制作蒙太奇马赛克拼图效果的AndreaMosaic,让你的照片与众不同...
  6. linux centos 解压 tar.bz2文件
  7. 推荐两款Linux服务器连接的好工具
  8. Spring--BeanUtils工具类--使用/实例
  9. cad中lisp文件给恶作剧_求大神们帮忙更改下CAD 的lsp 文件 小弟谢谢啦
  10. 计算机基础-程序设计基础