06第6章语法制导翻译技术.ppt
文本预览下载声明
第6章 语法制导翻译技术 6.1 翻译文法 6.1 翻译文法 6.1 翻译文法 6.1 翻译文法 6.2 语法制导翻译 6.2 语法制导翻译 6.3 自顶向下语法制导翻译 6.3.1 递归下降翻译 6.3.2 LL(1)翻译器 6.3.2 LL(1)翻译器 6.3.2 LL(1)翻译器 6.4 属性翻译文法 6.4.1 综合属性 6.4.1 综合属性 6.4.1 综合属性 6.4.1 综合属性 6.4.2 继承属性 6.4.2 继承属性 6.4.2 继承属性 6.4.3 属性翻译文法 6.4.3 属性翻译文法 6.4.4 属性翻译文法举例—算术表达式的翻译 6.4.4 属性翻译文法举例—算术表达式的翻译 6.4.4 属性翻译文法举例—算术表达式的翻译 6.4.4 属性翻译文法举例—算术表达式的翻译 6. 5 属性文法的自顶向下翻译 6.5.1 L-属性翻译文法 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.2 L-属性文法翻译的实现——递归下降翻译 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 6.5.3 L-属性文法翻译的实现—LL(1)法 习题 习题 6.6 自底向上的语法制导翻译 6.6.1 波兰翻译 6.6.1 波兰翻译 6.6.1 波兰翻译 6.6.2 S-属性文法 6.6.2 S-属性文法 6.6.3 S-属性波兰翻译文法的翻译实现 6.6.3 S-属性波兰翻译文法的翻译实现 6.6.3 S-属性波兰翻译文法的翻译实现 6.6.3 S-属性波兰翻译文法的翻译实现 6.6.3 S-属性波兰翻译文法的翻译实现 6)属性规则的代码:与每个产生式有关的属性求值规则,插入其代码以便对属性求值规则的右部求值,并把结果赋给该规则左部的每个变量。可以把这些代码放在属性计算规则的所有自变量已知之后,且函数值被使用之前的任何地方。 7)主程序:C语言都是从MAIN函数开始运行。在MAIN函数中,对文法的开始符号,其相应的每一个综合属性的名字变成主程序的局部变量,然后调用开始符号对应的过程。在调用时,如果实参对应开始符号的继承属性,则对每个继承属性以该属性的初始值作为值参传入,对每个综合属性取该属性的局部变量的地址传入。 E↑t→T↑pE↓p↑t E↓p↑t→+T↑r @ADD↓p,r,t0 E ↓t0↑t t0=NEWT E↓p↑t→ε t=p T↑t→F↑pT↓p↑t T↓p↑t→*F↑r @MULT↓p,r,t0 T↓t0↑t t0=NEWT T↓p↑t→ε t=p F↑p -(E↑p) | ID↑p 下面,以算术表达式的属性翻译文法为例,用C语言实现属性翻译器。 算术表达式属性翻译文法如下: 主程序:C语言都是从MAIN函数开始运行。在MAIN函数中,对文法的开始符号,其相应的每一个综合属性的名字变成主程序的局部变量,然后调用开始符号对应的过程。在调用时,如果实参对应开始符号的继承属性,则对每个继承属性以该属性的初始值作为值参传入,对每个综合属性取该属性的局部变量的地址传入。 E↑t→T↑pE↓p↑t //主程序 main() { int es=0,t; printf(请输入算术表达式(操作数只能是单个字母):); ch=getchar(); printf(输出四元式为:\n); es=E(t);//调分析表达式E的翻译程序 if (es==0) printf(\n翻译成功!\n); else printf(\n
显示全部