- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言词法分析器的设计与实现
C语言词法分析器的设计与实现
一.实验目的:
1.强化对系统软件综合工程实现能力、规划能力的训练;
2.加强对词法分析原理、方法和基本实现技术的理解;
二.实验内容:
用C语言(或 C++ )作为宿主语言完成:
C语言(ANSI C或turbo C 2.0)词法分析器的设计和实现。
三、程序简要说明:
1、属性字说明:
共9种
KEYWORD: 关键字
auto,break,case,char,const,continue,
default,do,double,else,enum,extern,
float,for,goto,if,int,long,register,
return,short,signed,sizeof,static,struct,
switch,typedef,union,unsigned,void,
volatile,while,include,define
共34个
详见IsKeyWord()函数
NUMBER: 数字
包括十进制整数,八进制整数,二进制整数,十六进制整数
还可返回几种错误
详见IsNumber()函数
CONSTANT: 常量
宏定义标识符,不识别C++关键字const,简单处理一层宏定义。
详见IsDefined()函数
ERROR: 错误
可以识别几种简单的错误,数字四种,单双引号不匹配,注释符不匹配等。
FUNCTIONNAME: 函数名
可以识别自定义函数和库函数,不识别C++语法
详见IsFunctionName()函数
VARIABLE: 变量名
所有其他属性字特征之外的属性
TRANSLATION: 转义字符
\b, \n, \r, \t, \, \, \0, \\, \v, \a, \o, \x共12个
详见源代码417-444行
OPERATOR: 运算符
+-*/%等
INCLUDEFILE: 包含的文件
#include 或””中的字符串
详见IsInclude()函数
2、原程序主要流程:
源程序使用纯C语法,提供了一个字符界面,重写了scanf(源程序中为scanff())函数,以方便用户界面的交互。
总流程:
分析并生成终结果文件流程:
3、主要数据结构:
本程序大量采用缓冲机制,这样做的好处显而易见,提高了程序的执行效率,简化了代码编写的难度,最重要的是,缓解了C语言对内存支配限制的压力。
文件打开以后,对行设立行缓冲区,对属性字设置属性字缓冲区,同时对于判断中的常量储存,关键字存储均以缓冲提供进算法,程序没有任何全局变量,初始化界面后,程序只有一个入口getFileName();这是用户界面与核心程序之间的接口,而程序的核心算法同样只有一个接口analyse(),接口提供的参数只是文件的文件名,这样做的好处是,程序通过analyse()可以随处使用。
另外程序设置了大量的函数,在获得完整的属性字后,通过函数判断属性,并返回属性编号,在输出时,并未对编号进行处理,因为程序之后并没有更进一步的语法分析衔接。
判断采用自动机理论,满足终态条件则返回以获得的属性字。
程序在输出上同样提供了非常人性化的设置,如输出先输出每一行的内容,之后在列出属性字流。
4、部分附加功能处理技巧说明:
由于程序配合了行列号的输出,行号非常容易处理,但是列号要涉及很多空格,回车,制表符等,其中最难处理的是制表符,制表符的长度在判断算法中为8,则通过语句
col += ((TAB - (*col+1) % TAB) % TAB);
可以使col获得期望中的列号。
对单层宏定义,则必然是#define * *的格式,算法将第一个*中的内容存入数组(definebuf),后面接一个空白符,再存入第二个*的内容
definebuf的结构
对函数名的判断,这个算法并不是简单的字符串匹配,而是要看这个标识符后面的内容,
由于程序对单行判断,除多行注释,并未提供匹配记忆,所以对于一下写法程序无能为力
printf /*******函数调用信息另起了一行,将不能正确识别*******/
(“abcd”);
所以在使用本程序时,请提供尽量规范的代码
对于C++语法规则int i(3);程序将会把i判断为函数名,所以请使用标准C语言的代码。本人能力有限,
您可能关注的文档
- 2017年赴加州大学伯克利分校暑期学分课程项目的通知.doc
- 2017年辽宁高考物理综合提升三.doc
- 2017年贵州高考物理复习检测:机械能.doc
- 2017年贵州高考化学综合巩固提升四.doc
- 2017年贵州高考物理复习检测:电磁感应.doc
- 2017年贵州高考物理复习检测:牛顿运动定律.doc
- 2017年辽宁高考物理综合提升九.doc
- 2017年辽宁高考物理综合提升二.doc
- 2017年重庆高考物理基础提升训练二.doc
- 2017年重庆高考物理基础提升训练七.doc
- 辽宁省丹东市凤城市通远堡高级中学2024届高三毕业年级第二模拟考试数学试题.doc
- 辽宁省辽南协作校2024年高三5月模拟数学试题试卷.doc
- 辽宁省辽阳县集美学校2024年高三下学期第一次月考.doc
- 辽宁省葫芦岛第六高级中学2024届高三一模试题(数学试题文)试题.doc
- 辽宁省辽师大附中2024届高三(下)4月月考数学试题试卷.doc
- 辽宁省抚顺十中2023-2024学年高三4月综合测试(二模)数学试题试卷.doc
- 辽宁省抚顺市第十二中学2024年高中毕业生复习统一检测试题数学试题试卷.doc
- 辽宁省阜新市阜蒙县育才高级中学2024年高三第二次质量测试(5月)数学试题试卷.doc
- 辽宁省两校联考2023-2024学年第二学期高三期末调研测试(一模)数学试题试卷.doc
- 辽宁省抚顺市第十九中学2024年高三三校联合测试数学试题试卷.doc
最近下载
- 马工程《人力资源管理》章节知识点-核心要点.doc
- 金相检验-变形铝合金的相鉴别.pptx VIP
- NB_T 47015-2023 压力容器焊接规程.pdf
- 统编版(2024新版)一年级上册道德与法治第一、二单元1-8课 共8课时教学设计.docx
- 数据资产管理平台用户使用手册说明书.pdf VIP
- 林业有害生物发生及成灾标准-森林病虫害防治.doc VIP
- 22J403-1楼梯栏杆栏板.pptx VIP
- 2023年中国电信解决方案支撑经理认证考试题库大全-上(单选题汇总).pdf VIP
- NB∕T 10179-2019 -煤矿在用高压开关设备电气试验规范.pdf
- 培训课件-糖尿病肾病腹膜透析.ppt
文档评论(0)