0

JParsec3 を使用して DSL を作成しています。解析/リンクは 2 つのフェーズで行われます。

  1. 言語を中間オブジェクトに解析する
  2. オブジェクトを実行可能なオブジェクトにリンクおよび変換する

ステージ 1 で作成されたオブジェクトは、まだ解析されていない他のオブジェクトを参照できるため、2 つのパスがあります。ここで、リンケージ エラー メッセージについて、存在しないアイテムを参照しているファイル内の場所にユーザーを送る必要があります。そのためには、中間オブジェクトに場所をアタッチする必要があります。

それ、どうやったら出来るの?

ありがとう!

4

1 に答える 1

0

これに関連するいくつかの PR と問題があったため、これは非常に人気のあるトピックのようです。これは、リリース 2.1 になった最新のhttps://github.com/abailly/jparsec/pull/16です (Maven Central で入手可能)。想定されるさまざまなソリューションについて長い議論 ( https://github.com/abailly/jparsec/issues/5Locatable ) がありましたが、この機能を含めないことにしました (まだ?)。

基本的に、2.1 以降では、withSource()コンビネーターまたはストリーム内の解析された位置を返す「昔ながらの」INDEX パーサーを使用できます。@fluentfuture からの提案は次のとおりです。

Mapper.curry(LocationAnnotated.class).sequence(Parsers.INDEX, parser, Parsers.INDEX);

public class LocationAnnotated<T> {
   public LocationAnnotated(int begin, T value, int end) {...}
}
于 2014-04-16T20:03:50.617 に答える