北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf

北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf

ID:52239091

大小:686.30 KB

页数:59页

时间:2020-03-25

北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf_第1页
北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf_第2页
北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf_第3页
北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf_第4页
北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf_第5页
资源描述:

《北京航空航天大学《编译原理》第10章 语义分析和代码生.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第十章语义分析和代码生成••10.1语义分析的概念10.1语义分析的概念••10.2栈式抽象机及其汇编指令10.2栈式抽象机及其汇编指令••10.3声明的处理10.3声明的处理••10.4表达式的处理10.4表达式的处理••10.5赋值语句的处理10.5赋值语句的处理••10.6控制语句的处理10.6控制语句的处理••10.7过程调用和返回10.7过程调用和返回1北京航空航天大学计算机学院假定:•源语言:通用的过程语言•生成代码:栈式抽象机的(伪)汇编程序•翻译方法:自顶向下的属性翻译•语法成分翻译子程序参数设置:–继承属性为值形参–综合属性为变量形参•语法成分翻

2、译动作子程序参数设置:–继承属性为值形参–综合属性不设形参,而作为动作子程序的返回值(由RETURN语句返回)2北京航空航天大学计算机学院5.2.3(1)L-属性翻译文法(L-ATG)这是属性翻译文法中较简单的一种。其输入文法要求是LL(1)文法,可用自顶向下分析构造分析器。在分析过程中可进行属性求值。定义5.2:L-属性翻译文法是带有下列说明的翻译文法:1.文法中的终结符,非终结符及动作符号都带有属性,且每个属性都有一个值域2.非终结符及动作符号的属性可分为继承属性和综合属性3.开始符号的继承属性具有指定的初始值4.输入符号(终结符号)的每个综合属性具有指定的初

3、始值5.属性值的求值规则:(略)3北京航空航天大学计算机学院10.1语义分析的概念1、上下文有关分析:即标识符的作用域2、类型的一致性检查3、语义处理:声明语句:其语义是声明变量的类型等,并不要求做其他的操作。编译程序的工作是填符号表,登录名字的特征信息,分配存储。执行语句:语义是要做某种操作。语义处理的任务:按某种操作的目标结构生成代码。4北京航空航天大学计算机学院用上下文无关文法只能描述语言的语法结构,而不能描述其语义。例如,对于有嵌套子程序结构的程序段:BEGIN…BEGINαINTIβIEND…I…END若存在文法规则:VAR::=I第一次I的归约正确BE

4、GIN……I...END第二次I的归约错误BEGIN…δVAR...ENDδ∈V*且不包含变量I的声明文法规则应改为:INTIβVAR::=INTIβI5北京航空航天大学计算机学院然而上下文有关文法不仅构造困难,而且其分析器十分复杂,分析效率又低,显然是不实用的因此,通常我们把与语义相关的上下文有关信息填入符号表中,并通过查符号表中的这些信息来分析程序的语义是否正确6北京航空航天大学计算机学院10.2栈式抽象机及其汇编指令栈式抽象机:由三个存储器、一个指令寄存器和多个地址寄存器组成。存储器:数据存储器(存放AR的运行栈)操作存储器(操作数栈)指令存储

5、器7北京航空航天大学计算机学院计算机的存储大致情况如下:栈底运行栈P-code指令BP当前模块活动SP记录(数据段)NPPC堆(堆底)程序指令存储器8北京航空航天大学计算机学院例:LDA(a)LODba:=b+c;LODcADDSTN9北京航空航天大学计算机学院栈式抽象机指令代码如下:指令名称操作码地址指令意义加载指令LODD将D的内容→栈顶立即加载LDC常量常量→栈顶地址加载LDA(D)变量D的地址→栈顶存入存储STOD栈顶内容→变量D间接存ST@D将栈顶内容→D所指单元间接存STN将栈顶内容→次栈顶所指单元加ADD栈顶和次栈顶内容相加,结果留栈顶减SUB次栈顶

6、内容减栈顶内容乘MUL………10北京航空航天大学计算机学院指令名称操作码地址指令意义等于比较EQL不等比较NEQ次栈顶内容与栈顶内容比较,大于比较GRT结果(1或0)留栈顶小于比较LES大于等于GTE小于等于LSE逻辑与AND逻辑或ORL逻辑非NOT转子JSRlab分配ALCM在运行栈顶分配大小为M的活动记录区11北京航空航天大学计算机学院10.3声明的处理语义的表示:给出语言结构的属性翻译文法来说明其语义及语义动作,并把这些语义动作插入属性翻译文法产生式中的适当位置。编译程序的任务:•也就是说,处理声明语句主要是做填表工作编译程序处理声明语句要完成的主要任务为:

7、(填表前先得查表,检查是否重名)。1)分离出每一个被声明的实体,并把它们的名字填入符号表中处理对已声明的实体的引用时主要是做查表工作。2)把被声明实体的有关特性信息尽可能多地填入符号表中•对于已声明的实体,在处理对该实体的引用时要做的事情:1)检查对所声明的实体引用(种类,类型等)是否正确2)根据实体的特征信息,例如类型,所分配的目标代码地址(可能为数据区单元地址,或目标程序入口地址)生成相应的目标代码12北京航空航天大学计算机学院声明有常量声明,变量(包括简单变量,数组变量和记录变量等)和过程(函数)声明等,这里主要讨论常量声明和简单变量、数组声明的处理。声明的

8、两种方式:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。