2013-04-24 57 views
-1

我正在爲崇高的文本編輯器(使用Python)編寫一個插件,它只會摺疊文件加載時的函數/方法。爲了做到這一點,我必須解析文件內容,檢測功能塊並獲取每個塊的起始和結束位置(這是API進行摺疊所需的)。正則表達式是我想到的第一件事,但我很快就知道它不適用於嵌套函數,特別是對於c風格的語法。解析代碼來檢測功能塊

我現在正在這樣做的方式是逐行查找'{'和'}',並檢查函數定義是否位於同一行或上方'{'。如果找不到函數定義,我認爲它是一個控制結構。這是遠遠不夠完美的,因爲註釋中不匹配的大括號符號會導致此邏輯失敗。這可能是完全這樣做的錯誤方式,因爲我不知道任何其他選項。有任何想法嗎?

+0

它們也將在條件和命名塊中失敗。 – 2013-04-24 02:41:53

回答

1

檢查pyparsing或PLY,或者用「遞歸下降解析器」做自己的事情。

嵌套圓括號(和大括號 - 同樣的東西)可能是堆棧模式匹配器無法做到任意深度的最常見的例子。但是上面提到的3種技術都應該能夠做得很好。