词法分析程序的构造

上传人:go****e 文档编号:131395816 上传时间:2020-05-07 格式:DOC 页数:15 大小:482.50KB
返回 下载 相关 举报
词法分析程序的构造_第1页
第1页 / 共15页
词法分析程序的构造_第2页
第2页 / 共15页
词法分析程序的构造_第3页
第3页 / 共15页
词法分析程序的构造_第4页
第4页 / 共15页
词法分析程序的构造_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《词法分析程序的构造》由会员分享,可在线阅读,更多相关《词法分析程序的构造(15页珍藏版)》请在金锄头文库上搜索。

1、通达学院 专业课程设计 II 题 目 词法分析程序的构造 专 业 计 算 机 通 信 学 生 姓 名 班 级 学 号 28 班 09002801 指 导 教 师 徐 佳 指 导 单 位 计算机学院计算机科学与技术系 日 期 2012 11 12 2012 11 23 教教师师评评语语 同学出勤率 满勤 较高 一般 较低 学习 态度 端正 较端正 一般 较差 程序设计基础 好 较好 一般 较差 演示程序 已经 没有 达到了基本 要求 算法设计 好 较好 一般 界面友好程度 好 较好 一般 答辩过程中回答问题 准确 较 准确 错误率较高 撰写报告格式 规范 一般 内容 丰满 简单 表述 清晰 一般

2、 不清楚 圆满 较好 基本 完成了课题任务 教师签名 教师签名 年年 月月 日日 成成 绩绩 评评 定定备备 注注 词法分析程序的构造词法分析程序的构造 一 一 课题内容和要求课题内容和要求 通过状态转换图构造 C 或者 PASCAL 语言子集的词法分析程序 原理解析 选取语言 例如选取了 C 语言 选取其中一个子集 例如包含了部分 关键字 main float if for 等等 特殊符号 等等 特殊定 义的标识符变量以及部分常量等 采用 编译原理 词法分析中有穷 自动机的思想构建出该语言子集的状态转换图 并编码实现 基本要求 1 将选取的语言子集编写一个简单程序 放在一个文本文件中 2 要

3、将一个个单词区分清楚并归类 例如 for 属于关键字 二 需求和思路分析二 需求和思路分析 本课题是用 C 语言设计 选取的是 C 语言子集 编写对简单语言进行词法 分析的词法分析程序 1 识别子集中的关键字 标识符 常数 运算符和分界符等 2 对子集中的字符类型进行归类 三 概要设计三 概要设计 1 状态转换图 2 核心代码 1 定义 char cbuffer char keyword 14 if else for while do float return break continue int void main const printf 关键字 char border 8 分隔符 cha

4、r arithmetic 6 运算符 char relation 7 关系运算符 char lableconst 80 标识符 2 函数调用 search char searchchar int wordtype 查找类型 alphaprocess char buffer 字符处理过程 digitprocess char buffer 数字处理过程 otherprocess char buffer 分隔符 运算符 逻辑运算符等 main 主函数 3 状态类型 状态转换图的形式 每个状态对应一个带标号的 case 语句 转向边对应 goto 语句 switch wordtype case 1 f

5、or i 0 i 13 i 关键字 if strcmp keyword i searchchar 0 return i 1 return 0 case 2 for i 0 i 7 i 分隔符 if strcmp border i searchchar 0 return i 1 return 0 case 3 for i 0 i 5 i 运算符 if strcmp arithmetic i searchchar 0 return i 1 return 0 case 4 for i 0 i 6 i 关系运算符 if strcmp relation i searchchar 0 return i 1

6、 return 0 case 5 for t 40 t constnum t 常数 if strcmp searchchar lableconst t 0 判断该常数是否已出现过 return t 1 lableconst t 1 char malloc sizeof searchchar 为新的元素分配内存 空间 strcpy lableconst t 1 searchchar 为数组赋值 lableconst 指针数组名 constnum 常数个数自加 return t case 6 for i 0 i lableconstnum i if strcmp searchchar lablec

7、onst i 0 判断标识符是否已出现过 return i 1 lableconst i 1 char malloc sizeof searchchar strcpy lableconst i 1 searchchar lableconstnum 标识符个数自加 return i 5 单字符判断 if otypetp search othertp 3 判断该运算符是否是由连续的两个字符组成 的 cout row row String othertp t t t 运算符 endl fp get buffer goto out else 单字符逻辑运算符 othertp 1 0 cout row

8、row String othertp t t t 逻辑运算符 endl goto out 四 详细设计四 详细设计 实验环境 visual C 6 0 win7 系统 源程序代码 include include include include include using namespace std ifstream fp 09002801 txt ios in char cbuffer char keyword 14 if else for while do float return break continue int void main const printf 关键字 char bord

9、er 8 分隔符 char arithmetic 6 运算符 char relation 7 关系运算符 char lableconst 80 标识符 int constnum 40 int lableconstnum 0 统计常数和标识符数量 int row 1 int search char searchchar int wordtype int i 0 t 0 switch wordtype case 1 for i 0 i 13 i 关键字 if strcmp keyword i searchchar 0 return i 1 return 0 case 2 for i 0 i 7 i

10、 分隔符 if strcmp border i searchchar 0 return i 1 return 0 case 3 for i 0 i 5 i 运算符 if strcmp arithmetic i searchchar 0 return i 1 return 0 case 4 for i 0 i 6 i 关系运算符 if strcmp relation i searchchar 0 return i 1 return 0 case 5 for t 40 t constnum t 常数 if strcmp searchchar lableconst t 0 判断该常数是否已出现过 r

11、eturn t 1 lableconst t 1 char malloc sizeof searchchar 为新的元素分配内存空间 strcpy lableconst t 1 searchchar 为数组赋值 lableconst 指针数组名 constnum 常数个数自加 return t case 6 for i 0 i lableconstnum i if strcmp searchchar lableconst i 0 判断标识符是否已出现过 return i 1 lableconst i 1 char malloc sizeof searchchar strcpy lablecon

12、st i 1 searchchar lableconstnum 标识符个数自加 return i default cout 错误 char alphaprocess char buffer 字符处理过程 int atype int i 1 char alphatp 20 while isalpha buffer isdigit buffer 这两个函数分别是判字符和判数字函数位于 ctype h 中 alphatp i buffer fp get buffer alphatp i 1 0 在末尾添加字符串结束标志 if atype search alphatp 1 cout row row S

13、tring alphatp t t t 关键字 endl else atype search alphatp 6 标识符 cout row row String alphatp t t t 标识符 endl return buffer char digitprocess char buffer 数字处理过程 int i 1 char digittp 20 int dtype while isdigit buffer digittp i buffer fp get buffer digittp i 1 0 dtype search digittp 5 cout row row String di

14、gittp t t t 数字 endl return buffer char otherprocess char buffer 分隔符 运算符 逻辑运算符等 int i 1 char othertp 20 int otype otypetp othertp 0 buffer othertp 1 0 if otype search othertp 3 fp get buffer othertp 1 buffer othertp 2 0 if otypetp search othertp 3 判断该运算符是否是由连续的两个字符组成的 cout row row String othertp t t

15、t 运算符 endl fp get buffer goto out else 单字符逻辑运算符 othertp 1 0 cout row row String othertp t t t 逻辑运算符 endl goto out if otype search othertp 4 关系运算符 fp get buffer othertp 1 buffer othertp 2 0 if otypetp search othertp 4 判断该关系运算符是否是由连续的两个字符组成的 cout row row String othertp t t t 关系运算符 endl fp get buffer g

16、oto out else 单字符逻辑运算符 othertp 1 0 cout row row String othertp t t t 逻辑运算符 endl goto out if buffer 的判断 fp get buffer if buffer cout 2 2 n fp get buffer goto out else if otype search othertp 2 分界符 cout row row String othertp t t t 分隔符 endl fp get buffer goto out if buffer n fp get buffer out return buffer void main printf 词法分析器 n int i for i 0 i 50 i lableconst i 用于保存标识符 if fp cout 源文件无法打开 请检查 endl else fp get cbuffer while fp eof if cbuffer n row fp get cbuffer else if isalpha cbuffer cbuffer alp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号