1 Star 0 Fork 2

newzai / BNFParser

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ReadMe.txt 1.71 KB
一键复制 编辑 原始数据 按行查看 历史
newzai 提交于 2013-09-26 10:59 . first
使用Scala BNF解析模块,解析C++简单头文件。
主要实现以下功能:
1. 提取enum定义及其值
2. 提取Class的定义(只关注普通数据成员),不包含static数据成员和mutable数据成员。
注意:
不要在头文件中有任何实现的方法,请转移到cpp文件。C++语言的语法太复杂,特别是加入了C++11以后更加复杂,本人比较愚钝
要实现函数的定义,估计写个几年都写不完。。因此只关注声明性质的C++语句。。
支持一下数据类型:
1. 基础数据类型,bool\char\short\int\long 包含无符号。
2. 支持enum、class作为数据成员
3. 支持vector\set\list\map作为数据成员,STL容器包含的数据类型可以为 (1)(2)支持的数据类型.
4. 支持shared_ptr\weak_ptr作为数据成员,并且可以作为容器的数据成员.
5. 不支持原始的指针成员,完全可以使用shared_ptr\weak_ptr替代。
cn.newzai.parser.cplusplus 包,未解析C++类头文件的相关类,
cn.newzai.parser.cplusplus.result 包,包含解析后的结果,类和枚举
cn.newzai.parser.cplusplus.result.generate 包,包含自动代码生成的内容
一:类方法的自动生成,包含自动生成默认构造函数、拷贝构造函数、复制函数、Get和Set方法
二:自动生成proto(protobuf 消息定义文件),并且生成了C++类和protobuf message类之间的转换接口,
特化 toMessage,fromMessage 2个方法。
C++对象与Protobuf message的映射规则: http://blog.csdn.net/love_newzai/article/details/9013183
三:生成C#类,及其与protobuf消息之间的转换方法
四: 生成Scala类,及其与protobuf消息之间的转换方法
五:所有的generate都是trait,可以定制自己要生成的目标语言,进行扩展。。
本工程的目的,是自动化开发,开发网络通信的时候,减少客户端和服务器之间的编码。。。让我们用更多的时间关注与与业务。
为何选择protobuf作为消息格式: 因为效率高,使用起来方便,不需要自己编解码。。
为何还要转换呢,为何不在业务中直接使用protobuf生成的对象呢:不太适合,这样耦合太多。。因此使用toMessage、fromMessage,来做编解码,相对于业务对象和消息对象之间的桥梁吧,减少耦合。
Scala
1
https://gitee.com/newzai/BNFParser.git
git@gitee.com:newzai/BNFParser.git
newzai
BNFParser
BNFParser
master

搜索帮助