一个简单编译器前端的实现.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
个简单编译器前端的实现 小记: 其实这个程序是编译原理这门课的综合实验,前段时间 我申请免试又失败了,原因是有缺课,平时分不够,早上赖 床现在尝到苦果我也是醉了……没办法,逼上梁山,只好攻 克这个大 boss 以拿下免试资格。 选了一个最简单的文法,分析了 1 个多星期,终于决定 开始要写的时候时间已经很紧了。 去实验室通宵了一晚,在宿舍熬了一晚,睡了 3 个小时 就起来去验收了。还好是通过了,没白费劲。 不得不说,编译原理就是烧脑,知识点都比较抽象,如 果数据结构和算法的基础打得不牢的话,实现起来会感到吃 力。 再次感觉到了基础的重要性,这也是一个收获吧。 总的来说,相比较之前实现形式化的 des加密算法,抽 象的编译器更有难度,写完也更能让你感觉到提高。 ps:程序仅供参考,时间有限,没做太多测试。 功能: 给定一个简单语言的文法描述,本程序是该语言的编译 口口 、八亠」4 器前端。 输入一个符合该文法规则的源文件,输出三地址形式的 中间代码。 具体功能有词法分析,语法分析,分析流程显示,错误 提示等。 程序运行结果: 源程序: 分析过程: 生成中间代码(三地址形式) 分析过程: 文法: 文法(消除左递归后) Program->BEGIN Stmt-List END Stmt-List->Stmt Stmt-List' Stmt-List'->Stmt Stmt-List' | . Stmt->Assign-stmt Assign-stmt->ID = Expr Expr->Term Expr' Expr'->Add-Op Term Expr' | . Term->Factor Term' Term'->Multiple-Op Factor Term' | . Factor->( Expr ) | ID | NUM Add-Op->+ | - Multiple-Op->* | / FIRST 集 First(Program)={BEGIN} First(Stmt-List)={ID} First(Stmt-List')={ ID, e First(Stmt)={ ID} First(Assign-stmt)={ ID} First(Expr)={(,ID,NUM} First(ExpC={+,-,门 First(Term)={(,ID,NUM} First(Term')={*,/, First(Factor)={(,ID,NUM} First(Add-Op)={+,-} First(Multiple-Op)={*,/} FOLLOW 集 Follow(Program)={$} Follow(Stmt-List)={END} Follow(Stmt-List')={ END} Follow(Stmt)={ ID,END} Follow(Assign-stmt)={ ID,END } Follow(Expr)={ ID,END ,)} Follow(Expr')={ ID,END , )} Follow(Term)={+,-, ID,END , )} Follow(Term')={ +,-, ID,END , )} Follow(Factor)={ *,/,+,-, ID,END , )} Follow(Add-Op)={(,ID,NUM} Follow(Multiple-Op)={ (,ID,NUM } 预测分析表: 代码: 1 // 词法分析中 1 // 词法分析中 ' '代表空白字符, 包括换行符, 空格, 制表 2 // 2 // 源程序格式: 1、 行只能有一条语句; 2、程序中可 17 17 以有注释 #include <iostream> #include <string.h> #include <stdio.h> #include <stack> #include <stdlib.h> using namespace std; 10 char src[1000010];//存储源代码11 char TokenList_kind[1010][100];//词法单元流 之类别12 int TokenList_value[1010];// 10 char src[1000010]; //存储源代码 11 char TokenList_kind[1010][100]; //词法单元流 之 类别 12 int TokenList_value[1010]; //词法单元流 之 值 13 char WordList[1010][100]; // 符号表 -- 由 token_value 指向

文档评论(0)

zhaoxiaoj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档