从平面数据模式文件生成C++、RIST、GO或Python的源代码

flatdata-generator的Python项目详细描述


平面数据生成器

Build Status

flatdata架构文件生成代码。

有关flatdata及其实现的更多信息,请refer to flatdata's homepage

使用flatdata-generator

# installation
pip3 install flatdata-generator

# example: generate a header-only C++ library
flatdata-generator -s locations.flatdata -g cpp -O locations.hpp

当前支持的目标语言:

    C++
  • 生锈
  • Python
  • 前进
  • 点(模式图)
  • flatdata(规范化稳定模式)

架构

阶段

flatdata生成器工作在几个阶段,这些阶段彼此明显分离,可以单独扩展/测试:

  1. 使用pyparsing库分析源架构文件。语法 因为模式是在grammar.py

    中定义的
  2. pyparsing.ParseResults中构造节点树。节点树 包含flatdata语法的每个构造的实体,有组织地 按层次顺序,允许节点之间的非树引用:

    • Namespace允许在树中嵌套命名空间。
    • Structure-结构将一组字段组合在一起。
    • Archive-归档文件将资源和 引用结构或其他存档(请参见Reference
    • ResourceBase-所有资源都来自ResourceBase
    • Reference-flatdata实体之间的所有引用都是 用Reference节点建模。所有推荐人都参与 名称解析。有两种类型的引用:
      • RuntimeReference-模型显式引用和绑定 在运行时显示自己的资源。
      • TypeReference-模型类型依赖项,在 后期拓扑排序和模式解析。
  3. 使用非 直接对应于pyparsing.ParseResults或需要 实现高级功能。其中:

    • add内置结构如果任何资源需要它们。为了 例如,multivector< N, ... >需要 _builtin.multivector.IndexTypeN可用。
    • 向所有存档添加常量引用,以便常量 可用于架构解析。
  4. resolve references遍历所有引用并尝试 找到它们所指的节点,可以在:

    • 父作用域直到(包含)最里面的父命名空间。
    • 如果路径完全限定,则为根节点。
  5. 执行拓扑排序以检测实体之间的循环 以及确定依赖于 就一个。

  6. 按拓扑顺序使用节点生成源代码和/或 树(取决于生成器体系结构-递归下降 或迭代)。

节点树

树的每个节点都由其名称、属性(元数据)和 包含对其子级的引用。每个节点都可以通过特定的 路径,它是父级名称的点连接。 节点树强制执行flatdata模式的几个属性:

  • 没有冲突的声明:没有具有相同路径的两个节点 允许。
  • 所有引用都是正确的:所有引用节点都是可解析的。
  • 资源之间没有循环依赖关系:allTypeReference 参与树形dag的拓扑排序 源和目标之间的边和边TypeReference

参考文献

引用名称已损坏,因此它们与其他路径不模棱两可 组件。例如,对类型T的引用将具有名称@T, 类似地,对.foo.bar.T的引用也将更改为 @@foo@bar@T

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java可以从struts传递<param/>。xml作为隐藏参数?   带有文件字符串的java建议   安卓中带有用户名和密码的java RTSP流   eclipse如何在我的java代码中导入CSVreader特性?无论出于什么原因,我都不能使用cvsreader功能   Java类型推断在编译时失败,但Eclipse编译并运行良好   SpringBootJava。木卫一。IOException weblogic。乌提尔斯。编译器。ToolFailureException   在Spark中排序时出现java NotSerializableException   java在整数数组中查找缺少的数字   Angular 4中的AES 128加密和Java中的解密   显示GUI的java问题   java不包括ant build in javadocs中的文件   关闭弹出窗口后关闭java平台| JavaFX   java使用for循环还是while循环进行迭代?   java如何使用POI Apache获取生成的Excel文件中列的大小或长度   java Thornttail ArquillianTest,带有用于pactProvider测试的h2数据库   为什么XPATH(Java7)选择了太多的节点?   在自定义远程webapp上将数据附加到我的HDFS时发生java异常   xml如何在java多模块项目中创建bean entityManagerFactoryBean?   ConcurrentHashMap中的java死锁   Tomcat Java内存选项保存在哪个文件中