1

StringTemplate 4 を使用して、Visual Studio でコード生成を行うことに成功しています。StringTemplate と ANTLR の拡張機能をインストールしましたが、非常に優れています。

テストでは、*.st4 (StringTemplate) ファイルの使用方法を理解できますが、*.stg (StringTemplateGroup) ファイルの使用方法はわかりません。別の StringTemplate に埋め込むことができる定義のコレクションですか? もしそうなら、*.st4 ではなく *.stg から生成されるコードはどのようになりますか?

4

2 に答える 2

7

StringTemplate グループ ファイルは、1 つのファイルに格納されたテンプレートのコレクションです。GitHub の ANTLR プロジェクトには、多くの例が含まれています。たとえば、ANTLR 4 の Java ターゲット用のすべてのコード生成テンプレートを含むJava.stgです。

StringTemplate C# プロジェクト自体のStringTemplateTests.csファイルで、C# で StringTemplate 3 を使用するいくつかの例を見つけることができます。これは最も分かりやすいドキュメントではありませんが、幅広い ST3 機能をカバーする例が含まれています。を使用した一例を次に示しStringTemplateGroupます。

string templates =
        "group dork;" + newline +
        "" + newline +
        "test(name) ::= <<" +
        "<(name)()>" + newline +
        ">>" + newline +
        "first() ::= \"the first\"" + newline +
        "second() ::= \"the second\"" + newline
        ;
StringTemplateGroup group =
        new StringTemplateGroup( new StringReader( templates ) );
StringTemplate f = group.GetInstanceOf( "test" );
f.SetAttribute( "name", "first" );
string expecting = "the first";
Assert.AreEqual( expecting, f.ToString() );

読みやすいように、そのテストへのテンプレート グループ ファイル コードは、エスケープ文字なしで次のようになります。

group dork;

test(name) ::= <<<(name)()>
>>
first() ::= "the first"
second() ::= "the second"
于 2013-05-09T22:44:34.383 に答える
2

サムが提示した内容に追加するために、ここで自分の質問に答えます。私の混乱は、ST3 と ST4 の間の命名規則とメソッド呼び出し規則の大きな違いによるものだと思います。以下は、Sam が ST4 を使用して作成したものを翻訳したものです。

var sr = new StreamReader( "dork.stg" );
var txt = sr.ReadToEnd();
sr.Close();
TemplateGroup group = new TemplateGroupString( txt );
var f = group.GetInstanceOf( "test" );
f.Add( "name", "first" );

// writes out "the first"
Console.WriteLine( f.Render() );

何か見逃していたら教えてください、サム。ありがとう。

于 2013-05-10T07:13:36.173 に答える