2013-04-24 60 views
-1

我正在为崇高的文本编辑器(使用Python)编写一个插件,它只会折叠文件加载时的函数/方法。为了做到这一点,我必须解析文件内容,检测功能块并获取每个块的起始和结束位置(这是API进行折叠所需的)。正则表达式是我想到的第一件事,但我很快就知道它不适用于嵌套函数,特别是对于c风格的语法。解析代码来检测功能块

我现在正在这样做的方式是逐行查找'{'和'}',并检查函数定义是否位于同一行或上方'{'。如果找不到函数定义,我认为它是一个控制结构。这是远远不够完美的,因为注释中不匹配的大括号符号会导致此逻辑失败。这可能是完全这样做的错误方式,因为我不知道任何其他选项。有任何想法吗?

+0

它们也将在条件和命名块中失败。 – 2013-04-24 02:41:53

回答

1

检查pyparsing或PLY,或者用“递归下降解析器”做自己的事情。

嵌套圆括号(和大括号 - 同样的东西)可能是堆栈模式匹配器无法做到任意深度的最常见的例子。但是上面提到的3种技术都应该能够做得很好。