属性语法

编辑
本词条由“匿名用户” 建档。
属性语法是用语义信息处理来补充形式语法的一种正式方式。语义信息被存储在与语法的终端和非终端符号相关的属性中。属性的值是与语法的产品相关的属性评价规则的结果。属性允许以受控和正式的方式将信息从抽象语法树的任何地方转移到其他地方。每个语义函数只处理一个生成规则中出现的符号的属性:语义函数的参数和结果都是一个特定规则中的符号的属性。当语义函数定义了规则左侧的符号的属性值时,该属性被称为合成的;否则就...

属性语法

编辑

属性语法是用语义信息处理来补充形式语法的一种正式方式。语义信息被存储在与语法的终端和非终端符号相关的属性中。属性的值是与语法的产品相关的属性评价规则的结果。属性允许以受控和正式的方式将信息从抽象语法树的任何地方转移到其他地方。每个语义函数只处理一个生成规则中出现的符号的属性:语义函数的参数和结果都是一个特定规则中的符号的属性。当语义函数定义了规则左侧的符号的属性值时,该属性被称为合成的;否则就称为继承的。因此,合成属性的作用是在解析上传递语义信息,而继承属性则允许从父节点向下和跨语法树传递值。在简单的应用中,例如算术表达式的评估,属性语法可能被用来描述除了解析之外的整个任务,以直截了当的方式进行;在复杂系统中,例如在构建语言翻译工具(如编译器)时,它可能被用来验证与语法相关的语义检查,代表没有被语法定义明确传授的语言规则。它也可能被解析器或编译器用来将语法树直接翻译成某些特定机器代码,或翻译成某些中间语言。

属性语法的历史

编辑

属性语法是由DonaldKnuth和PeterWegner发明的。虽然DonaldKnuth被认为是整个概念的创造者,但PeterWegner在与Knuth的谈话中发明了继承属性。一些雏形的想法可以追溯到IMP的作者EdgarT.NedIrons的工作

属性语法的例子

编辑

下面是一个简单的无语境语法,它可以描述一种由整数的乘法和加法组成的语言。Expr→Expr+TermExpr→TermTermTerm→Term*FactorTerm→FactorFactor→(Expr)Factor→integer下面的属性语法可以用来计算语法中写的表达式的结果。请注意,这个语法只使用合成的值,因此是一个S属性语法。

属性语法

合成属性

编辑

一个合成属性是由子属性的值计算出来的。由于子属性的值必须首先被计算出来,这是一个自下而上传播的例子。为了正式定义一个合成的属性,让{displaystyle{{alpha_{j_{1}},ldots,alpha_{j_{m}}}}}subseteq{{alpha_{1},ldots,alpha_{n}}}}。(即属性的值是一个函数f{displaystylef}应用于规则主体中的一些符号值)

继承属性

编辑

解析树中的一个节点的继承属性是用父级或同级的属性值定义的。继承属性便于表达一个编程语言结构对其出现的上下文的依赖性。例如,我们可以使用继承属性来跟踪一个标识符是出现在赋值的左边还是右边,以决定是否需要标识符的地址或值。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/163777/

(3)
词条目录
  1. 属性语法
  2. 属性语法的历史
  3. 属性语法的例子
  4. 合成属性
  5. 继承属性

轻触这里

关闭目录

目录