首页 > 解决方案 > 在 C# 中使用 MySQL ANTLR4 语法,得到“找不到类型或命名空间名称‘MySQLBaseLexer’”

问题描述

我正在尝试使用 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?"

我一直在浏览讨论在 C# 上使用 ANTLR4 的教程、SO 和其他博客,但似乎没有任何东西可以解决这些错误。谁能指出我正确的方向以使其正常工作?

谢谢!

标签: c#mysqlparsingantlr4grammar

解决方案


我假设您正在使用位于此处的两个语法文件。虽然这些语法可能不包含 C++ 代码,但它需要您提到的 C++ 代码基类,因此您需要将MySQLBaseLexer.cpp代码和辅助代码移植到 Git 存储库中的 C#。ANTLR4 语法目录中的自述文件包含有关此要求的更多详细信息。

另外,您为什么不尝试使用 Visual Studio 2019、官方 Java Antlr Tool 4.7.2(需要 Java)和我的 Net Core 模板来生成 Antlr C# 程序?一切都集成到构建和运行 F5 中。看看这个这个。C# 工具至少比 Antlr 的正式发布晚两年。此外,*.tokens 是生成的文件。

我不明白为什么人们一直将 Antlr 生成的文件签入回购。它不应该被签入和使用,特别是如果你使用我的模板。.g4 文件是您的来源。如果您需要在 VS 中编辑 Antlr 语法的扩展,您可能需要查看我的 AntlrVSIX 扩展。


推荐阅读