安裝和設定

如何在 Eclipse 中安裝 ANTLR

(最後在 Indigo 和 ANTLR IDE 2.1.2 上測試過)

  1. 安裝 Eclipse。
  2. 下載包含 ANTLR v2 的 ANTLR 完整二進位制 jar。 提取到臨時目錄。將 antlr-nn 資料夾複製到適當的永久位置,例如安裝 Eclipse 的同一資料夾。
  3. 將 ANTLR IDE 更新站點新增到 Eclipse。
    • 在 Eclipse 中,單擊幫助並選擇安裝新軟體
    • 單擊新增…按鈕。
    • 在 Add Repository 視窗中,為 Location 型別 http://antlrv3ide.sourceforge.net/updates 輸入類似於 ANTLR IDE 的名稱,然後單擊 OK 返回 Available Software 視窗。
    • 選中 ANTLR IDE vn.nn 的核取方塊,然後單擊直到它安裝完畢。Eclipse 可能會重啟。
  4. 配置 ANTLR IDE。
    • 在 Eclipse 主視窗中,單擊 Window,然後單擊 Preferences。
    • 在左側窗格中,展開 ANTLR 並選擇 Builder。
    • 在右側窗格中,單擊“新增…”按鈕。
    • 在 Add ANTLR Package 視窗中,單擊 Directory …並導航到 antlr-nn 資料夾的位置,然後單擊 OK。
    • 單擊確定關閉“新增 ANTLR 包”視窗。
    • 在左窗格中選擇 Code Generator,然後單擊右窗格中的 Project relative 資料夾。輸入資料夾名稱。示例:antlr-java 或 antlr 生成的。
    • 選擇任何其他配置引數,但不要在構建視窗的常規下檢查 -nfa 或 -dfa。如果選中,則會導致 ANTLR 錯誤,從而阻止在輸出資料夾中生成 java 檔案。
    • 單擊確定關閉首選項視窗。
  5. 建立一個新的 Java 專案並啟用 ANTLR 支援。
    • 在 Eclipse 主視窗中,轉到 File,New,Java Project。單擊 Next,鍵入專案名稱,然後單擊 Finish。
    • 要為專案啟用 ANTLR 支援,請在 Package Explorer 視窗(左窗格)中右鍵單擊剛剛建立的專案,然後選擇 Configure,Convert to ANTLR project。
    • 將 ANTLR 完整 jar 檔案新增到專案中:右鍵單擊專案並選擇 Properties,Java Build Path,單擊 Add External JARs …,瀏覽到 ANTLR jar 檔案,選擇它,然後單擊 OK。單擊確定關閉專案屬性視窗。
  6. 建立一個 ANTLR 語法。
    • 建立一個新的 ANTLR 語法:右鍵單擊專案的 src 資料夾,然後單擊 File,New,Other,展開 ANTLR 並選擇 Combined Grammar。單擊下一步,鍵入語法名稱,選擇語言選項,然後單擊完成
    • 將使用所選選項和空白規則建立“.g”檔案。在頂部新增選項 language = Java,@ header,@ ierer::header 和 @members 語句(參見示例)。自動完成是新增這些內容的最簡單方法(按 CTRL 空格以顯示自動完成列表)。
  7. 儲存語法。
    • 儲存後,包含生成的語法 Java 程式碼的資料夾應出現在 Project Explorer 中。如果沒有,請確保未在構建視窗中常規下的“ANTLR 首選項”中選中 -nfa 或 -dfa 選項(步驟 4g)。 [確認是否需要這些:檢查 CLASSPATH 環境變數指向與 Eclipse 安裝(32 位或 64 位)匹配的 Java7,Windows Path 環境變數是否具有 Java7 SDK。
    • 要避免無法解析為型別Java 錯誤,請右鍵單擊包含生成的 Java 程式碼的資料夾,然後單擊構建路徑用作原始檔夾

樣本組合語法

grammar test; //must match filename.g

options {
    language = Java;
}

@header { //parser
    package pkgName; //optional
    import java.<whatever you need>.*;
}

@members { //parser
    // java code here
}

@lexer::header { //lexer
    package pkgName; //optional
    import java.<whatever you need>.*;
}

@lexer::members {
    // java code here
}
/*------------------------------------------------------------------
 * PARSER RULES (convention is all lowercase)
 *------------------------------------------------------------------*/
parserule: LEXRULE;

/*------------------------------------------------------------------
 * LEXER RULES (convention is all uppercase)
 *------------------------------------------------------------------*/
LEXRULE: 'a'..'z';