我有这些规则:
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?
答案 0 :(得分:0)
我不是100%确定问题是什么,但在评论中,语法用于读取字符串。您可以查看规则,就好像它们描述的是左侧是父级,右侧是子级的树。
所以在你的系统中似乎有一个由{a,b,EPSILON,#}组成的字母表。因此,如果你有一个#b的输入字符串,你将获得以下树
S --- I -- a
--- #
--- A -- b
-- A -- EPSILON
所以S的孩子是我,#和 A ( S - > I#A ),我有一个 a 的孩子( I - > a )。 A 有两个孩子 b 和 A(A - > b A),最后一个 A 有一个孩子 EPSILON
然后,您可以在语法中添加语义规则,例如条件,也称为属性语法。