我该如何使用ANTLR为C#获取词法分析器和语法分析器?

4
似乎ANTLR支持C#语言,但我不知道如何生成相关的类。
我搜索并发现Visual Studio有一个扩展,但它不支持2015。
那么,我该如何手动使用ANTLR为C#生成Lexer和Parser?

这个问题有两个有效答案,但有些人认为它太宽泛了?:-\ - Lucas Trzesniewski
2个回答

5

该VS扩展主要用于语法高亮和编辑器美化。它非常有用,但您仍然可以在没有它的情况下使用(如果我没记错的话,VS2015中的更改会阻止兼容版本的发布)。

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

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

但是,如果您没有该扩展,您将不得不手动设置项目。以下是使其工作的步骤:

  • 安装NuGet包:

NuGet installation

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

New text file

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

Context menu

  • 重新加载它:

enter image description here

  • 在解决方案资源管理器中选择您的.g4文件,进入属性窗口,将生成操作设置为Antlr4

Build action

  • Edit your file, for instance:

    grammar MyLanguage;
    
    compileUnit: 'Hello' EOF;
    
  • Go to File -> Advanced Save Options and choose UTF8 without signature or the ISO-8859-1 encoding (ANTLR just doesn't handle UTF8 with BOM):

Encoding

  • Build your project, your new classes will be available

  • You can now write some code:

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

1

不需要与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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接