思考解答 为什么说在属性等式中“如果同一个符 居X在文法规则中出现不止一次,那么 每次必须用合适的下标与在其他地方出 现的符号区分开来”? ●答:这类似于张三是人的一个实例,李 四也是人的一个实例,但是他们的特征 是不同的,是两个不同的对象
思考解答 为什么说在属性等式中“如果同一个符 号Xi在文法规则中出现不止一次,那么 每次必须用合适的下标与在其他地方出 现的符号区分开来”? 答:这类似于张三是人的一个实例,李 四也是人的一个实例,但是他们的特征 是不同的,是两个不同的对象
属性文法举例 例考虑下列简单的整数算术表达式文法 exp -exp term - term term-term* factor factor factor→(exp) I number 文法规则 语义规则 exp1→exp2+term expl. val=expa. val+term. val expl-exp2-term exp, val=exp val-term val exp→term exp. val=term. val term1→term2* factor term, val=termo. val*factor. val term→ factor term. val=factor, val f actor(exp factor. val=exp. val factor→ number factor. val=number. val
属性文法举例 例 考虑下列简单的整数算术表达式文法: exp → exp + term | exp - term | term term → term * factor | factor factor →(exp)| number 文法规则 语义规则 exp1→exp2+term exp1.val=exp2.val+term.val exp1→exp2-term exp1.val=exp2.val-term.val exp→term exp.val=term.val term1→term2*factor term1.val=term2.val*factor.val term→factor term.val=factor.val factor→(exp) factor.val=exp.val factor→number factor.val=number.val
(34-3)*42的语法树,显示例2中属性文法的va属性计算 w!=31·42=13们2) Cvat = 31) 31) =42 dw=34一3=3 cvar 3 34 34》
( 34 - 3 )*4 2 的语法树,显示例 2中属性文法的val属性计算:
属性文法举例 例带进制数可以是八进制或十进制的,分别通过一个字符后缀o 八进制或d(十进制)来表示。文法如下所示: based-num num basechar basechar→o|d num→ num digit digit digt→0|1|2|3|4|516|7|8|9
属性文法举例 例 带进制数可以是八进制或十进制的,分别通过一个字符后缀o (八进制)或d (十进制)来表示。文法如下所示: based-num → num basechar basechar → o | d num → num digit | digit digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
属性文法举例 分析: 在带进制文法中,有值和进制两个属性,分别用va和 base表示。 只有看到一个数末尾的o或者d时,才能确定该数是十 进制还是八进制,故有下列属性等式关系: 文法规则 语义规则 based-num-,num basechar based-num val=num. val num base=basechar base oasechar→o basechar base=8 basechar→d basechar base=10
属性文法举例 分析: 在带进制文法中,有值和进制两个属性,分别用val和 base表示。 只有看到一个数末尾的o或者d时,才能确定该数是十 进制还是八进制,故有下列属性等式关系: 文法规则 语义规则 based-num→ num basechar based-num.val=num.val num.base=basechar.base basechar→o basechar.base=8 basechar→d basechar.base=10