如何使用字符串模板

问题描述

我正在尝试使用 ANTLR 来了解语法的工作原理。我已经开始玩 ANTLR 并创建了一个简单的加法程序。 下面是我的简单语法。

grammar addition;
expr: NUMBER PLUS NUMBER;
NUMBER: [0-9]+
PLUS: '+';
SPACE
  :  ' ' {skip();};

这种语法非常适合像“1+1”这样的输入。但我想要做的是为输入“1+1”生成以下 C# 代码

var a = 1;
var b = 1;
Console.WriteLine(1+1);

当我研究时,我发现我可以在 ANTLR C# 中使用字符串模板。我尝试探索它们,但没有找到太多帮助。该文档有点难以理解。有人可以告诉我或提供一些学习参考资料,通过这些参考资料,我将能够知道如何在 ANTLR 中使用字符串模板。

解决方法

从 nuget 添加包 StringTemplate4:

 Install-Package StringTemplate4 -Version 4.0.8

一个最小的例子:

public string SumNumbers()
        {
        //Create string template and enclose variables between <..>
            var template = @"
A template for sum (a,b):

a= <a>
b= <b>
Sum = <sum>  
";
          //Instantiate Template class  
            var strTemplate = new Template(template);
            int a = 5;
            int b = 6;
            var sum = a + b;
            
            //define variables used by template 
            strTemplate.Add("a",a);
            strTemplate.Add("b",b);
            strTemplate.Add("sum",sum);
            //render the template
            return strTemplate.Render();
        }

输出:

求和 (a,b) 的模板:

a=5

b=6

总和 = 11

您可以在 project site 中找到有关使用 StringTemplat4 的详细文档: