如何解决添加继承属性以解决语法中的语义问题
我有以下语法:
S -> lpar R rpar
L -> id comma L
L -> num
在语法中,您可以构建元组,例如 (a,b,c,3)
。令牌 num
的字段 value
包含数字的值,令牌 id
的元素 name
包含变量的名称。
我想做以下语义检查:如果元组中唯一字段的数量不等于最后的值,则抛出error()
。例如,(0),(a,1),3)
有效而 (a,0),a,2),(b,1)
无效。
我已经在BottomUp grammer LR(0)中解决了:
L -> num {
L.vec = new vector<string>;
L.value = num.value;
}
L -> id comma L1 {
bool found = false;
L.vec = L1.vec;
for (int i = 0; i < L.vec.size(); ++i) {
if (L.vec(i) == id.name) {
found = true;
break;
}
}
if (!found) {
L.vec.push_back(id.name);
}
}
S -> lpar L rpar {
if (L.vec.size() != L.value) {
error();
}
}
如你所见,我用综合属性解决了这个问题。现在我想对继承的属性做同样的事情。这意味着它现在应该是 TopDown LL(1)。我在这个问题上花了一些时间,但找不到关于如何解决它的正确答案。有人可以建议如何解决吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。