编译原理-语法制导翻译与属性文法
语法制导翻译概述
语法分析的基础上,根据源程序中各语法结构的语义进行翻译
编译器一般先将经过语法分析后的源程序翻译成某种形式的中间代码
语义分析器的主要任务
检查各个语法结构的静态语义,即验证语法正确的程序结构是否真正有意义,也称为静态语义分析或静态检查
- 类型检查:操作数和操作符的类型是否相容;
- 控制流检查:控制流转向目标地址是否合法;
- 唯一性检查:对象是否被重复定义;
- 关联名检查:同一名字多次特定出现是否一致。
将静态检查和中间代码生成结合到语法分析中进行的技术称为语法制导翻译 (syntax-directed translation)
语法制导翻译的基本思想
- 在进行语法分析的同时,完成相应的语义处理
- 一旦语法分析器识别出一个语法结构(例如E->E+T)就要立即对其进行翻译。
- 翻译是根据语言的语义进行的,并通过调用事先为该语法结构编写的语义子程序来实现。
- 对文法中的每个产生式附加一个/多个语义动作(或语义子程序)
- 在语法分析的过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作(或调用相应的语义子程序)
语义子程序的功能
- 指明相应产生式中各个文法符号的具体含义,并规定了使用该产生式进行分析时所应采取的语义动作。
- 语义信息是通过文法符号来携带和传递的。
属性
- 一个文法符号X所携带的语义信息称为X的语义属性,简称为属性
- 文法符号的属性的计算规则称为语义规则
- 一个变量的属性有类型、值和存储地址等
语法制导定义
属性计算
翻译模式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Escapeey`Blog!
评论