Antlrに基づいたスクリプト言語があります。実行時オブジェクト(例:文)を構築するパーサーとツリー文法です。実行時にステートメントを処理するとき、元のソースの位置を知りたい(たとえば、エラーをスローするときに、スクリプトソースに行と位置を記述したい)。実行時にAntlrでソース位置を維持する
私のランタイムオブジェクトのソース位置?私があまりにも多くのことを求めていないのであれば、文法ファイルにできるだけ影響を与えたくありません。
私は可能な限り文法に少しのコードを入れて、品質を向上させようとしました。 sb
が生成されたコードと私のランタイムの間のアダプタとして機能し、私のScriptBuilder
ある
multiplyExpression returns [Expression value]
: ^('*' l=expression r=expression)
{
$value = sb.newBinaryExpression(CorIdentifier.MULTIPLY, $l.value, $r.value);
}
;
:私の(多くの)表現の一つは、このようになります。私はnewBinaryExpression
に追加のパラメータとしてソース位置を追加することができますが、私は他のすべての式にも触れなければなりません。私は、トークンストリームをsbに一度入れるだけで、文法ソースにまったく影響を与えずにストリームからソース位置を取得できることを期待していました。
Antlrが多くのスクリプト言語で使用されているので、ソース位置処理が単一の側面であり、文法ファイル全体に邪魔されたくないので、これを処理する標準的な方法があります。あまり乾燥していない。
TreeAdaptorを私に指摘してくれてありがとう、それはまさに私が探していたものでした。 – Michael
あなたは大歓迎です@マイケル。 –