免責事項: 私は先月まで Java を使用したことがなく、ANTLR や StringTemplate についてもそれまで聞いたことがありませんでした。この夏のインターンシップで、社内で誰も使ったことのないツールを使用するプロジェクトを与えられました。誰もが「私を信じて」おり、私は「それを理解する」と信じています。したがって、私の理解には大きなギャップがあります。私はこのプロジェクトが大好きで、たくさんのことを学んできたので、これを不平だと思わないでください。私はそれを機能させたいだけです。
現在、私は古いドメイン固有言語のかなりのプリンターの概念実証に取り組んでいます。私の ANTLR 文法は優れた構文木を生成しており、導入部のような単純な StringTemplate の例を出力できます。
ファイルに単純なテンプレートがあるとし.stg
ます。
module(type, name, content) ::= "<type> MODULE <name>; <content>; END MODULE."
add()
Java では、各テンプレート引数の値を設定するために使用できます。
STGroup g = new STGroupFile("example.stg");
ST st = g.getInstanceOf("module");
st.add("type", "MAIN");
st.add("name", "test");
st.add("content", "abc");
System.out.println(st.render());
// prints "MAIN MODULE test; abc; END MODULE."
ANTLR と ST でテキスト ファイルを読み込んで、きれいに印刷された出力を生成するにはどうすればよいですか?
MAIN MODULE test;
abc;
END MODULE.
なるはず
MAIN MODULE test; abc; END MODULE.
例えば。(すべての出力をこのようにフォーマットするつもりはありませんが、心配しないでください。それよりもかなりきれいに印刷されます。)
この回答で、ANTLR 4 が自動的にウォーカーを生成することを知りました。ANTLR 文法が正しい/適切に記述されていると仮定すると、入力テキスト ファイルから出力を生成するために、ANTLR ルール/トークンをテンプレート引数に一致させるにはどうすればよいですか?
どこかのドキュメントでそれを見逃した場合はお知らせください。ANTLR 4 および ST 4 の例は、以前のバージョンよりもはるかに少なくなっています。