CPP宏定义解析处理【python】

本文介绍了一种使用Python解析C++宏定义文件的方法,包括处理注释、关键字如#define、ifndef等,并通过嵌套列表和字典存储宏定义。详细分析了对不同关键字的处理策略,如遇到#ifndef和#ifdef时插入子列表,遇到#endif时恢复分支,以及遇到#undef时取消宏设定。还探讨了递归搜索嵌套列表的算法,以找到正确的分支。虽然过程充满挑战,但最终实现了较好的效果。
摘要由CSDN通过智能技术生成

问题描述

c++宏定义文件中关键字有#define, #undef #ifndef, #ifdef, #else,#endif, 处理注释,//,/*,*/, 解析文件,输出其中的宏定义

分析思路

文本分析基础是字符串处理,宏定义文件的处理需要对遇到的关键字执行特殊的处理。

文件定义的中间数据结构用嵌套列表,宏定义主要是顺序结构和分支结构,顺序结构好理解,一个宏定义作为一个字典,字典作为列表的元素;对于分支结构,用子列表表示它,这个子列表的结构如下

[

{ {'id': 1},{'parent': 0}, {'pos':0}},    # id给当前子列表编号,parent是子列表的父列表编号,pos是当前处理分支的左右分支,true是左,标记为1;false是右,标记为2.

{'macro_key': ''}, #macro_key是当前分支结构的条件

[], #表示左子列表

[],#表示右子列表

]

这样表示后,再定义当前分支子列表branch(这里利用了python的引用特征),当前列表编号node_id,父列表编号parent_id,左右分支位置pos,辅助对嵌套列表的遍历。

存储宏定义的格式是宏定义字典,键是宏名,值是宏定义值。还有一个辅助数据结构,预定义宏名列表,用于记录预定义的宏名。

下面对遇到的不同关键字作不同的分析:

1. 对注释的处理

注释有三种,//&#x

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值