我正在尝试使用MySQL的ANTLR4语法来进行一些基本的语句解析。 这是我第一次使用ANTLR。 我在VS2017中创建了一个空白的C#控制台项目,安装了ANTLR4,ANTLR4。CodeGenerator和Antlr4.Runtime nuget包以及ANTLR语言支持扩展。 我添加了MySQLLexer.g4,MySQLParser.g4和预定义的.tokens文件。 当我尝试构建解决方案时,出现以下错误:
The type or namespace name 'MySQLBaseLexer' could not be found (are you missing a using directive or an assembly reference?"
我一直在浏览教程,SO和其他讨论在C#上使用ANTLR4的博客,但似乎没有什么可以解决错误。 谁能指出我正确的方向来使其正常工作?
谢谢!
我假设您正在使用位于此处的两个语法文件。虽然这些语法可能不包含C++代码,但它需要您提到的基类,即C++代码,因此您需要将MySQLBaseLexer.cpp
和辅助代码移植到 C#,该代码可在 Git 存储库中找到。ANTLR4 语法目录中的自述文件包含有关此要求的更多详细信息。
另外,你为什么不尝试使用Visual Studio 2019,官方Java Antlr Tool 4.7.2(需要Java(和我的Net Core模板来生成Antlr C#程序?所有内容都集成到构建中并运行 F5。看看这个和这个。C#工具至少比Antlr的正式发布晚了两年。此外,*.tokens 是一个生成的文件。
我不明白为什么人们不断将 Antlr 生成的文件签入存储库。不应签入和使用它,尤其是在使用我的模板时。.g4 文件是您的来源。如果您需要在VS中编辑Antlr语法的扩展,您可能需要查看我的AntlrVSIX扩展。
一旦我看到这个主题,我就对这个主题感兴趣,但最近去度假了,我可以完成这个示例。
下面是一个示例: https://github.com/hmadrigal/playground-dotnet/tree/master/MsDotNetCore.MySqlParser
我创建了工作台(https://github.com/mysql/mysql-workbench/tree/8.0/library/parsers/grammars(提供的语法以适应.NET Core(使用.NET标准实现可移植性(的地方
我创建了此示例项目,它不适用于生产,我不是 ANTLR 专家,但我喜欢编码和解析器。
看看 README.md,https://github.com/hmadrigal/playground-dotnet/blob/master/MsDotNetCore.MySqlParser/MySqlParser.TerminalApp/MySqlParserTester.cs 可能是你的引导。如果我能写一篇博客文章,我会在这里分享笔记。