用C++对C++语法格式进行分析
前言
最近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++语法格式进行分析相关推荐
- JavaSE——XML与JSON(语法格式、解析内容)
第6节 XML与JSON 一.XML 1.1 XML简介 XML全称为可扩展标记语言(extensible Markup Language) . 特性: xml具有平台无关性,是一门独立的标记语言: ...
- Linux语法格式是什么,linux命令语法格式
一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...
- HTML的标签分为哪几类?各标签语法格式是怎样的?
HTML的标签分为哪几类?各标签语法格式是怎样的?相信大家在学习HTML课程的时候,有讲到这方面的知识,根据标签的组成特点,通常将HTML标签分为两大类,分别是"双标签".&quo ...
- linux ATT汇编 与 Intel汇编 语法格式对比
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...
- shell 语法格式
shell 语法格式 if语句 if 条件 then 命令序列 fi if 条件 then 命令序列 else 命令序列 fi if 条件 then 命令序列 elif 条件 then 命令序列 el ...
- Lambda表达式的语法格式
Lambda表达式的语法格式: 参数列表 => 语句或语句块 "Lambda表达式"是委托的实现方法,所以必须遵循以下规则: 1)"Lambda表达式"的 ...
- WML元素及其语法格式一览表
WML元素及其语法格式一览表 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- MySQL创建视图的语法格式
视图,具有简化查询语句.安全性和保证逻辑数据独立性等作用 创建视图的语法格式 视图中,包含SELECT查询的结果,因此,视图的创建基于SELECT语句,和已经存在的数据表,视图可以建立在一张表上,也可 ...
- Java的语法格式是什么?有哪些需要注意?
编写Java程序代码必须先声明一个类,然后在类中编写实现需求的业务代码.类需要使用class关键字定义,在class前面可以有一些修饰符,其语法格式如下: [修饰符] class 类名 { 程序代码 ...
最新文章
- Python的sorted函数应用
- Mac下安装Flink的local模式(flink-1.5.2)
- Android 之WebView实现下拉刷新和其他相关刷新功能
- 小白python自学—报错问题汇总(持续更新)
- java游戏运行_用jar包运行带GUI的java游戏
- [附源码]Java计算机毕业设计SSM公立医院绩效考核系统
- 100位量子计算机算力,最快!我国量子计算机实现算力全球领先
- 天牛须和贪心算法_利用天牛须搜索算法(BAS)优化PID控制器参数的代码
- python制作字符画(非gif转字符图)
- 网站服务器迁移域名怎么配置文件,记录网站服务器搬家如何迁移 Let’s Encrypt 证书 | 老左笔记...
- 「JVM 故障诊断」故障分析与处理案例
- unity3d-unet小demo
- 美团赴抖音之“约”:让本地生活补贴大战来得更猛烈些?
- origin导出图片时出现input graph is invalid
- 搜索之BM25和BM25F模型
- 支付宝SDK下载地址
- 最受欢迎的健身软件推荐合集
- 一套智能家居控制系统多少钱,智能家居系统是怎么配置的?
- Unity3D插件之EasyTouch5入门
- K-D Tree 算法详解及Python实现
热门文章
- 局域网上传文件到服务器很慢,win10局域网内传文件很慢怎么办_win10局域网内文件传输很慢如何处理-win7之家...
- 家装灯线走线图_电工装修走线图_电工装饰走线图
- 思科网络设备及配置详解,网工入门必备指南!
- 大学不挂科c语言题库及答案,C语言期末总复习,保你不挂科!
- 湖北经济学院法商学院计算机分数线,湖北经济学院法商学院
- 窄行打印纸打印机规格_电脑打印纸的尺寸和打印机纸张规格的设置
- 里写注释 postman_没用过这些IDEA插件?怪不得写代码头疼
- 怎么开启队友无伤_王者荣耀:玩刘禅的6个误区,这样连招可以无伤推塔!
- blob显示在word编辑器中_你最头疼pdf转word,这里有最全面的转换方法,让工作更轻松...
- 学习速率 learning rate