Antlr4 C#目标和生成文件的输出路径

And*_*ren 10 c# msbuild antlr4

我有一个带有Antlr3语法文件的C#解决方案,我正在尝试升级到Anltr4.事实证明,语法很容易(它变得更好,大小只有三分之一!).生成解析器结果是棘手的部分.

在旧的解决方案中,我只是运行AntlrWorks来更新语法文件更改时的词法分析器和解析器.cs文件.词法分析器和解析器直接包含在与语法相同的项目中,因此解析器周围的框架可以直接使用它们.

使用C#的Antlr4目标,我注意到(至少在默认情况下)生成的Parser C#类的输出路径位于中间目录中,例如obj\Debug.这意味着我无法在同一个项目中直接使用解析器.如果我希望生成的源可以在我的sln中使用,我是否应该更改输出路径?我不想要它在我的sln?

我尝试为解析器生成创建一个单独的项目,即包含语法文件的项目.当使用Antlr4目标构建此项目时,可以从需要解析器类的项目中引用生成的程序集.但是,如果这个项目包含在解决方案中,我仍然没有在visual studio中获得任何intellisense,因为它将intellisense基于加载项目的源文件,所以它仍然不太可用.我能使其正常工作的唯一方法是构建然后卸载解析器项目,并让其他项目将其作为程序集文件而不是项目引用.

编辑:

在查看antlr-interest列表后,我发现这个线程表明intellisense的问题可能是Resharpers故障.如果是这种情况,那么我的问题是如何在我的解决方案中继续使用Antlr4和Resharper? https://groups.google.com/forum/#!topic/antlr-discussion/QSuJXphaBDg

Dem*_*n13 12

我找到了Resharper的扩展:ReSharper.ExternalCode.

Antlr提示:添加obj\DebugResharper - >代码检查 - >外部代码和重新加载解决方案.

它对我有用.


Est*_*ten 11

有一种简单的方法可以充分利用Antlr 4和Visual Studio.你有一个单独的语法项目和实施项目,但你错过了几个步骤.

按照以下步骤使Intellisense正常工作

  • 在Visual Studio中,转到工具 - >扩展和更新,然后在在线部分搜索Sam Harwell的"ANTLR语言支持".
    • 这做了几件事:
      • 为组合语法添加模板.
      • 添加语法突出显示
      • 为语法添加MSBuild目标以生成解析器.
  • 在您的解决方案中,设置您的项目结构如下:
      • 语法项目
        • ANTLR 4组合语法
      • 实施项目
        • 链接到生成文件的文件夹
        • 监听器实现类
  • 编写并编译你的语法.
  • 在"生成文件的链接"文件夹中,右键单击该文件夹,然后单击"添加" - >"现有项"
  • 浏览到Grammar Project\obj\Debug并选择所有生成的解析器文件.
  • 下一步很重要.在添加按钮上有一个小的下拉箭头.单击下拉箭头,然后单击"添加为链接".
    • 这将使用符号链接而不是直接副本将生成的文件添加到实现项目中.
    • 如果您以后必须更改语法,这将带来额外的好处,即不必删除和重新添加解析器文件.
  • Intellisense现在可以用于生成的解析器类,甚至不必禁用ReSharper.


Sam*_*ell 5

您在使用 ReSharper 时遇到了一个已知错误。ANTLR 3 和 ANTLR 4 C# 构建集成非常可靠,并使用 Microsoft 与其他语言和代码生成任务一起使用的长期建立的模式。您的选择是:

  1. 停止使用 ReSharper
  2. 让 ReSharper 作者解决对此功能缺乏支持的问题,或者
  3. 修改 ANTLR 4 目标以解决 ReSharper 中的限制,这将在构建中引入其他问题,这些问题对于您的使用来说可能是可接受的,也可能是不可接受的。

选项 1 当然是最便宜的,并且最有可能为您的项目提供可靠的长期支持。