我有一个带有 Antlr3 语法文件的 C# 解决方案,我正在尝试升级到 Anltr4。事实证明,语法是最简单的部分(它变得更好,而且大小只有三分之一!)。生成解析器原来是棘手的部分。
在旧的解决方案中,我只是在语法文件更改时运行 AntlrWorks 来更新词法分析器和解析器 .cs 文件。词法分析器和解析器与语法直接包含在同一个项目中,因此解析器周围的框架可以直接使用它们。
对于 C# 的 Antlr4 目标,我注意到(至少在默认情况下)生成的 Parser C# 类的输出路径位于中间目录中,例如 obj\Debug。这意味着我不能直接在同一个项目中使用解析器。如果我希望生成的源在我的 sln 中可用,我应该更改输出路径吗?我不想在我的 sln 中使用它吗?
我尝试为解析器生成单独制作一个项目,即一个只包含语法文件的项目。当使用 Antlr4 目标构建此项目时,可以从需要解析器类的项目中引用生成的程序集。但是,如果该项目包含在解决方案中,我仍然没有在 Visual Studio 中获得任何智能感知,因为它的智能感知基于已加载项目的源文件,因此它仍然不太可用。我可以让它正常工作的唯一方法是构建然后卸载解析器项目,并让其他项目将其作为程序集文件而不是项目引用。
编辑:
在查看 antlr-interest 列表后,我发现这个线程表明智能感知的问题可能是 Resharpers 故障。如果是这种情况,那么我的问题是如何在我的解决方案中继续使用 Antlr4 和 Resharper? https://groups.google.com/forum/#!topic/antlr-discussion/QSuJXphaBDg