语义规则的属性

Attributes of semantic rules

我有这些规则:

S -> I#A
I -> a
I -> b
A -> aA
A -> bA
A -> EPSILON

这个语法产生了一个 a'sb'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 bA (A -> b A) 和最后一个 A 有一个 child EPSILON

在此之后,您可以将条件等语义规则添加到语法中,也称为属性语法。