- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
抽象语法树在属性计算中的应用
3 安庆师范学院学报 (自然科学版) J o urnal of Anqing Te a cher s Colle ge (Natural Science Edition) No v. 2008 Vol . 14 No . 4 2008 年 11 月 第 14 卷第 4 期 抽象语法树在属性计算中的应用 张玉州 ,王一宾 ,江克勤 ( 安庆师范学院 计算机与信息学院 , 安徽安庆 246133) 摘 要 : 属性是语义分析中非常重要的一个概念 ,因为它使得语法符号和结构有了意义 ,而这种意义最终将被计算 机接收 。属性计算是一个复杂的过程 ,原因在于属性间的依赖关系的紧密性以及存储结构的复杂性 。抽象语法树是语 法树的简化 ,是属性计算中很有效的一种存储结构 。本文首先阐述抽象语法树的意义 、结构及构造 ,然后对属性及相关 问题作了介绍 ,最后根据属性文法的种类 ,给出相应语法结构的属性计算算法 。 关键词 : 属性 ;抽象语法树 ;结点 ;综合属性 ;继承属性 中图分类号 : T P314 文献标识码 : A 文章编号 : 1007 - 4260 ( 2008) 04 - 0084 - 05 0 引言 语义分析是编译过程中很关键的一个阶段 ,因为在这个阶段 ,通过属性的设置 、计算 ,使得相应的文法符号 、语法结 构有了意义 ,翻译从这个阶段真正开始 。属性计算是在语言句子的翻译过程中 ,依据该语言属性文法的语义规则 ,对文 法符号的属性求值的过程 。属性计算通常是一个复杂的过程 ,主要是因为文法的规模大 、属性的数目多 、属性间的依赖 关系复杂等因素 ,从而导致在设计属性计算算法时 ,存储结构以及计算策略的选取就会相当困难 。 本文主要是介绍利用抽象语法树作为存储结构对属性进行计算 ,并给出了具体的属性计算算法 。 1 抽象语法树 1 . 1 抽象语法树的意义 语法树是语法结构的图形表示 ,使用语法树可以判定一个给定的单词符号串是否符合语言的语法规则 。语法树在 语义分析阶段 ,也是一种重要的数据结构 ,因为语义分析通常是语法制导的 ,即先对源程序代码进行语法分析 ,构造语法 树 ,而后依据语义规则 ,通过对语法树的遍历 ,进行属性计算 [ 1 ] 。 而在实际的属性计算过程中 ,为了简便起见 ,需要对语法树进行处理 ,去掉那些对语义分析不必要的信息 ,从而获得 更有效的数据结构 ,这种结构即为抽象语法树 ( A bst ract Syntax Tree) [ 1 ] 。采用抽象语法树作为存储结构 ,不但在存储上 节省了空间 ,而且对于算法的实现 ,也简便了许多 ,例如对于下文例 2 中的产生式 S - (L ) ,由于圆括号没有设置属性 , 故而在实际的存储中 ,没有给它们分配空间 ,这样 S 结点只有一棵子树 ,降低了算法的复杂性 。 1 . 2 抽象语法树的结构 以抽象语法树作为存储结构进行属性计算 ,树的结点中的信息大致由三部分组成 : ①结点所表示的符号名称 ,该名 称又称为结点的标号 ; ②标号的属性 ,一个标号可能有若干个属性值 ,这些属性可以存放在结点中 ,也可以存放在符号表 中 ,而将相应的地址存储在结点中 ; ③若干个指向其子结点的指针 。 显然抽象语法树中的一个结点可以由包含若干个成员的记录或结构体来实现 。 1 . 3 抽象语法树的构造 抽象语法树是在语法分析的过程中建立起来的 ,建立的过程要依赖于产生式所对应的语义规则 ,也就是为了构造抽 象语法树 ,首先要为文法配置属性和语义规则 ,这里的属性实际上是指向结点的指针 ,而语义规则则是在语法分析时 ,调 用产生式而引发的建树动作 ,主要体现为结点的建立 。建立结点通常是通过函数的调用来实现 ,例如 mkno de ( ) 函数可 以建立一个内部结点 ; mkleaf () 函数建立终端结点 ,即叶结点 。函数之间通过指针的传递来实现抽象语法树的构建 。 3收稿日期 : 2008 - 03 - 13 基金项目 : 安徽省教育厅自然科学研究项目 ( 2005 KJ 364zc) 资助 。 作者简介 : 张玉州 ,男 ,安徽无为人 ,安庆师范学院计算机与信息学院讲师 。 属性是在上下文无关文法的基础上 ,为文法的每个符号设置若干个具有一定含义的“值”,它代表相应符号的语 属性可以参与一定的操作 ,如计算和传递 。属性计算时 ,需要依据一定的计算规则 ,即语义规则 。配备了属性及语义 则的文法称为属性文法 。文法符号典型的属性有 : ①变量的数据类型 ; ②表达式的值 ; ③存储器中变量的位置 ; ④程序 目标代码 ; ⑤数的有效位数 [ 2 ] 。 2 . 2 属性的分类 属性通常可
文档评论(0)