哈工大 威海 编译原理 实验三 语义分析与中间代码生成

上传人:子 文档编号:42995870 上传时间:2018-06-04 格式:DOC 页数:6 大小:55.50KB
返回 下载 相关 举报
哈工大 威海 编译原理 实验三 语义分析与中间代码生成_第1页
第1页 / 共6页
哈工大 威海 编译原理 实验三 语义分析与中间代码生成_第2页
第2页 / 共6页
哈工大 威海 编译原理 实验三 语义分析与中间代码生成_第3页
第3页 / 共6页
哈工大 威海 编译原理 实验三 语义分析与中间代码生成_第4页
第4页 / 共6页
哈工大 威海 编译原理 实验三 语义分析与中间代码生成_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《哈工大 威海 编译原理 实验三 语义分析与中间代码生成》由会员分享,可在线阅读,更多相关《哈工大 威海 编译原理 实验三 语义分析与中间代码生成(6页珍藏版)》请在金锄头文库上搜索。

1、哈尔滨工业大学(威海)计算机学院哈尔滨工业大学(威海)计算机学院编译原理编译原理实验报告实验报告姓名院系计算机学院学号090410 任课教师指导教师实验地点宋健二楼机房实验时间实验名称实验三 语义分析及中间代码生成同组人无 预习报告(对实验主要内容的认识)得分 (1 1)通过本次试验,我应该加深对于编译原理制导方案的理解,并且加深通过本次试验,我应该加深对于编译原理制导方案的理解,并且加深 对于语法变换的所起到的作用;对于语法变换的所起到的作用; (2 2)对于试验中要用到得中间代码的格式规范,也应该进一步的分析和掌对于试验中要用到得中间代码的格式规范,也应该进一步的分析和掌 握握 (3 3)

2、能够很好的使用到前面开发出来的词法分析器和语法分析器,将它们能够很好的使用到前面开发出来的词法分析器和语法分析器,将它们 与语义分析器结合起来,跟好的更系统的掌握编译原理这门专业技与语义分析器结合起来,跟好的更系统的掌握编译原理这门专业技 能能 (4 4)关于符号表以及关于符号表以及 tokentoken 串表的维护,现在终于使其有所作用串表的维护,现在终于使其有所作用实验内容(问题,思路,程序,结果)得分 (1)开发环境:)开发环境:vs2010 (2)输入:在运行打开的软件下()输入:在运行打开的软件下(win32 格式),输入相应的代码(即要进行格式),输入相应的代码(即要进行 词法分析

3、的字符串)词法分析的字符串)( (比如:比如:intint a;)a;) (3)输出:在输入字符串后,按回车键后,既可以得到相应的词法分析的结果)输出:在输入字符串后,按回车键后,既可以得到相应的词法分析的结果 (比如:(比如:intint a a 的输入对应的输出如下:的输入对应的输出如下:intint a;a;首先对于词法分析打印首先对于词法分析打印 出:出:Int - key /关键字关键字A -str /字符串字符串; -bor /边界符号边界符号对于语法分析:对于语法分析:Accept /编译语句分析成功编译语句分析成功对于输入字符串的语义分析和中间代码的生成如下中间代码:对于输入字

4、符串的语义分析和中间代码的生成如下中间代码:) (4)在相应的运行程序的文件夹中生成一个)在相应的运行程序的文件夹中生成一个 txt 文件,用来存储生成的文件,用来存储生成的 Token 链表链表(5)系统功能:)系统功能: (2) 开发平台(操作系统、设计语言):开发平台(操作系统、设计语言):1 1、操作系统:、操作系统:windowswindows 7 72 2、设计语言:、设计语言:c+c+3 3、编译器:、编译器:vs2010vs2010 (3) 设计方案;设计方案;1 1) 主数据流图主数据流图开始词法分析语法分析Token 表的生成及修改语义分析修改 token 表语句是否为变量

5、声明对语句按照文法的 action 表进 行归约加一个四元式结点向下进行语义分析生成中间代 码结束2 2) 主要数据结构:符号表、主要数据结构:符号表、TOKENTOKEN 串表等。串表等。(1 1)TokenToken 数据结构用类实现:数据结构用类实现:symTableclass symTable private: char* symName; char* symStyle; int symLength; public:symTable *next;public: symTable(); symTable(char* sysName,char* sysStyle,int sysLength

6、); symTable(symTable char* getName(); char* getStyle(); int getLength();void symAdd(symTable* symFirst); void print(); ;(2 2)其他数据结构用结构体或者数组实现:)其他数据结构用结构体或者数组实现:char G3030; /use a matrix to store grammar G/存放 文法,用来分析作为输入int length30; /length use to store each formulas lengthint number = 0;bool tempof

7、input150; /buffer of input/输入?char str_vn30; /put all vn into itint size_vn = 0; char str_vt150; /put all vt into itint size_vt = 0;bool first_vn30150;char buffer50;/用来存放生成 CLOSURE(I)时需要的 first_set 也用来读入用户的输入串_ int bsize = 0;struct thriint beg;int nex;char ch;thri trans200;int size_trans = 0;/定义项目集的

8、形式 struct projint formula_numb;int part;char expc;/*项目集*/proj items200200;int Ccount = 0;int size_item200;/*状态转换表*/struct actionchar ch;int nxt_sta;action action_table200200;int size_act_table200;struct str/词法 string 结构体 int num;/编号 string word;/字符串内容 str *next; ; struct action/语法 action 表结构体 char s

9、r;/移进或归约 int state;/转到的状态编号 ; int go_to4611;/语法 go_to 表 struct ike/语法 分析栈结构体,双链 ike *pre; int num;/状态 int word;/符号编码 ike *next; ; ike *stack_head,*stack_tail;/分析栈首尾指针 struct L/语义四元式的数据结构 int k; string op;/操作符 string op1;/操作数 string op2;/操作数 string result;/结果 L *next;/语义四元式向后指针 L *Ltrue;/回填 true 链向前指

10、针 L *Lfalse;/回填 false 链向前指针 ; L *L_four_head,*L_four_tail,*L_true_head,*L_false_head;/四元式链,true 链,false 链 struct symb/语义输入时符号表 string word;/变量名称 int addr;/变量地址 symb *next; ;3 3)具体设计过程(包括主控程序、各个功能模块的具体实现)具体设计过程(包括主控程序、各个功能模块的具体实现) (1 1)主控程序)主控程序简介:包括下面几个部分组成:简介:包括下面几个部分组成: 1 1、 词法分析器子程序词法分析器子程序 2 2、

11、语法分析器子程序(包括构建语法分析器子程序(包括构建 ItemItem 集组、集组、actionaction、gotogoto 表表 建立)建立) 3 3、 语义分析子程序(包括语义分析以及中间代码的生成)语义分析子程序(包括语义分析以及中间代码的生成)(2 2)词法分析子程序)词法分析子程序简介:主要用到的程序为试验使用的主程序,将实验一中的主程序,简介:主要用到的程序为试验使用的主程序,将实验一中的主程序, 在此改为子函数程序,并且加入了将生成的信息写入文档中而不是在此改为子函数程序,并且加入了将生成的信息写入文档中而不是在屏幕上显示出来。(函数名称在屏幕上显示出来。(函数名称 Scane

12、r(),Scaner(),具体的功能参考试验具体的功能参考试验 1 1 文档)文档)(3 3)语法分析子程序)语法分析子程序简介:此处的语法分析子程序改编自试验简介:此处的语法分析子程序改编自试验 2 2 中的主程序,当时的中的主程序,当时的 主要目标是分析输入的语句是否符合程序的输入的文法的要求,在主要目标是分析输入的语句是否符合程序的输入的文法的要求,在 这里为了简化程序,直接将当时建立的这里为了简化程序,直接将当时建立的 actionaction 构建子程序的构建的构建子程序的构建的 表的结果放到程序中来以减少对于文件的访问以及读写操作。表的结果放到程序中来以减少对于文件的访问以及读写操

13、作。语法分析主要包括:语法分析主要包括: 1 1、 词法分析以及词法分析结果的词法分析以及词法分析结果的 tokentoken 表和符号表表和符号表 2 2、 GrammarGrammar 的读取以及对于的读取以及对于 itemitem 集族的构建函数集族的构建函数 3 3、 ActionAction 表的构建函数表的构建函数 4 4、 对于语法进行分析,若正确:对于语法进行分析,若正确:acceptaccept,如错误:,如错误:errorerror (4 4)语义分析子程序)语义分析子程序简介:语义分析是在语法分析的基础上进行添加相应的语义分析简介:语义分析是在语法分析的基础上进行添加相应

14、的语义分析 操作进行的,用的的文法的生成的操作进行的,用的的文法的生成的 actionaction 表来至于试验二中编程表来至于试验二中编程 且运行得到的结果,具体的且运行得到的结果,具体的 actionaction 表可以再源程序的表可以再源程序的 main.cppmain.cpp 中中 的前部分找到,或者是在实验的前部分找到,或者是在实验 2 2 的文档中(的文档中(action.txtaction.txt)中找到。)中找到。 (5 5)中间代码的生成)中间代码的生成简介:根据语义分析得到的输入信息可以获得当前的语法分析的简介:根据语义分析得到的输入信息可以获得当前的语法分析的 语法分析树

15、,通过语法分析树进而在屏幕上打印出相应的中间代码。语法分析树,通过语法分析树进而在屏幕上打印出相应的中间代码。实验结论得分本次试验我学习到了一下内容:(1)这次实验的主要内容在于对前面两个实验的程序和当前要求完成的语义分析的功能进行有机的结合起来,所以本次实验开始的大部分的内容在于前两个实验将主程序提取出来,缩略到两个函数中来,这样才能使得主程序的流程显得简单明了,程序的脉络显得更见的清晰。(2)此处省略了对于每次通过文法来生成 actin 表的过程,由于action 表格已经生成,此处直接放到函数的程序体里面,作为一个数组出现,这样可以减少很多不必要的代码的拷贝。(3)细节处的处理,在于文本的写入与读取,在前两个实验中,特别是第一个实验的时候,我编写的程序的主要功能在于能够在 win32 控制台上面,直接的输入然后结构在界面上打印出来即可,但是在后面的试验中,考虑的跟多的是将所有的数据都能够很好地保存起来,方便下面的使用这样才能使得程序更加的简便。教师评价总分实际得分

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号