我使用Boost.Spirit来解析类似于
的结构namespace Foo { class Bar { ... } }
这很好用:我得到了namespace_declaration
类型的对象,它有一个包含它的内容的变体列表,例如class_declaration
s。
我的问题是:我如何确保在解析阶段,class_declaration
可以引用其包含的namespace_declaration
?换句话说,我怎样才能引用那个我刚刚解析过的对象?
答案 0 :(得分:3)
你做不到。至少不舒服。
您希望这样做的事实可能表明您正在混淆解析和处理代码。
如果你需要的只是语义检查,你可以尝试在上下文的子规则中注入必要的细节,例如:使用继承的属性。
如果仅仅因为封闭结构(显然)尚未完成这一事实,这不可能合理地成为“双向关系”:
namespace X { class Y { }; }
逻辑上,您可以期望已经解析了名称"X"
- 但不能保证它已被分配到公开的属性值while (condition) { statement; }
do { statement; } while (condition);
,您可以看到为什么不能指望statement
知道封闭控制流程语句。所以,总而言之,我建议