我正在尝试使用 OMetaJS 解析 DSL 并生成一个包含令牌值及其在原始流中的索引的 AST。
我知道我可以使用索引捕获规则语法 ( @<rule>
) 为我提供一个包含构建标记的索引的对象,但是是否可以捕获它以及标记值?
例如对于语法:
export ometa Test {
start = @<identifier>,
identifier = (letter | digit)+
}
解析“鲍勃”给出:
{ fromIdx : 0, toIdx : 3 }
如果我从“标识符”中删除“@”,那么解析会给出“Bob”作为结果。我最想得到的是两者的结合:
{ fromIdx : 0, toIdx : 3, value: 'Bob' }
我当然可以破解源代码,但是有更好的方法吗?
我想要同时拥有价值和位置,因为我正在尝试创建 DSL 的可视化表示,例如它允许编辑标识符名称。在这种情况下,我需要知道标识符出现在原始源中的哪个位置,以便我可以修改它。