|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- # RustDDS-Gen
-
- RustDDS-Gen 是一个用于将 IDL(接口定义语言)文件转换为 Rust 代码的工具。该工具专为 RustDDS 项目设计,支持解析 IDL 文件并生成相应的 Rust 结构体、枚举、常量等。
-
- ## 项目概述
-
- RustDDS-Gen 提供了一个完整的 IDL 到 Rust 代码的转换流程,主要包括:
-
- - IDL 文件解析(基于 pest 解析器)
- - 语法树(AST)构建和处理
- - Rust 代码生成
- - 命令行界面,支持多种选项
-
- ## 功能特性
-
- - 支持解析复杂的 IDL 文件,包括:
- - 模块(module)和嵌套模块
- - 结构体(struct)
- - 枚举(enum)
- - 常量(const)
- - 类型定义(typedef)
- - 接口(interface)
- - 联合类型(union)
- - 序列(sequence)
- - 支持各种 IDL 数据类型,如 string、octet、long、double 等
- - 支持参数方向(in、out、inout)
- - 提供详细的解析和代码生成日志
- - 支持调试选项,如打印语法树、保存语法树到文件等
-
- ## 项目结构
-
- ```
- RustDDS-Gen/
- ├── Cargo.toml # 项目配置和依赖
- ├── src/ # 源代码目录
- │ ├── main.rs # 主程序入口
- │ ├── parser/ # IDL 解析器
- │ │ ├── mod.rs # 解析器主模块
- │ │ ├── idl.pest # Pest 语法规则
- │ │ ├── interface.rs # 接口解析
- │ │ └── union.rs # 联合类型解析
- │ └── codegen/ # 代码生成器
- │ ├── mod.rs # 代码生成主模块
- │ ├── interface.rs # 接口代码生成
- │ ├── typedef.rs # 类型定义代码生成
- │ └── union.rs # 联合类型代码生成
- ├── test.idl # 测试用 IDL 文件
- └── test_output.rs # 测试生成的 Rust 代码
- ```
-
- ## 依赖项
-
- - pest (2.8): 用于解析 IDL 文件
- - pest_derive (2.8): 用于派生 pest 解析器
- - clap (4.4): 用于命令行参数解析
- - serde (1.0): 用于序列化和反序列化
- - serde_json (1.0): 用于 JSON 处理
- - anyhow (1.0): 用于错误处理
- - thiserror (2.0.12): 用于自定义错误类型
- - regex (1.11.1): 用于正则表达式处理
-
- ## 使用方法
-
- ### 基本用法
-
- ```bash
- rustdds-gen --input <IDL文件路径> --output <Rust文件输出路径>
- ```
-
- ### 命令行选项
-
- - `-i, --input <文件路径>`: 指定输入的 IDL 文件
- - `-o, --output <文件路径>`: 指定输出的 Rust 文件
- - `-d, --debug`: 启用调试输出
- - `--parse-only`: 只解析语法,不生成代码
- - `--verbose`: 打印详细的解析过程
- - `--print-ast`: 打印语法树
- - `--dump-ast <文件路径>`: 将解析结果保存到文件
-
- ### 示例
-
- ```bash
- # 基本用法
- rustdds-gen --input test.idl --output test_output.rs
-
- # 调试模式
- rustdds-gen --input test.idl --output test_output.rs --debug
-
- # 只解析不生成代码
- rustdds-gen --input test.idl --output test_output.rs --parse-only
-
- # 保存语法树到文件
- rustdds-gen --input test.idl --output test_output.rs --dump-ast ast.json
- ```
-
- ## IDL 支持特性
-
- RustDDS-Gen 支持以下 IDL 特性:
-
- - 基本数据类型:boolean, char, octet, short, long, float, double, string 等
- - 自定义类型:struct, enum, typedef, union
- - 模块和嵌套模块
- - 常量定义
- - 接口和方法
- - 参数方向(in, out, inout)
- - 序列(sequence)
- - 有限长度字符串(string<N>)
-
- ## 开发指南
-
- ### 构建项目
-
- ```bash
- cargo build
- ```
-
- ### 运行测试
-
- ```bash
- cargo test
- ```
-
- ### 添加新的 IDL 特性支持
-
- 1. 在 `src/parser/idl.pest` 中添加新的语法规则
- 2. 在 `src/parser/mod.rs` 中添加相应的解析函数
- 3. 在 `src/codegen/mod.rs` 中添加相应的代码生成函数
-
- ## 许可证
-
- [待定]
-
- ## 贡献指南
-
- 欢迎提交问题报告和拉取请求。对于重大更改,请先开启一个问题进行讨论。
-
- ## 未来计划
-
- - 支持更多 IDL 特性
- - 改进错误处理和报告
- - 添加更多单元测试和集成测试
- - 支持生成序列化/反序列化代码
- - 支持生成 DDS 相关代码
|