2017-01-10 97 views

回答

2

是否有重構shell腳本工具切換?我對此表示懷疑。

但是,您可以使用通用的program transformation system (PTS)構建一個。

這些接受語言描述的工具(你需要POSIX shell腳本的語法),將解析所述語言構建AST,然後允許將轉換應用於這些AST,最後將AST重新打印回有效源代碼文本。

好的PTS讓你使用源代碼模式(Cocinelle不是一個多用途的PTS,因爲它只適用於C,但它屬於這種類型的源模式驅動)而不是編寫過程代碼來修改樹木。

他們大多數人的問題是他們沒有超越(上下文無關)AST上的匹配,而真正的約束要求工具瞭解「上下文」(例如,來自遠方的信息如何影響文中特定點的含義)。 Cocinelle也這樣做,這就是爲什麼它是一個有趣的工具;這種功能需要來轉換傳統的編程語言。

我們的DMS Software Reengineering Toolkit是一款爲上下文分析(符號表,控制和數據流分析等)提供支持的通用PTS。我認爲(Unix)shell腳本語言,如Posix,都具有各種類似宏的功能,這些功能比Java等無宏語言更難處理。 DMS提供內置的支持來捕獲和處理預處理器條件和宏;它目前使用這些來處理C和C++。

但是,Posix轉換不是開箱即用的。您必須定義它的語法,並且爲DMS提供各種上下文分析支持。此時,您可以開始使用源模式編寫依賴於上下文的轉換。這項工作適用於DMS,但不是週末的練習。所以真正的問題是,

你打算做多少自動修補;證明配置PTS足夠了嗎?