翻译的任务:首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码.
使用的方法称作语法制导翻译.基本思想是,根据翻译的需要设置文法符号的属性,以描述语法结构的语义.例如,一个变量的属性有类型,层次,存储地址等.表达式的属性有类型,值等.属性值的计算和产生式相联系.随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务.
语法制导翻译是语法分析之后,编译的任务是由已识别成功的正确源程序生成一组规格一致,便于计算加工的指令形式。引入中间代码的目的是便于生成机器语言,便于代码优化。根据查询相关公开信息显示,语法制导翻译会根据文法产生式右部符号串的含义,进行翻译,翻译的结果是生成相应中间代码。语法制导翻译,简称SDD,基于属性文法的处理过程,对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。语法制导翻译使用CFG来引导对语言的翻译,是一种面向文法的翻译技术。
问: 如何表示语义信息?
答: 为CFG中的文法符号设置语义属性,用来表示语法成分对应的语义信息。
问: 如何计算语义属性?
答: 文法符号的语义属性值是用与文法符号所在产生式(语法规则)相关联的语义规则;对于给定的输入串x,构建x的语法分析树,并利用与产生式(语法规则)相关联的语义规则来计算分析树中各结点对应的分析树语义属性值;
将语义规则同语法规则(产生式)联系起来要涉及两个概念
SDD是对CFG的推广
注:L与L1表示的是同一个符号,下标的出现是为了方便讨论区别L在不同地方的出现。如果X是一个文法符号,a是X的一个属性,则用X.a表示属性a在某个标号为X。
SDT是在产生式右部嵌入了程序片段的CFG,这些程序片段称为语义动作。按照惯例,语义动作放在花括号内。
一个语义动作在产生式中的位置决定了这个动作的执行时间
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)