正在加载图片...
例:翻译表达式的S-属性文法 我们以第3式为例介绍其原理。 l.Expr→ Expr,‘+'Term 首先,产生式左部Term的首地址显 {$$=$1;POST[p]=+'; 然应与右部第一符号对应的首地 p++} 址相同($$=$1;)。 2.|Term{$$=$l;} 其次,按第3式归约时,或者说, 3.Term→Term,'* Factor 翻译文法执行该语义动作时,右 {$$=$1;POST[p] =‘*} 部符号Term和Factor对应的输出 p++} (即各自所代表的代码段)已经 4.|Factor{.$$=$1;} 建立,并已存储在P0ST中,它们 5.Factor-→ Expr 恰好就是运算符‘*’的两个运 {$$=$2;} 算对象,所以,现在将‘*输 出到POST中是合适的。 6.liden=p; 最后,因POST[p]已被赋值 POST[p]=$1;p++; (即翻译所得的部分代码已输 出),应将下标计数加一。 例:翻译表达式的S-属性文法 ⒈Expr→ Expr ‘+’ Term {$$=$1;POST[p]=‘+’; p++;} ⒉ | Term {$$=$1;} ⒊Term→ Term ’*’ Factor {$$=$1;POST[p] = ‘*’; p++;} ⒋ | Factor{$$=$1;} ⒌Factor→ ‘(‘ Expr ‘)’ { $$=$2;} ⒍ |iden{$$=p; POST[p] =$1; p++;} 我们以第3式为例介绍其原理。 首先,产生式左部Term的首地址显 然应与右部第一符号对应的首地 址相同($$=$1;)。 其次,按第3式归约时,或者说, 翻译文法执行该语义动作时,右 部符号Term和Factor对应的输出 (即各自所代表的代码段)已经 建立,并已存储在POST中,它们 恰好就是运算符‘*’的两个运 算对象,所以,现在将‘*’输 出到POST中是合适的。 最后,因POST[p]已被赋值 (即翻译所得的部分代码已输 出),应将下标计数加一
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有