属性文法和语法制导翻译

属性文法和语法制导翻译

ID:21698381

大小:1.35 MB

页数:75页

时间:2018-10-18

属性文法和语法制导翻译_第1页
属性文法和语法制导翻译_第2页
属性文法和语法制导翻译_第3页
属性文法和语法制导翻译_第4页
属性文法和语法制导翻译_第5页
资源描述:

《属性文法和语法制导翻译》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、属性文法和语法制导翻译授课:胡静语义分析——面向语法的定义所处位置分析技术LL分析方法计算最左推导自顶向下的构造推导LL的分析表指出要对最左边的非终结符进行扩展时,所选的产生式。LR分析方法计算最右推导自底向上的构造推导使用LR的状态集合和符号栈LR分析表指出针对每一个状态,采用何种动作(移进/归约),并且下一个转入的状态是什么。我们可以使用这些技术来构造ASTAST复习推导:使用的产生式的序列S⇒E+S⇒1+S⇒1+E⇒1+2分析树:描述推导的图并不能表示产生式使用的顺序抽象语法树(AST):从分析树中去掉了那些不必要的信息。潜在的AST构造LL/LR分析技术都潜在的构造出了AST

2、分析树在推导过程中可以得到LLparsing:应用产生式的序列潜在的描述了ASTLRparsing:应用归约的序列潜在的描述了AST我们希望从分析过程中明确的创建AST:在分析器中添加一定的代码来明确的创建ASTAST的构造LL分析:对非终结符进行扩展•Example:LR分析中AST的构造问题代码的结构混乱:进行语法分析的代码和构造AST的代码混在一起语法分析器的生成器:产生的语法分析器需要包含AST的构造代码如何使用语法分析器的自动生成器构造不同的AST数据结构?我们需要在分析阶段同时的进行其他的动作。比如,语义检查Syntax-DirectedDefinition解决方法:sy

3、ntax-directeddefinition扩展每个文法的产生式,使得每个产生式都和语义动作(代码)相关联:S→E+S{action}语法分析器的生成器将这些代码加入到生成的语法分析器中。当使用产生式进行归约时,对应的动作就会被执行。语义动作动作:用程序设计语言编写的代码和语法分析器的生成器的程序设计语言相同例如:Yacc=actionswritteninCCUP=actionswritteninJava动作需要访问语法分析栈!语法分析器的生成器将状态栈进行扩展,用那些用户定义的结构(分析树)去替换原先的符号动作代码应该可以引用状态需要一套命名机制命名机制我们需要对那些在语义动作代

4、码中可能用到的文法的符号进行命名。需要分别引用出现在不同地方的同一个非终结符号E→E1+E2需要对左边/右边的符号进行区别E0→E+E命名机制:YaccYacc:使用关键字:$1引用右边的第一个符号,$2引用右边的第二个符号,以此类推关键字$$引用左边的非终结符Yacc的例子expr::=exprPLUSexpr{$$=$1+$3;}构造AST使用语义动作构造ASTAST在分析过程中自底向上的构造例子分析栈保存了每个非终结符的值可以使用syntax-directed定义在语法分析的时候进行语义检查例如,类型检查好处:有效率一个简单的编译过程可以完成多个任务坏处:代码结构混乱将语法分析

5、和语义检查过程混在一起当AST结构改变的时候进行检查只能是自底向上的过程中类型声明的例子值的传递当创建AST的时候,也要把值属性进行传递。另一个例子值的传递值要两个方向传递:自顶向下和自底向上构造方法从语义检查阶段可以单独的构造AST反复检查AST并且进行语义检查(或其他动作)只有当树被建立起来并且他的结构是稳定的时候才能做。这个过程有更多的灵活性,不容易出现错误属性文法属性文法虽然形式语义学的研究已经取得了许多重大进展,但目前在实际应用中比较流行的语义描述和语义处理的方法主要还是属性文法和语法制导翻译。本章研究内容:上下文无关文法所产生的语言的翻译。把属性附加到代表语法结构的文法符

6、号上,可以将语义信息和程序设计语言的结构联系起来。属性的值是用与文法产生式相关联的“语义规则”来计算的。涉及的概念语法制导定义:关于语言翻译的高层次规格说明,隐蔽了具体实现细节,不显式的说明翻译发生的顺序(属性文法)翻译模式:指明了语义规则的计算顺序,说明实现细节。语法制导翻译在编译器中的位置语义规则的计算完成的工作生成代码在符号表中保存信息发出错误信息对输入符号串翻译的过程就是对语义规则求值的过程L-属性:包含了所有不必显式构造分析树即可完成的翻译输入符号串分析树依赖图语义规格的计算顺序属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”。属性

7、代表与文法符号相关的信息,如类型、值、代码序列、符号表内容属性可以代表任何对象:字符串,数组,类型,内存单元或其他对象语法制导定义=文法+符号的相关属性集属性分为两个子集:综合属性、继承属性如果把文法符号的结点看成记录,包含若干存储信息的域,那么属性就相当于域的名字属性文法分析树节点上属性值由产生式的语义规则来定义综合属性值:通过分析树中其子节点的属性值计算出来的继承属性值:由该节点的兄弟节点及父节点的属性值计算出来的依赖图语义规则建立了属性间的依赖关系,

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

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

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