2013-04-18 47 views
1

我想知道是否已經有很好的算法來檢測函數聲明,函數內容,它的開括號和關閉之一。 爲了開發,調試和測試錯誤,在某些需要在大多數函數中添加大量代碼的情況下,這可能會很不錯。在源代碼中檢測和匹配函數的開放和結束括號

實施例的源代碼:

Test.onLoad=function(event){ 
    Test.initialize(); 
}; 

結果:

  • 函數名:Test.onLoad
  • 內容:Test.initialize();
  • 在行發現開括號:1
  • 3處找到閉合大括號。

我們可以舉例來說,上面的信息,很容易在所有功能的開始添加一行,並在他們的結束,要記錄一些參數:

Test.onLoad=function(event){ 
    Log("LogInit","function:Test.onLoad","openbraceline:1","content: Test.initialize();"); 
    Test.initialize(); 
    Log("LogEnd ","function:Test.onLoad","endbraceline :5","content: Test.initialize();"); 
}; 

我知道這個功能也可以用一個簡單的全局日誌和一個調用堆棧來創建,但仍然有很多示例可能非常有用。


製作一個簡單的算法來檢測和匹配括號,並獲得功能的信息可能是容易的,但也有很多例外情況也可能是非常複雜的,而這就是爲什麼林詢問是否已經有很好的已知方法檢測它。
我不介意示例算法或提示是否使用任何語言,只是想看看最好的方法。

記事本++是一個很好的例子,因爲它有一個插件,它檢測許多不同的源代碼語言,並用每個部分的顏色分析代碼並匹配大括號。

回答

2

使用真正的解析器是唯一能解決所有情況的解決方案。

這似乎是關於Javascript,所以我的建議是使用Rhino,這是非常容易使用,但最終,當然,該工具將是一個Java工具。

如果解決方案需要在Javascript中也一樣,那麼你可以看看this question about parsers in javascript

+0

謝謝兩位,塞巴斯蒂安和雅各布·帕克你的答案,是非常有用的。不知道犀牛,JSLint和UglifyJS,很高興知道:) – xtrm

1

如果你想要它完美,你將需要一個真正的語言分析器。如果不是的話,你可以設計一個簡化的CFG併爲此編寫一個解析器(許多語法熒光筆我見過這樣的工作)。

相關問題