鉴于以下语法,我必须找到适当的语义动作来为语言的每个字符串计算字符串中括号对的数量。
S->(L)
S-> a
L-> L,S
L-> S
通常,为了执行这种类型的练习,我构建了示例字符串的派生树,然后添加了属性。之后,更容易找到语义规则。
所以我为字符串“ (((a,(a),a)))”构建了派生树,但是我无法继续进行练习的解析。如何计算括号对?我无法做到这一点...
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9LSk1aSC5wbmcifQ==” alt =“在此处输入图像描述”>
我不想要解决方案,但我希望有人在这些情况下为我提供推理依据。
((我为那棵坏树感到抱歉...)
OP写道:
这些可能是该语法正确的语义动作?
S->(L) {S.p =计数器+ 1}
S-> a {不执行任何操作]
L-> L,S {L.p = S.p}
L-> S {L.p = S.p}
。p是综合属性。
S-> (S) { S.count =S.count + 1}
S-> SS{ S.count = S.count + S.count}
S-> ϵ{S.count = 0}
这应该使情况清楚