前言

最近C++项目需要用到脚本,这就关系到如何绑定对象到脚本运行环境。因使用到多套脚本语言,所以现有的绑定技术,都不能满足需求。所以只能寻求解析C++的头文件,再根据描述进行绑定。起初发现boost有一套,但boost实在太臃肿了,对项目之后开发环境的搭建有一定要求。我力求最简明的项目管理,boost不太适合。自己写套吧。

正文

C++的语法格式总结

  • 除编译器指令#开头与函数外,均必须要求分号结尾
  • 代码块除单条语句的if、do/while、for都必须在大括号/花括号“{}” 代码块有8种,命名空间,全局,类,结构,全局函数,成员函数,lambda,函数内无名代码块
    • 命名空间与全局相同,仅在声明前加“命名空间::”前缀
    • 类声明块与全局块的区别有,友元声明,成员访问权限
  • 模板支持类与函数
  • 函数与模板有参数列表
  • 分号结尾的声明可以是内置类型(int、double等)、类、模板类、typedef出来的类型、函数指针、lambda
  • 函数可以重名
  • 类的成员函数访问其他成员可以在此函数定义之后声明,并不像全局函数那样必须已经声明,所以用指针扫描一次C++文件是否合法是做不到的
  • 若是类化的枚举(enum class),不需要对声明所在范围可见,否则同时要把成员也同时添加到所属范围

我不打算支持的,对于需求没有必要性的

  • 命名空间
  • 模板
  • 函数体
  • 逗号分割的多个变量我不想很好的支持
  • 类型的校验
  • 默认参数
  • union
  • 枚举不判断名称冲突
  • lambda
  • 变量名不能以数字开始
  • 类的继承
  • 函数指针

开发的原则

  • 暂不跨平台,仅VS,不使用系统API这样适于修改为跨平台
  • 使用C++
  • iter只进不退
  • 遇到语法错误或文件结尾,抛异常
  • 遇到{则进入块处理
  • 处理;结尾的语言单元,函数必须自己处理完;及之前的内容再返回
  • 成员函数定义代码不分析,因为第一条原则做不到,成员函数可能会引用还未声明的其他成员函数
  • 不为最好的性能,但可以在这个结构上优化到极致
  • 不求完整解析,但在这个框架上可以做到解析全部c++11与更高的版本特性
  • 无注释,英文不好,中文注释又不适合全球化

结构描述

variant,method,type,comment,enumeration,enumeration_value从object继承,它们都可以属于全局或类或结构体。

document表示一个c++编译单元。

context表示一个上下文,是一个可以向上查找的队列。document完成解析后存储解析出来的变量、函数、类型。

reader,文件读取器,一个向前的char迭代器,可以用istreambuf_iterator<char>(ifstream)替代。

使用

main函数有_DEBUG宏保护,建议编译为库release使用。

#include <cpp_analysis.h>

try

{
 auto result = cpp_analysis::analysis("[cpp_header_file]");

 // todo

}
catch (logic_error& e)
{

// todo:
}

项目位置

https://github.com/FettLuo/cpp_analysis[新标签打开]

转载于:https://www.cnblogs.com/fyter/p/analysis-cpp-syntex-format.html

用C++对C++语法格式进行分析相关推荐

  1. JavaSE——XML与JSON(语法格式、解析内容)

    第6节 XML与JSON 一.XML 1.1 XML简介 XML全称为可扩展标记语言(extensible Markup Language) . 特性: xml具有平台无关性,是一门独立的标记语言: ...

  2. Linux语法格式是什么,linux命令语法格式

    一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...

  3. HTML的标签分为哪几类?各标签语法格式是怎样的?

    HTML的标签分为哪几类?各标签语法格式是怎样的?相信大家在学习HTML课程的时候,有讲到这方面的知识,根据标签的组成特点,通常将HTML标签分为两大类,分别是"双标签".&quo ...

  4. linux ATT汇编 与 Intel汇编 语法格式对比

    由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...

  5. shell 语法格式

    shell 语法格式 if语句 if 条件 then 命令序列 fi if 条件 then 命令序列 else 命令序列 fi if 条件 then 命令序列 elif 条件 then 命令序列 el ...

  6. Lambda表达式的语法格式

    Lambda表达式的语法格式: 参数列表 => 语句或语句块 "Lambda表达式"是委托的实现方法,所以必须遵循以下规则: 1)"Lambda表达式"的 ...

  7. WML元素及其语法格式一览表

    WML元素及其语法格式一览表 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  8. MySQL创建视图的语法格式

    视图,具有简化查询语句.安全性和保证逻辑数据独立性等作用 创建视图的语法格式 视图中,包含SELECT查询的结果,因此,视图的创建基于SELECT语句,和已经存在的数据表,视图可以建立在一张表上,也可 ...

  9. Java的语法格式是什么?有哪些需要注意?

    编写Java程序代码必须先声明一个类,然后在类中编写实现需求的业务代码.类需要使用class关键字定义,在class前面可以有一些修饰符,其语法格式如下: [修饰符] class 类名 { 程序代码 ...

最新文章

  1. Python的sorted函数应用
  2. Mac下安装Flink的local模式(flink-1.5.2)
  3. Android 之WebView实现下拉刷新和其他相关刷新功能
  4. 小白python自学—报错问题汇总(持续更新)
  5. java游戏运行_用jar包运行带GUI的java游戏
  6. [附源码]Java计算机毕业设计SSM公立医院绩效考核系统
  7. 100位量子计算机算力,最快!我国量子计算机实现算力全球领先
  8. 天牛须和贪心算法_利用天牛须搜索算法(BAS)优化PID控制器参数的代码
  9. python制作字符画(非gif转字符图)
  10. 网站服务器迁移域名怎么配置文件,记录网站服务器搬家如何迁移 Let’s Encrypt 证书 | 老左笔记...
  11. 「JVM 故障诊断」故障分析与处理案例
  12. unity3d-unet小demo
  13. 美团赴抖音之“约”:让本地生活补贴大战来得更猛烈些?
  14. origin导出图片时出现input graph is invalid
  15. 搜索之BM25和BM25F模型
  16. 支付宝SDK下载地址
  17. 最受欢迎的健身软件推荐合集
  18. 一套智能家居控制系统多少钱,智能家居系统是怎么配置的?
  19. Unity3D插件之EasyTouch5入门
  20. K-D Tree 算法详解及Python实现

热门文章

  1. 局域网上传文件到服务器很慢,win10局域网内传文件很慢怎么办_win10局域网内文件传输很慢如何处理-win7之家...
  2. 家装灯线走线图_电工装修走线图_电工装饰走线图
  3. 思科网络设备及配置详解,网工入门必备指南!
  4. 大学不挂科c语言题库及答案,C语言期末总复习,保你不挂科!
  5. 湖北经济学院法商学院计算机分数线,湖北经济学院法商学院
  6. 窄行打印纸打印机规格_电脑打印纸的尺寸和打印机纸张规格的设置
  7. 里写注释 postman_没用过这些IDEA插件?怪不得写代码头疼
  8. 怎么开启队友无伤_王者荣耀:玩刘禅的6个误区,这样连招可以无伤推塔!
  9. blob显示在word编辑器中_你最头疼pdf转word,这里有最全面的转换方法,让工作更轻松...
  10. 学习速率 learning rate