ImageVerifierCode 换一换
格式:DOC , 页数:15 ,大小:152KB ,
资源ID:4220668      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-4220668.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理课程设计报告——词法分析器的构造.doc)为本站会员(龙***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

编译原理课程设计报告——词法分析器的构造.doc

1、 课程设计任务书 设 计 题 目 词法分析器的构造 成绩 主 要 内 容 对 C 语言的一个子集设计并实现一个简单的词法分析器,掌握利用状态转换图设计词 法分析器的基本方法。 利用该词法分析器完成对源程序字符串的词法分析。输出形式是源程序的单词符号二 元式的代码,并保存到文件中。 指 导 教 师 意 见 该生能按时完成课程设计任务书所规定的程序设计,综合运用 所学知识独立分析和解决问题的能力 。程序设计方案 。论文论述 ,文理 ,格式 。程序运行结果 。程序验收时回答问题 。 签名: 目 录 引言.4 第一章 概述.5 1.1 设计内容5 1.2 设计要求.5 第二章 设计的基本原理.6 2.

2、16 2.26 第三章 程序设计.7 3.1 总体方案设计.7 3.2 各模块设计.8 第四章 程序测试.9 4.1 一般测试 4.2 出错处理测试 第五章 结论.10 参考文献.10 附录 程序清单.11 引言 编译原理是国内外各高等院校计算机科学技术类专业,特别是计算机软件 专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及 编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强, 内容较为抽象复杂,涉及到大量的软件设计算法,因此,一直是一门比较难学的课 程。为了使学生更好地理解和掌握编译技术的基本概念、基本原理和实现方法,实 践环节非常重要,只有通

3、过上机进行程序设计,才能使学生对比较抽象的教学内容 产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软 件设计水平大有益处。 编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。词 法 分 析 阶 段 是 编 译 过 程 的 第 一 个 阶 段 , 是 编 译 的 基 础 。 这 个 阶 段 的 任 务 是 从 左 到 右 一 个 字 符 一 个 字 符 地 读 入 源 程 序 , 即 对 构 成 源 程 序 的 字 符 流 进 行 扫 描 然 后 根 据 构 词 规 则 识 别 单 词 (也 称 单 词 符 号 或 符 号 )。 词 法 分 析 程 序 实 现

4、这 个 任 务 。 词 法 分 析 程 序 可 以 使 用 Lex 等 工 具 自 动 生 成 。 从 左 到 右 逐 个 字 符 对 构 成 源 程 序 的 字 符 串 进 行 扫 描 , 依 据 词 法 规 则 , 识 别 出 一 个 一 个 的 标 记 ( token) , 把 源 程 序 变 为 等 价 的 标 记 串 序 列 。 执 行 词 法 分 析 的 程 序 称 为 词 法 分 析 器 , 也 称 为 扫 描 器 。 词法分 析是所有分析优化的基础,涉及的知识较少,如状态转换图等,易于实现。本次课 程设计,我的选题是词法分析,C+代码实现。 第一章 概述 1.1 设计内容 对

5、C 语言的一个子集设计并实现一个简单的词法分析器,掌握利用状态转换图 设计词法分析器的基本方法。 1.2 设计要求 利用该词法分析器完成对源程序字符串的词法分析。输出形式是源程序的单词 符号二元式的代码,并保存到文件中。 (1) 假设该语言中的单词符号及种别编码如下表所示。 单词符号及种别编码 单词符号 种别编码 单词符号 种别编码 main 1 28 int 2 29 char 3 30 if 4 31 else 5 , 32 for 6 : 33 while 7 ; 34 标识符 ID 10 35 整型常数 NUM 20 36 = 21 37 + 22 38 - 23 39 * 24 !

6、40 / 25 ( ) ID 和 NUM 的正规定义式为: ID letter(letter | didit)* NUMdigit digit* lettera | | z | A | | Z digit 0 | | 9 如果关键字、标识符和常数之间没有确定的算符或界符作间隔,则至少用一 个空格作间隔。空格由空白、制表符和换行符组成。 第二章 设计原理 2.1 符号分类 程序语言的单词符号一般分为以下五种: 关键字 标识符 常数 运算符 界符 2.2.词法分析器的二元输出 (单词种别,单词符号的属性值) 单词种别用整数编码,关键字一字一种,标识符统归为一种,常数一种,各种符号 各一种。 2.3

7、 正规式和状态转换图 第三章 程序设计 3.1 总体模块设计 /*用来存储目标文件名*/ string file_name; /*提取文本文件中的信息。*/ string GetText(); /*获得一个单词符号,从位置 i 开始查找。 /并且有一个引用参数 j,用来返回这个单词最后一个字符在 str 的位置。*/ string GetWord(string str,int i,int /*这个函数用来除去字符串中连续的空格和换行 int DeleteNull(string str,int i); /*判断 i 当前所指的字符是否为一个分界符,是的话返回真,反之假*/ bool IsBoun

8、dary(string str,int i); /*判断 i 当前所指的字符是否为一个运算符,是的话返回真,反之假*/ bool IsOperation(string str,int i); /*此函数将一个 pair 数组输出到一个文件中 */ void OutFile(vector v); /*此函数接受一个字符串数组,对它进行词法分析,返回一个 pair 型数组*/ vector analyst(vector vec); /*此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假 */ bool IsKey(string str); 3.2 各模块设计 1.首先根据上面单词符号表及

9、 ID 和 NUM 的正规定义式,构造出状态转换图; 2.定义相关的变量和数据结构。关键字作为特殊标识符处理,把它们预先安排在一 张表格中(称为关键字表) ,当扫描程序识别出标识符时,查关键字表。如能查到匹 配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组, 其描述如下: char KEY_WORDS7=main,int,char ,if,else,for,while; 用以存放单词符号二元式的数据结构可如下定义: class Word_Analyzer public: char ContentMAXLENGTH ; int val ; void print(); ; 3

10、.按照编译程序一遍扫描的要求,把词法分析器 Scaner 作为一个独立的子程序来设 计,通过对 Scaner 的反复调用识别出所有的单词符号; 4.当 Scaner 识别出一个单词符号时,则将该单词符号的二元式写入到输出文件中。 若 Scaner 无法识别出一个单词符号时,则调用错误处理程序 PrintError,显示当前扫 描到的字符及其所在行、列位置,并跳过该字符重新开始识别单词符号。 第四章 程序测试 4.1 正常测试 测试该设计词法分析器,可对下面的源程序进行词法分析: main() int i = 10; while(i) i = i - 1; 输出如下二元式代码序列: (1,mai

11、n) (26,() (27,) (30,) (2,int) (10,i) (21,=) (20,10) (34,;) (7,while) (26,() (10,i) (27,) (10,i) (21, =) (10,i) (23,-) (20,1) (34,;) (31,) 第五章 结论 该词法分析器功能良好,可以完成预定的要求。 参考文献: 程序设计语言编译原理 陈火旺 C+程序设计 谭浩强 程序清单: #include #include #include #include using namespace std; /*用来存储目标文件名*/ string file_name; /*提取文本

12、文件中的信息。*/ string GetText(); /*获得一个单词符号,从位置 i 开始查找。 /并且有一个引用参数 j,用来返回这个单词最后一个字符在 str 的位置。*/ string GetWord(string str,int i,int /*这个函数用来除去字符串中连续的空格和换行 /第一个参数为目标字符串,第二个参数为开始位置 /返回值为连续的空格和换行后的第一个有效字符在字符串的位置*/ int DeleteNull(string str,int i); /*判断 i 当前所指的字符是否为一个分界符,是的话返回真,反之假*/ bool IsBoundary(string s

13、tr,int i); /*判断 i 当前所指的字符是否为一个运算符,是的话返回真,反之假*/ bool IsOperation(string str,int i); /*此函数将一个 pair 数组输出到一个文件中*/ void OutFile(vector v); /*此函数接受一个字符串数组,对它进行词法分析,返回一个 pair 型数组*/ vector analyst(vector vec); /*此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假*/ bool IsKey(string str); int main() string com1=“ “; string com2

14、=“n“; string fileline=GetText(); int begin=0,end=0; vector array; do begin=DeleteNull(fileline,begin); string nowString; nowString=GetWord(fileline,begin,end); if(end=-1) break; if(nowS pare(com1) begin=end+1; while(true); vector mid_result; mid_result=analyst(array); OutFile(mid_result); coutfile_n

15、ame1; ifstream infile(file_name1.c_str(),ios:in); if (!infile) cerr v) cout analyst(vector vec) vector temp; int i; for(i=0;i“|veci=“|veci=“!“) jk.append(vec+i,0,1); pair pp(4,jk); temp.push_back(pp); continue; if(veci=“+“ jk.append(vec+i,0,1); pair pp(4,jk); temp.push_back(pp); continue; if(IsBound

16、ary(veci,0) pair pp(5,veci); temp.push_back(pp); else if(IsOperation(veci,0) pair pp(4,veci); temp.push_back(pp); else if(veci0=0) pair pp(3,veci); temp.push_back(pp); else pair pp(2,veci); temp.push_back(pp); else if(veci0=0) pair pp(3,veci); temp.push_back(pp); else if(IsKey(veci) pair pp(1,veci);

17、 temp.push_back(pp); else pair pp(2,veci); temp.push_back(pp); return temp; /*此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假*/ bool IsKey(string str) string p16=“char“,“double“,“int“,“long“,“double“,“float“,“for“,“while“,“do“,“break“,“continue“,“ switch“,“short“,“case“,“return“,“if“; vector ppp(p,p+16); int u; for(u=0;uppp.size();u+) if(! pare(pppu) return true; return false; /*finished*/

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。