跳转到主要内容

从Flatdata模式文件生成C++、Rust、Go或Python的源代码

项目描述

flatdata-generator

Build Status

flatdata模式文件生成代码。

有关flatdata及其实现更多信息的请参考flatdata的首页

使用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++
  • Rust
  • Python
  • Go
  • 点(模式图)
  • Flatdata(标准化稳定模式)

架构

阶段

flatdata生成器在几个阶段中工作,这些阶段相互之间清晰分隔,并且可以单独扩展/测试

  1. 使用pyparsing库解析源模式文件。模式语法在grammar.py中定义

  2. pyparsing.ParseResults构建一个节点树。节点树包含flatdata语法的每个结构的实体,按层次顺序组织,允许节点之间的非树引用

    • 命名空间 - 在树中允许嵌套命名空间。
    • 结构 - 结构将一组字段分组在一起。
    • 归档 - 归档将资源分组在一起,并引用结构或其他归档(参见引用
    • ResourceBase - 所有资源都源自ResourceBase
    • 引用 - 所有flatdata实体之间的引用都通过引用节点建模。所有引用都参与名称解析。有两种类型的引用
      • 运行时引用 - 模型显式引用和运行时显示的绑定资源。
      • 类型引用 - 模型类型依赖关系,这些依赖关系在稍后的拓扑排序期间和模式解析期间使用。
  3. 增强树 以包含不直接对应于pyparsing.ParseResults或用于实现高级功能的结构和引用。其中

    • 添加内置结构 如果任何资源需要它们。例如,multivector< N, ... >需要父命名空间中存在_builtin.multivector.IndexTypeN
    • 添加常量引用 到所有归档,以便常量可用于模式解析。
  4. 解析引用 遍历所有引用并尝试找到它们引用的节点,要么是在

    • 父作用域中(包括)直到最内层的父命名空间。
    • 根节点,如果路径是完全限定的。
  5. 执行拓扑排序 以检测实体之间的循环并确定依赖于某个实体的目标的序列化顺序。

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

节点树

树中的每个节点都包含其名称、属性(元数据)以及对其子节点的引用。每个节点都可通过某种路径访问,该路径是其父节点名称的点连接。节点树强制实施flatdata模式的一些属性

  • 没有冲突的声明:不允许存在两个路径相同的节点。
  • 所有引用都是正确的:所有引用节点都是可解析的。
  • 资源之间没有循环依赖:所有类型引用都参与由树边和类型引用的源和目标之间的边形成的DAG的拓扑排序。

引用

引用名称被混淆,以便它们不与其他路径组件混淆。例如,对类型T的引用将具有名称@T,同样,对.foo.bar.T的引用将更改为@@foo@bar@T

项目详情


下载文件

下载适合您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

flatdata_generator-0.4.6.tar.gz (36.4 kB 查看哈希值)

上传时间 源代码

构建发行版

flatdata_generator-0.4.6-py2.py3-none-any.whl (68.3 kB 查看哈希值)

上传时间 Python 2 Python 3