5

以下は私の文法規則です。

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

各 Stmt# が stmts の # 番目の stmt であり、その正確な位置 (元のドキュメントの # 番目の行) を知りたいです。ユーザーが間違いを犯したときにその場所を指摘できるように。

バリデータ コンストラクターをオーバーライドし、HashMap <Stmt, Integer>各 Stmt# を stmts の # 番目の Stmt として取得するために an を格納します (これが正しい方法であるかどうかはわかりませんが...)。ただし、行番号を取得する方法がわかりません。

何か助けはありますか?

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 に答える