根据IDL文件生成RUST文件
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 maanden geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # RustDDS-Gen
  2. RustDDS-Gen 是一个用于将 IDL(接口定义语言)文件转换为 Rust 代码的工具。该工具专为 RustDDS 项目设计,支持解析 IDL 文件并生成相应的 Rust 结构体、枚举、常量等。
  3. ## 项目概述
  4. RustDDS-Gen 提供了一个完整的 IDL 到 Rust 代码的转换流程,主要包括:
  5. - IDL 文件解析(基于 pest 解析器)
  6. - 语法树(AST)构建和处理
  7. - Rust 代码生成
  8. - 命令行界面,支持多种选项
  9. ## 功能特性
  10. - 支持解析复杂的 IDL 文件,包括:
  11. - 模块(module)和嵌套模块
  12. - 结构体(struct)
  13. - 枚举(enum)
  14. - 常量(const)
  15. - 类型定义(typedef)
  16. - 接口(interface)
  17. - 联合类型(union)
  18. - 序列(sequence)
  19. - 支持各种 IDL 数据类型,如 string、octet、long、double 等
  20. - 支持参数方向(in、out、inout)
  21. - 提供详细的解析和代码生成日志
  22. - 支持调试选项,如打印语法树、保存语法树到文件等
  23. ## 项目结构
  24. ```
  25. RustDDS-Gen/
  26. ├── Cargo.toml # 项目配置和依赖
  27. ├── src/ # 源代码目录
  28. │ ├── main.rs # 主程序入口
  29. │ ├── parser/ # IDL 解析器
  30. │ │ ├── mod.rs # 解析器主模块
  31. │ │ ├── idl.pest # Pest 语法规则
  32. │ │ ├── interface.rs # 接口解析
  33. │ │ └── union.rs # 联合类型解析
  34. │ └── codegen/ # 代码生成器
  35. │ ├── mod.rs # 代码生成主模块
  36. │ ├── interface.rs # 接口代码生成
  37. │ ├── typedef.rs # 类型定义代码生成
  38. │ └── union.rs # 联合类型代码生成
  39. ├── test.idl # 测试用 IDL 文件
  40. └── test_output.rs # 测试生成的 Rust 代码
  41. ```
  42. ## 依赖项
  43. - pest (2.8): 用于解析 IDL 文件
  44. - pest_derive (2.8): 用于派生 pest 解析器
  45. - clap (4.4): 用于命令行参数解析
  46. - serde (1.0): 用于序列化和反序列化
  47. - serde_json (1.0): 用于 JSON 处理
  48. - anyhow (1.0): 用于错误处理
  49. - thiserror (2.0.12): 用于自定义错误类型
  50. - regex (1.11.1): 用于正则表达式处理
  51. ## 使用方法
  52. ### 基本用法
  53. ```bash
  54. rustdds-gen --input <IDL文件路径> --output <Rust文件输出路径>
  55. ```
  56. ### 命令行选项
  57. - `-i, --input <文件路径>`: 指定输入的 IDL 文件
  58. - `-o, --output <文件路径>`: 指定输出的 Rust 文件
  59. - `-d, --debug`: 启用调试输出
  60. - `--parse-only`: 只解析语法,不生成代码
  61. - `--verbose`: 打印详细的解析过程
  62. - `--print-ast`: 打印语法树
  63. - `--dump-ast <文件路径>`: 将解析结果保存到文件
  64. ### 示例
  65. ```bash
  66. # 基本用法
  67. rustdds-gen --input test.idl --output test_output.rs
  68. # 调试模式
  69. rustdds-gen --input test.idl --output test_output.rs --debug
  70. # 只解析不生成代码
  71. rustdds-gen --input test.idl --output test_output.rs --parse-only
  72. # 保存语法树到文件
  73. rustdds-gen --input test.idl --output test_output.rs --dump-ast ast.json
  74. ```
  75. ## IDL 支持特性
  76. RustDDS-Gen 支持以下 IDL 特性:
  77. - 基本数据类型:boolean, char, octet, short, long, float, double, string 等
  78. - 自定义类型:struct, enum, typedef, union
  79. - 模块和嵌套模块
  80. - 常量定义
  81. - 接口和方法
  82. - 参数方向(in, out, inout)
  83. - 序列(sequence)
  84. - 有限长度字符串(string<N>)
  85. ## 开发指南
  86. ### 构建项目
  87. ```bash
  88. cargo build
  89. ```
  90. ### 运行测试
  91. ```bash
  92. cargo test
  93. ```
  94. ### 添加新的 IDL 特性支持
  95. 1. 在 `src/parser/idl.pest` 中添加新的语法规则
  96. 2. 在 `src/parser/mod.rs` 中添加相应的解析函数
  97. 3. 在 `src/codegen/mod.rs` 中添加相应的代码生成函数
  98. ## 许可证
  99. [待定]
  100. ## 贡献指南
  101. 欢迎提交问题报告和拉取请求。对于重大更改,请先开启一个问题进行讨论。
  102. ## 未来计划
  103. - 支持更多 IDL 特性
  104. - 改进错误处理和报告
  105. - 添加更多单元测试和集成测试
  106. - 支持生成序列化/反序列化代码
  107. - 支持生成 DDS 相关代码