语义规则的属性
Attributes of semantic rules
我有这些规则:
S -> I#A
I -> a
I -> b
A -> aA
A -> bA
A -> EPSILON
这个语法产生了一个 a's
和 b's
的序列。它们前面有一个 a
(或一个 b
)和一个 #
。我需要定义语义规则,它会在 # 之后为我提供 a 或 b 的数量(这取决于我在 # 之前选择的是哪一个)。
我不知道如何开始,因为 A 的值(在第一条规则中)取决于 I 的值。如何将 'a' 或 'b' 传递给 A?
我不是 100% 确定问题是什么,但正如评论中所述,语法用于读取字符串。你可以把规则看成是描述一棵树,左边是 parent,右边是 children.
所以在您的系统中似乎有一个由 {a, b, EPSILON, #} 组成的字母表。因此,如果您有 a#b 的输入字符串,您将得到以下树
S --- I -- a
--- #
--- A -- b
-- A -- EPSILON
所以S有I、#和A[=31=的children ] ( S -> I # A), I 有一个 child of a (I -> a)。 A 有两个 children b 和 A (A -> b A) 和最后一个 A 有一个 child EPSILON
在此之后,您可以将条件等语义规则添加到语法中,也称为属性语法。
我有这些规则:
S -> I#A
I -> a
I -> b
A -> aA
A -> bA
A -> EPSILON
这个语法产生了一个 a's
和 b's
的序列。它们前面有一个 a
(或一个 b
)和一个 #
。我需要定义语义规则,它会在 # 之后为我提供 a 或 b 的数量(这取决于我在 # 之前选择的是哪一个)。
我不知道如何开始,因为 A 的值(在第一条规则中)取决于 I 的值。如何将 'a' 或 'b' 传递给 A?
我不是 100% 确定问题是什么,但正如评论中所述,语法用于读取字符串。你可以把规则看成是描述一棵树,左边是 parent,右边是 children.
所以在您的系统中似乎有一个由 {a, b, EPSILON, #} 组成的字母表。因此,如果您有 a#b 的输入字符串,您将得到以下树
S --- I -- a
--- #
--- A -- b
-- A -- EPSILON
所以S有I、#和A[=31=的children ] ( S -> I # A), I 有一个 child of a (I -> a)。 A 有两个 children b 和 A (A -> b A) 和最后一个 A 有一个 child EPSILON
在此之后,您可以将条件等语义规则添加到语法中,也称为属性语法。