Syntax 语法定向定义(计算括号对数)

Syntax 语法定向定义(计算括号对数),syntax,grammar,parse-tree,Syntax,Grammar,Parse Tree,根据下面的语法,我必须找到适当的语义动作来计算语言的每个字符串中括号对的数量 S->(L) S->a L->L,S L->S 通常,为了执行这种类型的练习,我构建一个示例字符串的派生树,然后添加属性。之后,更容易找到语义规则 所以我为字符串“((a,(a),a))”构建了这个派生树,但是我不能继续解析这个练习。如何计算括号对?我不能那样做 我不想要解决方案,但我希望有人能帮助我在这些情况下进行推理 (我为这棵坏树感到抱歉…OP写道: 这些可能是该语法的正确语义动作 S->(L){S.p=cou

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

S->(L)

S->a

L->L,S

L->S

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

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

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

(我为这棵坏树感到抱歉…

OP写道:

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

S->(L){S.p=counter+1}

S->a{什么都不做}

L->L,S{L.p=S.p}

L->S{L.p=S.p}

.p是一个合成属性


这应该让事情变得清楚了

这还不清楚。如果你有这棵树,计算括号的数量有什么问题?因为参数的配对是由语法本身处理的,似乎你可以在右括号(或左括号)的匹配上附加一个计算语义动作。@OliverCharlesworth Hi Oliver,谢谢你的回答。我想说的一个逻辑是,属性的结构必须使用一个计数器,每当您找到一对括号时,计数器都会更新。但是在哪里初始化计数器呢?如何升级?例如,在生产L->S中,属性是什么?我没有放任何人,没有括号。。但这似乎很奇怪。在这种类型的练习中,是否有任何东西阻止了我,在这种练习中,你必须计算某物的出现次数…@500 InternalServerError例如,我可以将语义动作S.p=1+计数器添加到规则S->(L)中。但是如何以及在何处初始化计数器?而其他的产品,它们只携带这个值?计数器将保持在全局级别,并在调用解析器之前初始化为零。附加到
的匹配项的语义操作将是
计数器+++
)。
S-> (S)     { S.count =S.count + 1} 
S-> SS{ S.count  = S.count + S.count}
S-> ϵ{S.count = 0}