文档级正则表达式

时间:2019-06-26 14:30:08

标签: regex parsing

我正在寻求创建一个从C ++文件中提取代码块的系统。例如,如果我想提取每个while循环,我将寻找一个以FlatList开头并以while结尾的模式。该特定示例的问题在于,虽然循环可能包含其他作用域块,所以我需要:

  1. 找到字符串}-regex可以轻松做到这一点
  2. 匹配括号,其开头为while之后的开放括号,并以其匹配括号结束
  3. 还匹配包含单行且没有大括号的while循环
  4. 根据@Cid的建议处理尽可能多的特殊情况,例如在注释中声明的while循环等。

我可以使用解析器和许多代码来完成此操作,但是我想知道是否存在任何可能将正则表达式扩展到这种文档级查询的东西?

1 个答案:

答案 0 :(得分:2)

有解析器库和工具,甚至是免费的开放源代码。例如,lang有一个。 GCC也是如此。还有其他

这是很多代码,因为C ++很难解析。但是,如果有人用代码编写了代码并且它起作用了,那将是一个问题。使用这些产品通常遇到的困难是找到好的文档,但是您可以随时尝试在此处提出具体问题

但是,仅对C ++进行词法分析就没有那么困难了,如果您不关心在极端情况下它会失败,那么对程序结构的粗略分析就足够了。如果从预处理代码开始(或怀疑预处理不会改变程序结构),并且不必担心标识模板括号(特别是区分右移运算符和两个连续的右尖括号),则可以应该能够构建具有相当短的扫描仪生成器规范的词法分析器。

如果您不担心程序结构在极端情况下会失败,那么这可能足以对程序结构进行粗略的分析。