已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
词法分析器实验报告 一 实验目的及要求 本次实验通过用 C 语言 设计 编制 调试一个词法分析子程序 识别单词 实现一个 C 语言词法分析器 经过此过程可以加深对编 译器解析单词流的过程的了解 运行环境运行环境 硬件 windows xp 软件 visual c 6 0 二 实验步骤 1 查询资料 了解词法分析器的工作过程与原理 2 分析题目 整理出基本设计思路 3 实践编码 将设计思想转换用 c 语言编码实现 编译运行 4 测试功能 多次设置包含不同字符 关键字的待解析文件 仔细 察看运行结果 检测该分析器的分析结果是否正确 通过最终的测 试发现问题 逐渐完善代码中设置的分析对象与关键字表 拓宽分 析范围提高分析能力 三 实验内容 本实验中将 c 语言单词符号分成了四类 关键字 key 特别的将 main 说明为主函数 普通标示符 常数和界符 将关键字初始化 在一个字符型指针数组 key 中 将界符分别由程序中的 case 列出 在词法分析过程中 关键字表和 case 列出的界符的内容是固定不变 的 由程序中的初始化确定 因此 从源文件字符串中识别出现的 关键字 界符只能从其中选取 标识符 常数是在分析过程中不断 形成的 对于一个具体源程序而言 在扫描字符串时识别出一个单词 若这个单词的类型是关键字 普通标示符 常数或界符中之一 那 么就将此单词以文字说明的形式输出 每次调用词法分析程序 它 均能自动继续扫描下去 形成下一个单词 直到整个源程序全部扫 描完毕 从而形成相应的单词串 输出形式例如 void 关键字 流程图流程图 程序 程序 流程图 开始 输入源文 件路径 路径是否有 效 是 初始化文件指针 否 将字符加入字符数 组Word 是空格 空白或换 行吗 是字母吗是数字吗否否是界符吗否 打开源文件 跳过该字符 是 是 文件结束 否 将字符加入字符数 组Word 否 将字符 加入字 符数组 Word 是 指向下一字符 识别指针内容 指向下一字符 是字母惑数字 吗 是 将word与关键 字表key进行匹 配 否 匹配 是 输出word 为关键字 输出word为 普通标示符 否 将字符加 入字符数 组Word 指向下一字符 输出word 为常数 识别指针内容 回退 是数字吗 是 否 输出word 为界符 指向下一字符 结束是 输出Word 内容为不 可识别 将字符 加入字 符数组 Word 程序 include include include include 定义关键字 char Key 10 main void int char printf scanf else if return char Word 20 ch 存储识别出的单词流 int IsAlpha char c 判断是否为字母 if c a c A return 1 else return 0 int IsNum char c 判断是否为数字 if c 0 else return 0 int IsKey char Word 识别关键字函数 int m i for i 0 i 9 i if m strcmp Word Key i 0 if i 0 return 2 return 1 return 0 void scanner FILE fp 扫描函数 char Word 20 0 char ch int i c ch fgetc fp 获取字符 指针 fp 并自动指向下一个字符 if IsAlpha ch 判断该字符是否是字母 Word 0 ch ch fgetc fp i 1 while IsNum ch IsAlpha ch 判断该字符是否是字母或数字 Word i ch i ch fgetc fp Word i 0 0 代表字符结束 空格 fseek fp 1 1 回退一个字符 c IsKey Word 判断是否是关键字 if c 0 printf s t 普通标识符 n n Word 不是关键字 else if c 2 printf s t 主函数 n n Word else printf s t 关键字 n n Word 输出关键字 else 开始判断的字符不是字母 if IsNum ch 判断是否是数字 Word 0 ch ch fgetc fp i 1 while IsNum ch Word i ch i ch fgetc fp Word i 0 fseek fp 1 1 回退 printf s t 无符号实数 n n Word else 开始判断的字符不是字母也不是数字 Word 0 ch switch ch case case case case case case case case case printf s t 界符 n n Word break case ch fgetc fp Word 1 ch if ch printf s t 运算符 n n Word 运算符 else if ch printf s t 运算符 n n Word 判断结果为 else fseek fp 1 1 printf s t 运算符 n n Word 判断结果为 break case ch fgetc fp Word 1 ch if ch printf s t 运算符 n n Word else if ch printf s t 运算符 n n Word 判断结果为 else fseek fp 1 1 printf s t 运算符 n n Word 判断结果为 break case case case case ch fgetc fp if ch printf s t 运算符 n n Word else fseek fp 1 1 printf s t 运算符 n n Word break case ch fgetc fp Word 1 ch if ch printf s t 运算符 n n Word 判断结果为运算符 else if ch printf s t 运算符 n n Word 判断结果为 else fseek fp 1 1 printf s t 运算符 n n Word 判断结果为 ch fgetc fp Word 1 ch if ch printf s t 运算符 n n Word else fseek fp 1 1 printf s t 运算符 n n Word break case ch fgetc fp Word 1 ch if ch printf s t 运算符 n n Word if IsAlpha ch printf s t 类型标识符 n n Word else fseek fp 1 1 printf s t 取余运算符 n n Word break default printf 无法识别字符 n n break main char in fn 30 文件路径 FILE fp printf n 请输入源文件名 包括路径和后缀名 while 1 gets in fn scanf s in fn if fp fopen in fn r NULL break 读取文件内容 并返回文件指针 该 指针指向文件的第一个字符 else printf 文件路径错误 请重新输入 printf n 词法分析结果如下 n do ch fgetc fp if ch break 文件以 结尾 作为扫描结束条件 else if ch ch t ch n 忽略空格 空白 和换行 else fseek fp 1 1 回退一个字节开始识别单词流 scanner fp while ch return 0 4 实验结果 解析源文件 void main int a 3 a b printf d a return 解析结果 5 实验总结分析 通过本次实验 让再次浏览了有关 c 语言的一些基本知识 特别是对文件 字符串进 行基本操作的方法 C 语言中没有 string 类型 因此本实验中的对字符串提取与识别均借 助 include及字符型数组来实现 让我练习对字符串函数应用的同时也提高了 自己的逻辑思维能力 在本次实验中 我纠正了一个一直以来的概念错误 main 不是关键字 它定义为程 序的入口 是主函数 在本实验中 虽然我把 main 初始化在关键字表 字符指针类型数组 Key 10 中 当与该数组中字符串进行比较时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大学生性健康与生殖健康培训
- 2026年医患共情视角下的知情同意书设计
- AI在戏曲音乐中的应用
- 2026年小学不定方程与整数解问题
- 2026年泻下剂(承气汤类)临证思辨与现代药理
- 2026年农民工职业病防护知识知晓率与健康权益保障
- 2026年沟通艺术与高效倾听技巧
- 2026年养老院老年人沟通技巧培训
- 上海立达学院《安全评估分析》2025-2026学年第一学期期末试卷(B卷)
- 2026年MRI设备数字孪生预警系统开发
- 雨课堂学堂云在线《人工智能原理》单元测试考核答案
- ktv食品安全管理制度
- 第五章-受压杆件的扭转屈曲与弯扭屈曲1
- 2023年重庆新高考政治真题
- 临床试验研究者职责
- 解读《2023年中国血脂管理指南》
- ARCGIS空间统计课件
- 华为技术有限公司公文处理暂行办法
- 全国大学生数学建模竞赛
- 辽宁省普通高等学校本科实验教学示范中心建设项目任务书
- YY∕T 0868-2021 神经和肌肉刺激器用电极(高清正版)
评论
0/150
提交评论