5

以下是我的语法规则:

Stmts: (stmts += Stmt ';')* ;
Stmt: Stmt1 | Stmt2 | Stmt3 ... ;

我想知道每个 Stmt# 是 stmts 中的 #-th stmt 及其确切位置(原始文档中的 #-th 行)。这样我可以在用户犯错时指出位置。

我重写了验证器构造函数并存储了一个HashMap <Stmt, Integer>以获取每个 Stmt# 是 stmts 中的第 # 个 Stmt(不确定这是否是正确的方法......)。但是我不知道如何获得他们的行号。

有什么帮助吗?

4

2 回答 2

5

给定一个 EObject,您可以使用org.eclipse.xtext.nodemodel.util.NodeModelUtils.getNode(EObject).

例如:

    INode node = NodeModelUtils.getNode(o);
    System.out.println(String.format("Node goes from line %s to line %s",node.getStartLine(), node.getEndLine()));
于 2013-08-27T12:07:16.780 回答
0

为了指出错误,简单地编写一个声明性验证器更合适——在这种情况下,您只需给 Xtext 有问题的 EObject,它就会设法将其追溯到源头。此外,您的语言项目中还会生成一个验证器存根。

但是,如果您需要手动追溯节点,可以使用 Injectable ILocationInFileProvider 来帮助您。

于 2013-08-23T15:41:46.263 回答