Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ANTLR for C获取Lexer和解析器?_C#_Antlr - Fatal编程技术网

C# 如何使用ANTLR for C获取Lexer和解析器?

C# 如何使用ANTLR for C获取Lexer和解析器?,c#,antlr,C#,Antlr,似乎ANTLR支持C语言,但我不知道如何生成相关类 我搜索并看到了Visual Studio的扩展,但我不支持2015 那么,如何使用ANTLR手动生成C的Lexer和解析器呢 无需与visual studio集成 在此处下载jar文件: 将其保存到C:\Test 将jar添加到类路径: 使用系统属性对话框>环境变量>创建或附加到类路径变量 在变量中,放入C:\Test\antlr-runtime-4.5.1.jar如果此变量已经存在值,则插入一个;在你新加入之前 将语法文件复制到C:\Test

似乎ANTLR支持C语言,但我不知道如何生成相关类

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


那么,如何使用ANTLR手动生成C的Lexer和解析器呢

无需与visual studio集成

在此处下载jar文件:

将其保存到C:\Test

将jar添加到类路径:

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

在变量中,放入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中的更改阻止了兼容版本

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

例如,如果您在VS2013中有VS扩展名,只需向项目中添加一个新的ANTLR语法文件,就完成了

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

安装NuGet软件包: 将新文本文件添加到项目中,并以.g4扩展名命名 保存项目,然后从解决方案资源管理器中的项目上下文菜单中卸载项目: 重新加载它: 在解决方案资源管理器中选择.g4文件,转到“属性”窗口,并将生成操作设置为Antlr4: 编辑您的文件,例如:

grammar MyLanguage;

compileUnit: 'Hello' EOF;
转到文件->高级保存选项,选择不带签名的UTF8或ISO-8859-1编码ANTLR不处理带BOM的UTF8:

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

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

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

这个问题有两个有效的答案,但有些人认为它太宽泛了:-\