我想使用Antlr4来解析我的C#应用程序中的一些文件.鉴于我的语法,到目前为止,我已经能够生成解析器和词法分析器文件.现在我想在文件中使用read并将解析器和词法分析器应用于它们.我一直在寻找有关如何做到这一点的文档,但我很简短.我找到了一些使用以前版本的Antlr的旧例子,但它们似乎不适用于Antlr4.任何帮助,将不胜感激.谢谢.
Est*_*ten 27
作为旁注,Terence Parr的"最终的ANTLR 4参考"是了解ANTLR4如何工作以及不同发展模式的优秀资源.所有示例都在java中,但这些概念同时适用于Java和C#.
Nar*_*kha 11
尝试
using (StreamReader fileStream = new StreamReader(fileName)) {
AntlrInputStream inputStream = new AntlrInputStream(fileStream);
SearchLexer lexer = new SearchLexer(inputStream);
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
SearchParser parser = new SearchParser(commonTokenStream);
parser.RemoveErrorListeners();
parser.AddErrorListener(new ErrorListener()); // add ours
parser.root();
}
Run Code Online (Sandbox Code Playgroud)
我使用的是 Visual Studio 2019 Professional(最新版本 16.7.3)
目前VS 2019 不支持ANTLR 语言支持。有一个非官方版本可用https://github.com/tunnelvisionlabs/antlr4cs/issues/353,但它不兼容 VS2019 扩展 API(更多信息请参见:https://github.com/tunnelvisionlabs/antlr4cs/issues/353) /devblogs.microsoft.com/visualstudio/updates-to-synchronous-autoload-of-extensions-in-visual-studio-2019/)
您可以尝试以下操作(.net 标准库的步骤)
安装 VS 扩展 AntlrVSIX 8.0(使用扩展管理器)
创建 .NET 标准库项目 (MyLib.Parser.Grammar)
创建了一个虚拟(.cs)类 - 不确定是否仍然有必要,如果项目仅包含语法文件,过去会出现一些问题
参考以下包(使用Nuget)
添加语法文件(.g4),例如您可以使用此处提供的语法存储库 https://github.com/antlr/grammars-v4
假设您想解析 TSQL ( https://github.com/antlr/grammars-v4/tree/master/sql/tsql ) - 将 TSqlParser.g4 和 TSqllexer.g4 添加到您的项目中
编辑项目文件 MyLib.Parser.Grammar.csproj,它应该类似于
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Antlr4 Include="TSqlLexer.g4">
<Package>MyLib.Parser</Package>
<Visitor>true</Visitor>
<Error>false</Error>
<Listener>true</Listener>
</Antlr4>
<Antlr4 Include="TSqlParser.g4">
<Package>MyLib.Parser</Package>
<Visitor>true</Visitor>
<Error>false</Error>
<Listener>true</Listener>
</Antlr4>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Antlr4.Runtime.Standard" Version="4.8.0" />
<PackageReference Include="Antlr4BuildTasks" Version="8.3.0" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
此时,当您构建 MyLib.Parser.Grammar 项目时,Antlr4BuildTasks 工具将创建解析器 .cs 文件,但它们将在项目bin文件夹中可用(例如\MyLib.Parser.Grammar\bin\Debug\netstandard2.1)
创建另一个库项目 MyLib.Parser
创建项目依赖项,以便 MyLib.Parser.Grammar 在 MyLib.Parser 之前构建
使用 AntOutDir 属性和项目定义中的相对路径将输出文件从 MyLib.Parser.Grammar 定向到 MyLib.Parser 项目。现在项目文件中的 Antlr4 部分应该类似于:
Run Code Online (Sandbox Code Playgroud)<ItemGroup> <Antlr4 Include="TSqlLexer.g4"> <Package>MyLib.Parser</Package> <Visitor>true</Visitor> <Error>false</Error> <Listener>true</Listener> <AntOutDir>..\MyLib.Parser</AntOutDir> </Antlr4> <Antlr4 Include="TSqlParser.g4"> <Package>MyLib.Parser</Package> <Visitor>true</Visitor> <Error>false</Error> <Listener>true</Listener> <AntOutDir>..\MyLib.Parser</AntOutDir> </Antlr4> </ItemGroup>
| 归档时间: |
|
| 查看次数: |
18080 次 |
| 最近记录: |