使用Python正则表达式从C++源代码中提取命名空间

1 投票
6 回答
865 浏览
提问于 2025-04-15 12:15

我想从C++文件中提取定义的命名空间。
简单来说,如果我的C++文件里包含:

namespace n1 {
  ...
  namespace n2 { ... } // end namespace n2 
  ...
  namespace n3 { ...} //end namespace n3 
  ...
} //end namespace n1

我想能够获取到:n1, n1::n2, n1::n3。

有没有人能给我一些建议,怎么用python的正则表达式来做到这一点?

谢谢。

6 个回答

1

你可以为它写一个简单的词法分析器。其实这并不难。

2

这个需求其实很简单,你可能不需要一个复杂的解析器。你需要做的就是:

  • 提取命名空间的名称
  • 计算打开和关闭的大括号,以便跟踪你的命名空间是在哪里定义的。

如果满足其他条件,这种简单的方法是有效的:

  • 你不会在注释或字符串中遇到类似命名空间的内容
  • 你不会在注释或字符串中遇到不匹配的打开或关闭大括号

我觉得这对你的源代码来说并不算过分的要求。

6

用正则表达式查找命名空间的名字其实挺简单的。不过,要确定它们的嵌套层级,你需要在源文件中跟踪大括号的嵌套层级。这是一个解析的问题,单靠正则表达式是很难(合理地)解决的。此外,你还可能需要处理文件中的一些C语言预处理指令,这些指令肯定会影响解析的结果。

C++是一种解析起来非常棘手的语言,但你可以尝试使用一个标记器和一个大括号计数器来应对。

撰写回答