我正在爲PHP,JavaScript和CSS編寫一些自下而上的解析器。最好,我想寫一個解析器,能夠解析所有的語言。我聽說JavaScript可以用LALR(1)解析器解析(如果我錯了,糾正我)。 LALR(1)解析器是否足以支持PHP和CSS,還是需要寫一些不同的東西?PHP/JavaScript/CSS所需的解析器精度?
1
A
回答
2
我懷疑你可以實現一個解析器來解析所有這三種語言。我認爲你需要3個解析器。他們可能會共享解析引擎,如果這就是你的意思。
通過接受「太多」(因爲解析機器不夠強大,無法區分)並添加捕獲結構的後解析處理(通常是AST),您幾乎可以使任何解析技術解析任何語言檢查/處理/消除接受的多餘部分。
爭論就是你有多少多餘的收集,以及消除多餘的接受是多麼痛苦。
所以,LALR(1)會這樣做。也有存在的證據; PHP解釋器是使用Bison(LALR(1))實現的;您可以通過下載PHP tarball並在其中進行挖掘來發現這一點。
我不認爲CSS是一個強硬的語法。不過,我認爲它有很多。
由於缺少分號問題,JavaScript會給你一個糟糕的時間,因爲它定義爲「如果解析器沒有它就會給你一個錯誤,並且它不存在,假裝它存在」。所以實質上你必須濫用解析器中的錯誤處理機制來恢復。
您正在尋找很多工作。現在的解析器會不會更容易?或者你想要一套統一的機器嗎?
相關問題
- 1. CommandLine解析器庫所需的標記所需的集合
- 2. BBP算法所需的工作精度?
- 3. 用boost :: spirit解析雙精度列表
- 4. 將DBNULL值解析爲雙精度值
- 5. Microsoft.Data.Schema.ScriptDom解析器的速度
- 6. 升壓精神焦炭解析器
- 7. 無法解析所需的android.app.fragment Android Studio
- 8. 需要XML解析器
- 9. 角度驗證$解析器
- 10. 機器精度
- 11. INI解析並驗證所需字段
- 12. 使用精神解析類?
- 13. 解析和替換Java中的雙精度字符串
- 14. 從C中的字符串解析多個雙精度#
- 15. 解析Pure Lua中的IEEE754雙精度浮點數?
- 16. 解析字符串中的雙精度值
- 17. 使用Fortran中selected_real_kind以達到所需的最小精度
- 18. 二進制文件打印和所需的精度
- 19. Boost muliprecision cpp_dec_float只比較所需的精度
- 20. 需要Delphi中的SQL解析器
- 21. 瞭解Apfloat及其精度
- 22. 升壓精神需要永遠解析表達式
- 23. 如何檢查字符串是否可解析爲雙精度?
- 24. Java掃描程序如何解析雙精度?
- 25. 解析一個矩陣和雙精度數組la4j對象
- 26. 從一個字符串解析多個雙精度
- 27. Java - 爲什麼Gson將整數解析爲雙精度?
- 28. Java:將字符串解析爲雙精度值
- 29. 手動解析雙精度時避免舍入誤差
- 30. QT解析時間戳與微秒級精度
你應該爲這個問題添加一些額外的標籤,因爲它不是特定於php/javascript,除非你打算用這些語言編寫解析器。 – Jay 2012-03-14 01:39:31