




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理课程设计 Course Design of Compiling 课程代码3273526 半期题目 词法和语法分析器 实验学期 大三第二学期 学生班级 2014 级软件四班 学生学号 2014112218 学生姓名 何华均 任 课 教 师 丁 光 耀 信 息 科 学 与 技 术 学 院 2017 6 课课程程设计设计 1 C 语语言言词词法分析器法分析器 1 题题目目 C 语语言言词词法分析法分析 2 内容内容 选一个能正常运行的 c 语言程序 以该程序出现的字符作为单词符号集 不用 处理 c 语言的所有单词符号 将解析到的单词符号对应的二元组输出到文件中保存 可以将扫描缓冲区与输入缓冲区合成一个缓冲区 一次性输入源程序后就可以 进行预处理了 3 设计设计目的目的 掌握词法分析算法 设计 编制并调试一个词法分析程序 加深对词法分析原 理的理解 4 设计环设计环境 境 电脑语电脑语言言环环境 境 语言环境 C 语言 CPU i7HQ6700 内存 8G 5 概要概要设计设计 单词单词符号表 状符号表 状态转换图态转换图 5 1 词法分析器的结构 词法分析程序的功能 输入 所给文法的源程序字符串 输出 二元组 syn token 或 sum 构成的序列 词法分析程序可以单独为一个程序 也可以作为整个编译程序的一个子程序 当需要一个单词时 就调用此法分析子程序返回一个单词 为便于程序实现 假设每个单词间都有界符或运算符或空格隔开 并引入下面的 全局变量及子程序 1 ch 存放最新读进的源程序字符 2 strToken 存放构成单词符号的字符串 3 Buffer字符缓冲区 4 struct keyType 存放保留字的符号和种别 5 2 待分析的简单词法 1 保留字 break case char const int do while 2 运算符和界符 5 3 各种单词符号对应的种别码 单词符号种别码 单词符号种别码 ID0sizeof24 INT1static25 auto2struct26 break3switch27 case4typedef28 char5union29 const6unsigned30 continue7void31 default8volatile32 do9while33 double10 34 else11 35 enum12 36 extern 13 37 float14 38 for15 39 goto16 40 if17 41 int18 42 long19 43 源程序输入缓冲区 预处理子程序 扫描缓冲区 1扫描缓冲区 2 词法分析子程序 返回一个单词 调用 数据 register20 44 return21clear45 short22 46 signed23lettet letter digit 47 dight dight 48 5 3 状态转换图 6 详细设计详细设计 数据 数据结结构 子程序构 子程序 算法思想 首先设置 3 个变量 strToken用来存放构成单词符号的字符串 ch用 来字符 struct keyType用来存放单词符号的种别码 扫描子程序主要部 分流程如下图所示 子程序结构 子程序名功能 GETCHAR 读一个字符到 ch 中 GETBC 读一个非空白字符到 ch 中 CONCAT 把 CHAR 中字符连接到 strToken 之后 LETTER 判断 CHAR 中字符是否为字母 DIGIT 判断 ch 中字符是否为数字 RESERVE 用 strToken 中的字符串查找保留字表 并返回 保留字种别码 若返 回零 则非保留字 RETRACT 把 CHAR 中字符回送到缓冲区 7 程序清程序清单单 ConsoleApplication1 cpp 定义控制台应用程序的入口点 include stdafx h include stdio h include stdlib h include conio h include string h define N 47 char ch char strToken 20 存放构成单词符号的字符串 char buffer 1024 字符缓冲区 struct keyType char keyname 256 int value Key N ID 0 INT 1 auto 2 break 3 case 4 char 5 const 6 continue 7 default 8 do 9 double 10 else 11 enum 12 extern 13 float 14 for 15 goto 16 if 17 int 18 long 19 register 20 return 21 short 22 signed 23 sizeof 24 static 25 struct 26 switch 27 typedef 28 union 29 unsigned 30 void 31 volatile 32 while 33 34 35 36 37 38 39 40 41 42 43 44 clear 45 46 void GetChar 读一个字符到ch中 int i if strlen buffer 0 ch buffer 0 for i 0 i 256 i buffer i buffer i 1 else ch 0 void GetBC 读一个非空白字符到ch中 int i while strlen buffer i 0 ch buffer i for i A else return false int Reserve 用strToken中的字符查找保留字表 并返回保留字种别码 若返回0 则非保留字 int i for i 0 i0 i buffer i buffer i 1 buffer 0 ch ch 0 keyType ReturnWord strcpy strToken 0 int c keyType tempkey GetBC if ch A for i 0 i 256 i buffer i buffer i 1 else ch 0 void GetBC 读一个非空白字符到ch中 int i while strlen buffer i 0 ch buffer i for i A else return false int Reserve 用strToken中的字符查找保留字表 并返回保留字种别码 若返回0 则非保留字 int i for i 0 i0 i buffer i buffer i 1 buffer 0 ch ch 0 keyType ReturnWord strcpy strToken 0 int c keyType tempkey GetBC if ch A GetChar while Digit ConCat GetChar Retract strcpy tempkey keyname strToken tempkey value 1 else ConCat strcpy tempkey keyname strToken tempkey value Reserve return tempkey bool GetwordStack int i wordStack len 0 keyType temp while strlen buffer temp ReturnWord 词法分析器获得一个分析词 if temp value 1 常数 c 10 strcpy wordStack elem wordStack len word temp keyname wordStack elem wordStack len value 10 else if temp value 0 变量 i 9 strcpy wordStack elem wordStack len word temp keyname wordStack elem wordStack len value 9 else for i 0 i NUM i if strcmp temp keyname wordType i word 0 关键字 wordStack elem wordStack len wordType i break else if i NUM 1 printf 输入串中出现未识别单词 n return false wordStack len wordStack elem wordStack len wordType 12 return true 从单词串中取单词 WordType GetWord WordType temp wordStack elem 0 for int i 0 i wordStack len 1 i wordStack elem i wordStack elem i 1 wordStack len return temp void ClearwordStack 清空单词串 wordStack len 0 void ClearmainStack 清空归约栈 mainStack len 0 查看变量在变量表中的位置 int CheckvarTable char a for int i 0 i M i if strcmp a varTable elem i varname 0 return i else if i M 1 return 1 添加变量 void AddvarTable VarWord a varTable elem varTable len a varTable len 初始化归约栈 void InitmainStack mainStack elem 0 wordType 12 mainStack len 1 添加归约栈 void AddmainStack WordType a mainStack elem mainStack len a mainStack len 归约 bool Handle int i 常量归约 if mainStack elem mainStack len 1 value 10 mainStack elem mainStack len 1 value 13 变量归约 else if mainStack elem mainStack len 1 value 9 mainStack elem mainStack len 1 value 13 i CheckvarTable mainStack elem mainStack len 1 word if i 0 printf n变量 s 未定义 mainStack elem mainStack len 1 word return false else strcpy mainStack elem mainStack len 1 word varTable elem i value 赋值归约 else if mainStack elem mainStack len 2 value 1 if mainStack elem mainStack len 3 value 9 i CheckvarTable mainStack elem mainStack len 3 word if i 0 VarWord temp strcpy temp varname mainStack elem mainStack len 3 word strcpy temp value mainStack elem mainStack len 1 word temp flag true AddvarTable temp else strcpy varTable elem i value mainStack elem mainStack len 1 word strcpy mainStack elem mainStack len 3 word mainStack elem mainStack len 1 word mainStack elem mainStack len 3 value 13 else if mainStack elem mainStack len 3 value 13 strcpy mainStack elem mainStack len 3 word mainStack elem mainStack len 1 word mainStack len mainStack len 2 运算归约 else if mainStack elem mainStack len 2 value 3 int a b a atoi mainStack elem mainStack len 1 word b atoi mainStack elem mainStack len 3 word a a b itoa a mainStack elem mainStack len 3 word 10 mainStack len mainStack len 2 else if mainStack elem mainStack len 2 value 5 int a b a atoi mainStack elem mainStack len 1 word b atoi mainStack elem mainStack len 3 word a a b itoa a mainStack elem mainStack len 3 word 10 mainStack len mainStack len 2 输出语句 else if wordStack elem 0 value 2 mainStack len 0 结束归约 else if mainStack elem mainStack len 2 value 12 return true bool MainHandle whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年合同违约者面临的法律责任
- 2025年地热能在东北老工业基地能源转型中的应用研究报告
- 2025年短期合同工劳动用工经验分享
- 2025年度报批报建代理服务合同
- 2025年自动驾驶汽车感知与决策系统技术发展报告
- 2025年中国个性化香水行业市场全景分析及前景机遇研判报告
- 2025年新能源行业数字化转型与产业链协同创新案例研究报告
- 离婚后股权分割及原公司重组与经营计划协议
- 夫妻共同财产分割与外籍配偶在华资产处置协议
- 天津市事业单位聘用合同书(含解除合同程序)
- 2025年甘肃省定西市辅警考试真题及答案
- 2025年下半年全国教师资格证考试中学《综合素质》真题及答案
- 脑梗死后遗症疾病课件
- 2025年乡镇综合执法队员职业素养要求及考试要点
- 脑梗死恢复期护理查房范文讲课件
- 京东安全工程师笔试题库
- ISO 37001-2025 反贿赂管理体系要求及使用指南(中文版-雷泽佳译-2025)
- DL∕T 5597-2021 太阳能热发电工程经济评价导则
- 电大学前教育毕业论文
- 10kv高压无功补偿装置技术规范书
- 安防监控系统维保表格
评论
0/150
提交评论