第五章++语法制导翻译(1)
- 格式:ppt
- 大小:288.55 KB
- 文档页数:10
语法制导的翻译 语义分析的任务:语义分析的输入是语法分析的输出(分析树),输出是中间代码,但同时它还完成了很多语义处理工作。
语义检查:如,类型、运算、维数、越界等。
语义处理:如,变量的存储分配、表达式的求值、语句的翻译(中间代码的生成)等。
总目标:生成等价的中间代码。
语义分析的主流技术:语法制导翻译技术。
4.1 语法制导的翻译静态语义分析通常包括:① 类型检查。
② 控制流检查。
控制流语句必须使控制转移到合法 的地方。
③ 一致性检查。
④ 相关名字检查。
有时,同一名字必须出现两次或 多次。
例如,Ada语言程序中,循环或程序块可以有一个名字,出现在这些结构的开头和结尾, 编译程序必须检查这两个地方用的名字是相同的。
⑤ 名字的作用域分析语法制导的翻译动态语义处理:如果静态语义正确,语义处理则要执行真正的翻译,即,或者将源程序翻译成程序的一种中间表示形式(中间代码),或者将源程序翻译成目标代码。
语法制导的翻译 语义动作的计算是在对应产生式被归约时进行。
语义规则和产生式相联系的两种方式 语法制导定义 对应每一个产生式编制一个语义子程序,当一个产生式获得匹配时,调用相应的语义子程序实现语义检查与翻译。
语法制导的翻译方案 在产生式的右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作。
4.1 语法制导的定义例 简单台式计算器的语法制导定义产 生 式 语 义 规 则 L → E nprint (E .val ) E → E 1 + TE .val := E 1 .val + T.val E → TE .val := T.val T → T 1 * FT.val := T 1.val * F.val T → FT.val := F.val F → (E )F.val := E.val F → digit F.va l := digit .lexval 属性文法(也称属性翻译文法) K nuth在1968年提出 在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”(称为属性)。