实验三语义分析及中间代码生成

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验三语义分析及中间代码生成一、实验目的通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法范畴变换为某种中间代码的语义翻译方法。二、实验内容实现简单的高级语言源程序的语义处理过程。三试验要求(一)程序设计要求(1)目标机:8086及其兼容处理器(2)中间代码:三地址码或者四元式(3)设计结果:语法分析树(节点具有属性)、三地址码表、符号表、TOKEN串表(4)语义分析内容要求:1)变量说明语句2)赋值语句3)控制语句(任选一种)(5)其它要求:1)将词法分析(扫描器)作为子程序,供语法语义程序调用;2)使用语法制导的语义翻译方法;3)编程语言自定;4)最好提供源程序输入界面;5)目标代码生成暂不做;6)编译后,可查看TOKEN串、语法分析树、符号表、三地址码表;7)主要数据结构:产生式表、符号表、语法分析树、三地址码表。四、实验设计(1)系统功能(包括各个子功能模块的功能说明);可对一段包含加减乘除括号的赋值语句进行语法分析,其必须以$为终结符,语句间以;隔离,判断其是否符合语法规则,依次输出判断过程中所用到的产生式,并输出最终结论,若有错误可以报错并提示错误所在行数及原因(2)开发平台(操作系统、设计语言);Windows7,MicrosoftVisualC++6.0(Dos),C++。(3)数据结构structtoken//词法token结构体{intcode;//编码intnum;//递增编号token*next;};token*token_head,*token_tail;//token队列structstr//词法string结构体{intnum;//编号stringword;//字符串内容str*next;};str*string_head,*string_tail;//string队列structivan//语法产生式结构体{charleft;//产生式的左部stringright;//产生式的右部intlen;//产生式右部的长度};ivancss[20];//语法20个产生式structpank//语法action表结构体{charsr;//移进或归约intstate;//转到的状态编号};pankaction[46][18];//action表intgo_to[46][11];//语法go_to表structike//语法分析栈结构体,双链{ike*pre;intnum;//状态intword;//符号编码ike*next;};ike*stack_head,*stack_tail;//分析栈首尾指针structL//语义四元式的数据结构{intk;stringop;//操作符stringop1;//操作数stringop2;//操作数stringresult;//结果L*next;//语义四元式向后指针L*Ltrue;//回填true链向前指针L*Lfalse;//回填false链向前指针};L*L_four_head,*L_four_tail,*L_true_head,*L_false_head;//四元式链,true链,false链structsymb//语义输入时符号表{stringword;//变量名称intaddr;//变量地址symb*next;};symb*symb_head,*symb_tail;//语义符号链表(4)实现过程读入待分析文件进行词法分析,并输出token序列进行语法分析,检查token序列是否符合文法进行语义分析和中间代码生成,以便于编译器的实现、移植和代码优化输出结果结束五、实验结果六、实验总结通过本次实验,我了解了当我编写的代码在经过编译过程中所进行的处理,分为词法分析,语法分析,语义分析和中间代码生成,生成的中间代码经过代码生成器变形成了我们常提到的目标程序.语义分析和中间代码生成会有静态检查:包括类型检查、控制流检查、唯一性检查和关联名字检查等等一判断源程序是否符合语言规定的语法和语义要求

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功