我正在尝试使用ANTLR4语法,以便MySQL做一些基本的语句解析。这是我第一次使用ANTLR。我在C#中创建了一个空白的VS2017控制台项目,安装了ANTLR4、ANTLR4.CodeGenerator和Antlr4.RuntimeNuget包以及ANTLR语言支持扩展。我添加了MySQLLexer.g4、MySQLParser.g4和predefined.tokens文件。当我试图构建解决方案时,我会得到以下错误:
The type or namespace name 'MySQLBaseLexer' could not be found (are you missing a using directive or an assembly reference?"
我一直在查看教程,所以,以及其他讨论在C#上使用C#的博客,但是似乎没有什么能解决这些错误。有人能为我指出正确的方向让它正常工作吗?
谢谢!
发布于 2020-01-06 16:12:13
我假设您使用的是两个语法文件就在这里。虽然这些语法可能不包含C++代码,但它需要您提到的基类--即C++代码,因此您需要将MySQLBaseLexer.cpp和辅助代码移植到C#,这是在Git中找到的。ANTLR4语法目录中的自述文件包含有关此需求的更多详细信息。
另外,为什么不尝试使用VisualStudio2019、官方的Java工具4.7.2 (它需要Java)和我用于生成Antlr C#程序的Net模板?所有东西都集成到一个构建并运行F5中。看看这和这。C#工具至少比Antlr的正式发布晚了两年。此外,*.tokens是一个生成的文件。
我不明白为什么人们总是把Antlr生成的文件签入回购系统。它不应该签入和使用,特别是如果您使用我的模板。.g4文件是您的源。如果您需要一个扩展来编辑VS中的Antlr语法,您可能需要查看我的AntlrVSIX扩展。
发布于 2020-01-29 00:27:56
当我看到这个话题时,我对这个话题很感兴趣,但是最近我去度假了,我可以完成这个例子。
下面是一个示例:https://github.com/hmadrigal/playground-dotnet/tree/master/MsDotNetCore.MySqlParser
我创建了工作台( workbench,https://github.com/mysql/mysql-workbench/tree/8.0/library/parsers/grammars)提供的语法已经适应于在.NET核心上工作的地方(在可移植性方面使用.NET标准)
我创建了这个示例项目,它不是用于生产的,我也不是ANTLR专家,但是我喜欢编码和解析器。
看看README.md和https://github.com/hmadrigal/playground-dotnet/blob/master/MsDotNetCore.MySqlParser/MySqlParser.TerminalApp/MySqlParserTester.cs可以是您的引导程序。如果我能写一篇博客文章,我会分享这里的笔记。
https://stackoverflow.com/questions/59614914
复制相似问题