如何使用 C# 的 ANTLR 获取 Lexer 和 Parser?

How can I get Lexer and Parser with ANTLR for C#?

好像 ANTLR 支持 C# 语言,但我不知道如何生成相关的 class。

我搜索并看到存在 Visual Studio 的扩展,但我不支持 2015

那么如何使用 ANTLR 手动为 C# 生成 Lexer 和 Parser?

无需与 visual studio 集成。

在此处下载 jar 文件:http://www.antlr.org/download/antlr-runtime-4.5.1.jar

保存到C:\Test

将 jar 添加到类路径中:

使用系统属性对话框 > 环境变量 > 创建或附加到 CLASSPATH 变量

在变量中,输入 C:\Test\antlr-runtime-4.5.1.jar 如果该变量的值已经存在,请在新条目前插入 ;

将语法文件复制到 C:\Test

转到命令行,导航到 C:\Test

创建您的 'outputdirectory' 文件夹,然后 运行 这个(记得替换 {outputdirectory} 和 {input}:

java org.antlr.v4.Tool -o -visitor -no-listener -Werror -o {outputdirectory} -Dlanguage=CSharp {input}.g4

VS 扩展主要用于语法高亮和编辑器细节。它非常有用,但你仍然可以没有它(IIRC VS2015 中的一个更改阻止了兼容版本)。

您应该做的是使用 Antlr4 NuGet package,它将自动生成解析器。它会在编译时 运行 ANTLR。

如果您有 VS 扩展(例如在 VS2013 中),只需将新的 ANTLR 语法文件添加到您的项目即可。

但如果您没有扩展程序,则必须手动设置项目。以下是使其工作的步骤:

  • 安装 NuGet 包:

  • 向项目添加一个新的文本文件,用 .g4 扩展名命名它

  • 保存,然后从解决方案资源管理器的项目上下文菜单中卸载项目:

  • 重新加载:

  • Select 您的 .g4 文件在解决方案资源管理器中,转到 属性 window,然后设置 构建 ActionAntlr4:

  • 编辑您的文件,例如:

    grammar MyLanguage;
    
    compileUnit: 'Hello' EOF;
    
  • 转到文件 -> 高级保存选项并选择不带签名的 UTF8 或 ISO-8859-1编码(ANTLR 只是不处理带有 BOM 的 UTF8):

  • 构建您的项目,您的新 类 将可用

  • 您现在可以编写一些代码了:

    var lexer = new MyLanguageLexer(new AntlrInputStream("Hello"));