正在加载图片...
204编形服理及实我 China-pub.c 下载 例6.3考虑下列类似C语法中变量声明的简单文法 decl type var-list pe→int|float var-list -id var-list id 我们要为在声明中标识符给出的变量定义一个数据类型属性,并写出一个等式来表示数据 类型属性是如何与声明的类型相关的。通过构造dp属性的一个属性文法可以实现这一点(使 用名字dpe和非终结符p的属性进行区分)。dpe的属性文法在表6-3中给出。在图中关于属 性等式我们做了以下标记。 首先,从{integer,real集合中得出dpe的值,相应的记号为int和E1oat。非终结符pe 有一个它表示的记号给定的dpe。通过decl文法规则的等式,这个dpe对应于全体var-lis的 dpe。通过var-list的等式,表中的每个id都有相同的dpe。注意,没有等式包含非终结符 dcl的dpe。实际上decl并不需要dpe,一个属性的值没有必要为所有的文法符号指定。 同前面一样,可以在一个语法树上显示属性等式。图6-3给出了一个例子。 表6-3例6.3的属性文法 文法规则 语义规则 var-lisopeype.dype type.drype intege 0pe→f1oat pe.drype real ran-lil.→主d,ar-isl id dnype var-list drype var-list drype=var-list,drype var-list-id id -var-list.drype 图6-3字符串foat x.y的语法树,显示表6-3冲属性文法指定的dypc属性 到目前为止,所有的例子都只有一个属性,但属性文法可能会包含几个独立的属性。下一 个例子是一个有几个相互联系属性的简单情形。 例6.4考虑对例6.1中数文法进行修改,数可以是八进制或十进制的。假设这通过一个字符的 后缀o(八进制)或(什进制)来表示。这样就有下面的文法 based-num-num basechar basechar→old mum→num digit digit digt→0111213141516171819例6.3 考虑下列类似C语法中变量声明的简单文法: decl → type var-l i s t type → i n t | f l o a t v a r-list → i d, v a r-list | i d 我们要为在声明中标识符给出的变量定义一个数据类型属性,并写出一个等式来表示数据 类型属性是如何与声明的类型相关的。通过构造 d t y p e属性的一个属性文法可以实现这一点 (使 用名字d t y p e和非终结符t y p e的属性进行区分)。d t y p e的属性文法在表6 - 3中给出。在图中关于属 性等式我们做了以下标记。 首先,从{integer , re a l}集合中得出d t y p e的值,相应的记号为i n t和f l o a t。非终结符t y p e 有一个它表示的记号给定的 d t y p e。通过d e c l文法规则的等式,这个 d t y p e对应于全体v a r- l i s t的 d t y p e。通过v a r- l i s t的等式,表中的每个 i d都有相同的d t y p e。注意,没有等式包含非终结符 decl 的d t y p e。实际上d e c l并不需要d t y p e,一个属性的值没有必要为所有的文法符号指定。 同前面一样,可以在一个语法树上显示属性等式。图 6 - 3给出了一个例子。 表6-3 例6 . 3的属性文法 文 法 规 则 语 义 规 则 decl → type var- l i s t v a r-list.dtype = t y p e . d t y p e type → i n t type.dtype = i n t e g e r type → f l o a t type.dtype = re a l v a r- l i s t 1 → i d ,v a r- l i s t 2 i d.dtype = v a r- l i s t 1 . d t y p e v a r- l i s t 2 .dtype = v a r- l i s t 1 .d t y p e v a r-list → i d i d.dtype = v a r- l i s t . d t y p e 图6-3 字符串float x,y的语法树,显示表6 - 3中属性文法指定的d t y p e属性 到目前为止,所有的例子都只有一个属性,但属性文法可能会包含几个独立的属性。下一 个例子是一个有几个相互联系属性的简单情形。 例6.4 考虑对例6 . 1中数文法进行修改,数可以是八进制或十进制的。假设这通过一个字符的 后缀o (八进制)或d (十进制)来表示。这样就有下面的文法: based-num → num basechar basechar → o | d num → num digit | d i g i t digit → 0|1|2|3|4|5|6|7|8|9 2 0 4 编译原理及实践 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有