从Flatdata模式文件生成C++、Rust、Go或Python的源代码
项目描述
flatdata-generator
从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
生成器在几个阶段中工作,这些阶段相互之间清晰分隔,并且可以单独扩展/测试
-
使用
pyparsing
库解析源模式文件。模式语法在grammar.py
中定义 -
从
pyparsing.ParseResults
构建一个节点树。节点树包含flatdata语法的每个结构的实体,按层次顺序组织,允许节点之间的非树引用- 命名空间 - 在树中允许嵌套命名空间。
- 结构 - 结构将一组字段分组在一起。
- 归档 - 归档将资源分组在一起,并引用结构或其他归档(参见
引用
) ResourceBase
- 所有资源都源自ResourceBase
引用
- 所有flatdata实体之间的引用都通过引用
节点建模。所有引用都参与名称解析。有两种类型的引用运行时引用
- 模型显式引用和运行时显示的绑定资源。类型引用
- 模型类型依赖关系,这些依赖关系在稍后的拓扑排序期间和模式解析期间使用。
-
增强树 以包含不直接对应于
pyparsing.ParseResults
或用于实现高级功能的结构和引用。其中- 添加内置结构 如果任何资源需要它们。例如,
multivector< N, ... >
需要父命名空间中存在_builtin.multivector.IndexTypeN
。 - 添加常量引用 到所有归档,以便常量可用于模式解析。
- 添加内置结构 如果任何资源需要它们。例如,
-
解析引用 遍历所有引用并尝试找到它们引用的节点,要么是在
- 父作用域中(包括)直到最内层的父命名空间。
- 根节点,如果路径是完全限定的。
-
执行拓扑排序 以检测实体之间的循环并确定依赖于某个实体的目标的序列化顺序。
-
生成源代码 使用拓扑顺序的节点和/或树(取决于生成器架构 - 递归下降或迭代)。
节点树
树中的每个节点都包含其名称、属性(元数据)以及对其子节点的引用。每个节点都可通过某种路径访问,该路径是其父节点名称的点连接。节点树强制实施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.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f6e88603a67405c8b5abf37948de6ba7ce5dcb1d2ca2c731db1664ca3aecc5ca |
|
MD5 | f400f1523fde7c9aec56953db17bb748 |
|
BLAKE2b-256 | 2e85251e3ff7ab45267601209c7ca0d5e27d6208dea9af4567ee8b50208b9e85 |
关闭
flatdata_generator-0.4.6-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6701351d6fe5dbd11464b660d5d54e7767230b401f3ac4dfd2c310149cdaf877 |
|
MD5 | e28325e9fafab08131e83f8bf4329957 |
|
BLAKE2b-256 | 4de0c2cb8f005dc51ff2167e57e2242848592d7a94c7a64a6c089c3c4326c0b0 |