问题描述
从语法分析到语义分析,通俗的讲一下,语法制导翻译是做什么的?语法制导翻译,这六个字代表什么意思?谢谢大家。
龙书第2版
第5章把语法制导翻译讲得很明白了。
语法制导翻译,
Syntax-directed translation,简称SDT。
意思是在解析(parse)输入的字符串时,在特定位置执行指定的动作;换言之,根据语法把输入的字符串“翻译”为一串动作,故名“语法制导翻译”。
“特定位置”是通过把“指定动作”(称为语义动作,semantic action)嵌入到语法规则中指定的。
例如,如果有下述语法:
E -> NUM + NUM那么一个嵌入了语义动作的语法制导定义可以是:
E -> NUM + { println("found op plus"); } NUM { println("value = " + ($1.value + $4.value)); }这个例子中用花括号包围的代码就是语义动作,而其位置指定了在parse到什么地方的时候要执行该语义动作。例如第一组语义动作位于"+"之后、第二个NUM之前,那么parse到这个"+"之后就要执行这个语义动作。
语义动作可以看作一个“epsilon匹配”或者叫“空串匹配”,也就是说它在语法中的作用可以看作一个匹配空串的位置,也就是总是会匹配上。
E -> NUM + ACTION1 NUM ACTION2像这样。
一个完整的例子可以参考
bison的运算符优先级一例,四则混合运算计算器,经典案例。