Score
0
Watch 1 Star 0 Fork 1

newzai / BNFParserScalaApache-2.0

Join us
Explore and code with more than 2 million developers,Free private repositories !:)
Sign up
解析简单的C++头文件,主要解析enum和class 通过解析后的中间内容自动生成proto文件。 简化网络通信开发过程。。 spread retract

Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
ReadMe.txt
使用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,来做编解码,相对于业务对象和消息对象之间的桥梁吧,减少耦合。

Comments ( 0 )

Sign in for post a comment

Scala
1
https://gitee.com/newzai/BNFParser.git
git@gitee.com:newzai/BNFParser.git
newzai
BNFParser
BNFParser
master

Help Search