在不相关的项目中共享ANTLR语法

时间:2019-09-23 14:45:16

标签: .net antlr

我正在寻找一种方法来管理多个.NET系统中语法之间的依赖关系。

我有几个使用特定于应用程序的语言的.NET库:

  • 用于计算在运行时指定的表达式的库,
  • 用于查询特定于应用程序的数据库的库,
  • 用于运行多个相互依赖的计算的库,
  • 其他一些使用自己的小语言的项目

以下是显示我的库及其词法分析器/解析器组合之间的依赖关系的图:

Parser Dependency

箭头显示系统各部分之间的依赖关系:

  1. 库及其语法之间的依赖关系,
  2. 呈现给我们的构建系统(MSBuild)的.NET模块之间的依赖性,以及
  3. 通过语法文件中的import指令,语法之间的源级别依赖关系。

第一类和第二类的依赖关系(用蓝色箭头显示)由构建系统完美地管理,不会对我们造成任何问题。但是,第三种类型的依赖关系(红色箭头)要求在编译查询语法时可以使用表达式语法的源代码。构建系统未直接支持这种依赖关系,这破坏了对系统进行模块化的尝试。

我通过在构建时将表达式语法的源文件复制到共享位置来解决此问题的技术问题,以便从属库的构建可以从那里进行提取。但是,逻辑仍然无法解决,因为复制会创建构建系统不知道的隐藏依赖项。

我正在寻找一种解决方案,该解决方案可以使构建系统管理或完全消除源依赖。

1 个答案:

答案 0 :(得分:1)

您可以将所有语法放在一个单独的项目(例如“解析器”库)中,该项目为其他库/引擎提供基本的解析功能:

(ExpressionParser, QueryParser, ComputingEngineParser) <--- [Parsers.DLL]

[Parsers.DLL] <--- [ExpressionLibrary.DLL]
              <--- [QueryLibrary.DLL]
              <--- [ComputingEngine.EXE]
相关问题