c# - 在 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++ 代码,但它需要您提到的 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 扩展。
推荐阅读
- sparql - dbpedia 上的 SPARQL 查询:查找丈夫比她们年轻的女性
- laravel - Laravel 8 @extends 参数不为空条件
- python - Django:如何订购查询集并将一些项目移动到查询集的末尾
- sql-server - 在 SQL 中为时间序列数据创建滚动窗口
- flask - 如何在 Flask 中组合和匹配 2 个表
- java - 我的代码没有在测试类中获取 ArrayList 值
- python - 为什么再次调用 func 后文件中的前一个条目会被删除?
- url - Github 页面重定向只能在本地工作,但不能在远程 Github 服务器上工作(得到 404)
- c# - 检测打开的文件何时被替换
- java - 将相同的请求标头发送到响应标头会导致无限循环和不正确的 json 响应 Spring boot