0

给定以下语法,我必须找到适当的语义动作来计算语言的每个字符串,字符串中括号对的数量。

S -> (L)

S -> 一个

L -> L, S

大号->小号

通常,为了执行这种类型的练习,我会构建一个示例字符串的派生树,然后添加属性。之后更容易找到语义规则。

所以我为字符串“ ((a, (a), a)) ”构建了这个派生树,但是我无法继续进行练习的解析。如何计算括号对?我不能那样做...

在此处输入图像描述

我不想要解决方案,但我希望有人帮助我在这些情况下进行推理。

(对不起那棵坏树……)

4

2 回答 2

0

OP写道:

这些可能是该语法的正确语义动作?

S -> (L) {Sp = 计数器 + 1}

S -> a {什么都不做}

L -> L, S {Lp = Sp}

L -> S {Lp = Sp}

.p 是合成属性。

于 2015-05-19T19:21:19.167 回答
0
S-> (S)     { S.count =S.count + 1} 
S-> SS{ S.count  = S.count + S.count}
S-> ϵ{S.count = 0}

这应该使事情清楚

于 2019-11-10T15:43:05.093 回答