词法分析的实验报告_第1页
词法分析的实验报告_第2页
词法分析的实验报告_第3页
词法分析的实验报告_第4页
词法分析的实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

词法分析 实验报告 编译技术 实验一实验报告 1 目录目录 目录 2 1 实验目的 3 2 实验内容 3 2 1 TINY 计算机语言描述 3 2 2 实验要求 3 3 此法分析器的程序实现 4 3 1 状态转换图 4 3 2 程序源码 5 3 3 实验运行效果截图 10 4 实验体会 10 编译技术 实验一实验报告 2 1 1 实验目的实验目的 1 学会针对 DFA 转换图实现相应的高级语言源程序 2 深刻领会状态转换图的含义 逐步理解有限自动机 3 掌握手工生成词法分析器的方法 了解词法分析器的内部工作原理 2 2 实验内容实验内容 2 12 1 TINYTINY 计算机语言描述计算机语言描述 TINY 计算机语言的编译程序的词法分析部分实现 从左到右扫描每行该语言源程序的符号 拼成单词 换成统一的内部表示 token 送给语法分析程序 为了简化程序的编写 有具体的要求如下 1 数仅仅是整数 2 空白符仅仅是空格 回车符 制表符 3 代码是自由格式 4 注释应放在花括号之内 并且不允许嵌套 语言的单词 语言的单词 保留字保留字特殊符号特殊符号其他其他 if then else end 标识符 一个或更多的字母 repeat until read write 数 一个或更多的数字 2 22 2 实验要求实验要求 要求实现编译器的以下功能要求实现编译器的以下功能 1 按规则拼单词 并转换成二元式形式 2 删除注释行 3 删除空白符 空格 回车符 制表符 编译技术 实验一实验报告 3 4 列表打印源程序 按照源程序的行打印 在每行的前面加上行号 并且打印出 每行包含的记号的二元形式 5 发现并定位错误 词法分析进行具体的要求词法分析进行具体的要求 1 记号的二元式形式中种类采用枚举方法定义 其中保留字和特殊字符是每个都 一个种类 标示符自己是一类 数字是一类 单词的属性就是表示的字符串值 2 词法分析的具体功能实现是一个函数 GetToken 每次调用都对剩余的字符串 分析得到一个单词或记号识别其种类 收集该记号的符号串属性 当识别一个单词完 毕 采用返回值的形式返回符号的种类 同时采用程序变量的形式提供当前识别出记 号的属性值 这样配合语法分析程序的分析需要的记号及其属性 生成一个语法树 3 标示符和保留字的词法构成相同 为了更好的实现 把语言的保留字建立一个 表格存储 这样可以把保留字的识别放在标示符之后 用识别出的标示符对比该表格 如果存在该表格中则是保留字 否则是一般标示符 3 3 此法分析器的程序实现此法分析器的程序实现 3 13 1 状态转换图状态转换图 图 1 TINY 语言的确定有限自动机 DFA 编译技术 实验一实验报告 4 3 23 2 程序源码程序源码 include using namespace std include include include class CA public void getToken 识别标识符 void preDo char 预处理源程序 void display 打印出 CA m n 0 private long count2 char ID 10 10 符号表 int m 设 m 为符号表中已有的标识符的个数 char Cons 10 10 常数表 int n 设 n 为常数表中已有的常数的个数 char buffer1 99999 bool isDigit char 检查是否为数字 bool isLetter char 检查是否为字符 int InsertID char strToken 添加符号 int InsertConst char strToken 添加符号 int Search char a 10 const char int 二分查找 enum variety 标识符 数字 关键字 1 关键字 2 关键字 3 关键字 4 关键字 5 关键字 6 关 键字 7 关键字 8 特殊符号 1 特殊符号 2 特殊符号 3 特殊符号 4 特殊符号 5 特殊符号 6 特殊符号 7 特殊符号 8 特殊符号 9 特殊符号 10 关键字 bi 编码 1 2 3 4 5 6 7 8 char K 18 10 else end if read repeat then until write bool CA isDigit char c 编译技术 实验一实验报告 5 if c 0 return true else return false bool CA isLetter char c if c a else return false int CA Search char a 18 10 const char b int n int left 0 int right n 1 int mid 0 while left right mid left right 2 if strcmp a mid b 0 return mid else if strcmp a mid b 0 left mid 1 else right mid 1 return 1 int CA InsertID char strToken int i 0 while i m 设 m 为符号表中已有的标识符的个数 if strcmp ID i strToken return i i strcpy ID i strToken m return i 编译技术 实验一实验报告 6 int CA InsertConst char strToken int i 0 while i n 设 n 为常数表中已有的常数的个数 if strcmp Cons i strToken return i i strcpy Cons i strToken n return i void CA display char filename 30 输入的时候一定要是 格式 cout 请输入源程序代码 cpp 文件的绝对路径 filename ifstream infile filename ios in if infile cerr open error endl abort char ch int count1 1 count2 0 cout 第 count1 行 while infile get ch preDo ch cout ch 逐行打印出源程序 if ch n count1 cout 第 count1 行 buffer1 count2 1 0 编译技术 实验一实验报告 7 cout endl 对 buffer1 中的字符进行扫描 getToken infile close cout endl cout 符号表 for int i 0 i m i cout ID i cout endl cout 数字表 for int j 0 j n j cout Cons j cout endl void CA preDo char c char p buffer1 buffer1 0 赋 给扫描缓冲区的第一个元素 count2 p count2 c if buffer1 count2 1 删除注释 if c cout 注释不允许嵌套 注释不允许嵌套 if c count2 else count2 count2 2 else if buffer1 count2 1 若干相继的空白符结合成一个 if c r count2 if c t count2 void CA getToken int n 1 编译技术 实验一实验报告 8 cout 第 1 行 for int i 1 i strlen buffer1 i if buffer1 i n n cout n 第 n 行 else if isLetter buffer1 i string tok tok buffer1 i while isLetter buffer1 i tok buffer1 i int r Search K tok c str 8 i if r 1 cout 关键字 r 1 tok 关键字编码 else cout 标识符 tok 标识符编码 r InsertID char tok c str else if isDigit buffer1 i string tok tok buffer1 i while isDigit buffer1 i tok buffer1 i int y InsertConst char tok c str cout 数字 tok i 数字编码 else if buffer1 i else string tok tok buffer1 i int q Search K tok c str 18 if q 1 cout 特殊符号 tok else 编译技术 实验一实验报告 9 cout 非法符号 main 函数 int main CA ca ca display cout endl return 0 3 33 3 实验运行效果截图实验运行效果截图 编译技术 实验一实验报告 10 4 4 实验体会实验体会 本次实验是 编译技术 的第一次实验 按理说也应该是最简单的一次实验验 但 是在具体的实现过程中还是遇到了这样或那样的问题 比如对原输入串进行分析

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论