2009-06-23 73 views

回答

3

我對Irony的工作方式不太瞭解,但是Chris Double有一個庫,可以讓您在JavaScript中定義文法:http://www.bluishcoder.co.nz/2007/10/javascript-parser-combinators.html。代碼是available on GitHub

這是一個「解析器組合器」庫,它意味着將語法中每個生產的解析器組合成一個解析整個事物的更大的解析器。每個「子語法」只是一個通過調用庫函數創建的函數。

+0

謝謝,這似乎是我一直在尋找的東西,我會仔細看看。 – 2009-06-24 05:53:46

0

這不完全是你需要的,但this article通過在javascript中爲javascript本身製作遞歸下降解析器。

+1

這實際上是自頂向下的運算符優先級。我認爲它也出現在本書的一章中,「美麗的代碼」。 – Nosredna 2009-06-24 02:00:37

3

我建立了一個JavaScript解析DSLChevrotain

來源:https://github.com/SAP/chevrotain

在線遊樂場:http://sap.github.io/chevrotain/playground/

這是一個解析器組合像諷刺,但它是非常相似 ,因爲它可以讓你「定義解析使用JavaScript語法的語法「 沒有任何代碼生成階段。

使用它類似於「牽手樓」遞歸體面的分析器, 只是沒有最頭痛如:

  • 先行創建函數(決定採取哪一種選擇)
  • 自動錯誤恢復。
  • 左遞歸檢測
  • 歧義檢測。
  • 位置信息。
  • ...

爲鼷鹿科自動處理。

0

PEG.js可能是一個解決方案。

PEG.js是一個簡單的JavaScript解析器生成器,可生成具有出色錯誤報告的快速解析器。您可以使用它來處理複雜的數據或計算機語言,並輕鬆構建變換器,解釋器,編譯器和其他工具。

特點

簡單和表達語法句法 集成了詞彙和句法分析 分析器具有優良的錯誤報告開箱 基於解析表達式語法形式主義 - 比傳統的LL(k)的功能更強大, LR(k)解析器 可從您的瀏覽器,命令行或通過JavaScript API使用

相關問題