是否有任何生成解析器的解析器生成器能夠執行以下操作:解析文件,並且如果更改第n行,則它只會重新計算因此發生更改的行或行。以便解析器不需要重新分析完整文件。用於更改文件的解析器生成器
映入眼簾,
馬蒂亞斯
是否有任何生成解析器的解析器生成器能夠執行以下操作:解析文件,並且如果更改第n行,則它只會重新計算因此發生更改的行或行。以便解析器不需要重新分析完整文件。用於更改文件的解析器生成器
映入眼簾,
馬蒂亞斯
Tim Wagner在此工作了很長時間。見他的GLR parsing engine paper.它基本上通過保持解析樹,並試圖重新分析「整個流」作爲一系列的分析樹和改變的令牌。它非常聰明。
Scott McPeak聲稱Elsa實現了增量GLR解析器。 AFAIK,Elsa主要用於批量解析。
我不能給出一個明確的是或否,但我對此表示懷疑。解析器生成器旨在爲任意語法創建解析器。僅通過重新檢查單個行來更新分析樹就會對語法或允許的更改施加強約束,因爲它只能影響分析樹的高度本地化部分。所以我強烈懷疑有人在通用解析器生成器中集成了這樣的功能。
對我來說,聽起來像(在完全不同的級別)更改頭文件中某些類或結構的存儲大小,而不想重新編譯所有依賴於它的目標文件......當然可以在腳下拍攝自己。 – 2010-02-16 16:15:45
我在Packrat上實現了一個通用的解析引擎,取得了一些成功。由於memoisation - 編輯器僅使與修改後的行重疊的memoised塊無效,然後重新整理整個文件,但只有修改過的行被實際解析,其餘所有其餘部分保留自上一次運行記憶,因此它符合此目的。
沒有現成的可用解決方案,但您可以拿起Packrat的任何實施方案,並在自己的產品上打造自己的產品。
你可以看看Packrat用文本編輯器在這裏如何整合:
如果上線'變化N'影響一些其他線路?我可以問你想解決什麼問題嗎?你想要解析什麼「語言」? – 2010-02-16 16:33:43
任何編程語言,我的猜測是,如果我改變第n行,那麼我只需要重新編譯n之後的所有行,像java或c#語言。 – mgiza 2010-02-16 16:44:35
您正在尋找的詞是增量編譯中的「增量」。不過,我不知道支持它的解析生成器。我會通過在AST中保留行信息來修補它... – dmckee 2010-02-16 17:45:23