【发布时间】:2019-12-18 00:45:09
【问题描述】:
我有以下语法
prod: (ID IN)? subrule (COMMA (ID IN)? subrule)*
ID、IN 和 COMMA 是令牌终端,prod 规则生成 subrule 表达式。
我正在使用带有访问者模式的 c++ 运行时,现在我遇到了以下问题。
如何找出 ID 令牌属于哪个子规则?调用 ID() 方法允许我请求特定的第 k 个 ID 令牌,但它不必对应于第 K 个子规则。我想消除歧义。这是一个令牌流示例
subrule COMMA subrule COMMA
ID IN subrule COMMA
如果我遍历子规则向量,则没有相应的并行 ID 迭代器,并且请求上述令牌流中的第一个 ID 匹配和第一个子规则匹配会给我第一个子规则和第三个子规则的 ID,而不是告诉我第一个子规则没有 ID。
似乎迭代 children() 向量很有希望,但似乎没有 API 可以区分终端和非终端。有没有办法使用访问者模式来解决这个问题?
谢谢!
【问题讨论】: