带转发的属性文法在模块化语言设计中的应用
1. 带转发的属性文法定义
带转发的属性文法被定义为一个元组 ⟨G, A, S⟩,其中:
- G 是上下文无关文法,定义为元组 ⟨N, T, P, S⟩,N 是有限的非终结符集合,T 是有限的终结符集合,S 是起始符号(S ∈ N),P 是有限的产生式集合。每个产生式 p ∈ P 的形式为 Xp₀ ::= Xp₁ Xp₂ … Xpₘₚ Xp_fₚ,Xp₀ 是产生式的左部非终结符,Xpᵢ(1 ≤ i ≤ mₚ)是右部的标准终结符和非终结符,Xp_fₚ 是可选的转发非终结符(若存在,左部非终结符 Xp₀ 与转发非终结符 Xp_fₚ 相同;若不存在转发非终结符,fₚ = mₚ)。
- A 为 G 中的非终结符指定属性。对于非终结符 X ∈ N,A(X) 是分配给 X 的属性集合,分为综合属性 As(X) 和继承属性 Ai(X),所有属性的集合 A = ⋃ₓ∈ₙ A(X)。属性 a ∈ A 的类型由 At(a) 指定,传统属性文法中 At(a) 属于基本类型集合 Tb(通常包括整数、字符串等),高阶属性文法中 At(a) 还可以是语法树的值,即 At(a) ∈ Tb ∪ N ∪ T。
- S 为 G 中的每个产生式定义属性定义语义函数。对于每个产生式 p,有语义规则集合 S(p) 用于计算 Xp₀ 的综合属性、Xpᵢ(1 ≤ i ≤ fₚ)的继承属性和非终结符属性 Xpᵢ(nₜₐₚ ≤ i ≤ fₚ)的值。
在高阶属性文法中,产生式右部的一些非终结符被分类为非终结符属性,其抽象语法树由与产生式关联的语义规则生成,而非通过解析源文本创建。可以定义 nₜₐₚ 为 p 的第一个非终结符属性的索引,使得对于每个 i ≥ nₜₐₚ,Xpᵢ 是非终
超级会员免费看
订阅专栏 解锁全文
22

被折叠的 条评论
为什么被折叠?



