2012-03-14 64 views
1

我正在爲PHP,JavaScript和CSS編寫一些自下而上的解析器。最好,我想寫一個解析器,能夠解析所有的語言。我聽說JavaScript可以用LALR(1)解析器解析(如果我錯了,糾正我)。 LALR(1)解析器是否足以支持PHP和CSS,還是需要寫一些不同的東西?PHP/JavaScript/CSS所需的解析器精度?

+0

你應該爲這個問題添加一些額外的標籤,因爲它不是特定於php/javascript,除非你打算用這些語言編寫解析器。 – Jay 2012-03-14 01:39:31

回答

2

我懷疑你可以實現一個解析器來解析所有這三種語言。我認爲你需要3個解析器。他們可能會共享解析引擎,如果這就是你的意思。

通過接受「太多」(因爲解析機器不夠強大,無法區分)並添加捕獲結構的後解析處理(通常是AST),您幾乎可以使任何解析技術解析任何語言檢查/處理/消除接受的多餘部分。

爭論就是你有多少多餘的收集,以及消除多餘的接受是多麼痛苦。

所以,LALR(1)會這樣做。也有存在的證據; PHP解釋器是使用Bison(LALR(1))實現的;您可以通過下載PHP tarball並在其中進行挖掘來發現這一點。

我不認爲CSS是一個強硬的語法。不過,我認爲它有很多。

由於缺少分號問題,JavaScript會給你一個糟糕的時間,因爲它定義爲「如果解析器沒有它就會給你一個錯誤,並且它不存在,假裝它存在」。所以實質上你必須濫用解析器中的錯誤處理機制來恢復。

您正在尋找很多工作。現在的解析器會不會更容易?或者你想要一套統一的機器嗎?

+0

謝謝。我正計劃在JavaScript中爲Web應用程序編寫解析器。我不知道任何使用JavaScript編寫的解析器,也不知道我所處理的錯誤處理控制的數量。 – Azmisov 2012-03-14 03:40:58

+0

爲什麼Web應用程序需要解析這些語言?您是否試圖將一個IDE構建爲一個Web應用程序? – 2012-03-14 04:05:26

+0

它應該是一個PHP所見即所得的。我一直無法找到一個已經存在的。 – Azmisov 2012-04-06 19:27:21