我正在寻求创建一个从C ++文件中提取代码块的系统。例如,如果我想提取每个while循环,我将寻找一个以FlatList
开头并以while
结尾的模式。该特定示例的问题在于,虽然循环可能包含其他作用域块,所以我需要:
}
-regex可以轻松做到这一点while
之后的开放括号,并以其匹配括号结束我可以使用解析器和许多代码来完成此操作,但是我想知道是否存在任何可能将正则表达式扩展到这种文档级查询的东西?
答案 0 :(得分:2)
有解析器库和工具,甚至是免费的开放源代码。例如,lang有一个。 GCC也是如此。还有其他
这是很多代码,因为C ++很难解析。但是,如果有人用代码编写了代码并且它起作用了,那将是一个问题。使用这些产品通常遇到的困难是找到好的文档,但是您可以随时尝试在此处提出具体问题
但是,仅对C ++进行词法分析就没有那么困难了,如果您不关心在极端情况下它会失败,那么对程序结构的粗略分析就足够了。如果从预处理代码开始(或怀疑预处理不会改变程序结构),并且不必担心标识模板括号(特别是区分右移运算符和两个连续的右尖括号),则可以应该能够构建具有相当短的扫描仪生成器规范的词法分析器。
如果您不担心程序结构在极端情况下会失败,那么这可能足以对程序结构进行粗略的分析。