给定以下语法,我必须找到适当的语义动作来为语言的每个字符串计算字符串中括号对的数量。
S - > (L)
S - >一个
L - > L,S
L - >小号
通常,为了执行这种类型的练习,我构建了一个示例字符串的派生树,然后添加了属性。之后,更容易找到语义规则。
所以我为字符串" ((a,(a),a))"构建了这个派生树,但我无法继续解决这个练习。我如何计算括号对?我不能那样做......
我不想要解决方案,但我希望有人帮助我解决这些问题的原因。
(我很抱歉这棵坏树......)
答案 0 :(得分:0)
这些语法可能是正确的语义动作吗?
S - > (L) {S.p = counter + 1}
S - > a {不做任何事情}
L - > L,S {L.p = S.p}
L - > S {L.p = S.p}
.p是一个综合属性。
答案 1 :(得分:0)
S-> (S) { S.count =S.count + 1}
S-> SS{ S.count = S.count + S.count}
S-> ϵ{S.count = 0}
这应该使事情变得清楚