E. Badouel
等人理论计算机科学电子笔记
229
(
5
)(
2011
)
39
运算符如下:
分叉
:
树
×
树
→
树叶标签
:
→
树
因此,我们有一组常数,由一组标签和一个二进制
操作符. 它对应于以下Haskell数据类型定义。
数据树a
=
叶子a
|
叉(树a)(树a)
定义
2.2设
λ =
(S
,
O
p
)是一个签名,
λ-
代数A由一个解释域,一个集合
As
,对每
个 类 s ∈ S, 和 一 个 函 数 op
A
:
As
1
×···×
As
n
→As
组 成 , 它
与 每 个 算 子 op :
s
1
×···×
Sn
→
s
相关联
。代数
f
:A→B的态射是一族映射
fs
:
As
→Bs
,
使得对每个
ai
∈
As
i
f
s
op
A
(
a
1
,
.
,
a
n
)
= op
B
(
f
s
1
(
a
1
)
,
...
,
f
s
n
(
a
n
))
当一个代数的解释域是完全偏序且算子的解释是连续函数时,称该代数是连续我们
让T(T)
s
表示s类型的项的集合,而Tree(T)
s
表示
s
类的
有限树或无限树的集合,
它们建立在签名T及其近似项上。这些集合分别是自由连续代数和自由连续代数的
载体集合。我们用有限树来标识项,我们将树解释为部分映射
t
:N
n→
n
,其域
Dom
(
t
) 是 非 空 前 缀 闭 语 言 , 使 得 对 于 每 个
u
∈
Dom
(
t
) , 其 中
t
(
u
)
=op
:
s
1
×
···
×
s
n
→
s
,且
i
∈N,有
u
·
i
∈
Dom
(
t
)惠
1
≤
i
≤
n
且
σ
(
t
(
u.i
))
=s
i
。 此外,我们
让
tu
表示由Dom(
tu
)={v∈N给出的以u为根的t的子
树
|u·v∈Dom(t)}和t
u
(v)= t
(u·v).
2.2
属性文法
一棵树的节点可以用属性来装饰,属性的值是根据语义规则计算的。
定义
2.3
一个(抽象的)
属性文法
G
=
(
S
,
Attr
,
D
,
sem
)是一个符号
G =
(S
,
O
p
),它的每个语法符号(sort)都与一组属性相关联
,在这组属性中我们区分
继承
的属性
和
合成的属性
:
Attr
(
s
)
= Inh
(
s
)
Syn
(
s
)
.
属性
q
∈
Attr
(
s
)的赋值域
是完全偏序D
q
。我们让
D
s
↓
=
q
∈
In
h
(
s
)
D
q
和
D
s
↑
=
q
∈
Sy
n
(
s
)
D
q
分别表示
s
类节点的继承属性和合成大小属性的解释域。此外,一组规则(所谓的
语义规则
)与签名的每个操作符相关联。这些规则给出了属性值之间的函数依赖关
系,并由函数给出:
sem
(
op
):
D
s
↓
×
D
s
↑
1
×·
·
·×
D
s
↑
n
−→
D
s
↑
×
D
s
↓
1
×·
··
×
D
s
↓
n
一个节点
u
∈
Dom
(
t
)被称为语法符号
s=
σ
(
t
(
u
)),则它具有与
s
相同的属性。作出区分的理由