问题描述
我有以下语法:
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 (将#修改为@)