antlr v4 開發環境
從上一篇文章的例子中可以知道,antlr有一套自己的語法來聲明目標語言的語法,因此它本身就需要編譯或者使用antlr提供的api來讀取這些語法規則,並使之可以在目標平台上使用。比如我在用Java寫一個SQL語言的解析工具,那么antlr就需要有Java平台的API給我使用。確實也是如此,只不過antlr除了提供這些API外,還會將g4這些語法文件編譯成目標平台的類文件(僅對Java而言,其他語言也會編譯成對應的文件)。這些編譯生成的文件不需要使用者去關注,因為它們是給antlr自身使用的。使用者只需要關注antlr提供的API即可。
綜上所述,antlr有一套自己的編譯環境。所以我們在使用antlr之前,需要准備好一些東西。以下是幾種可行的方式:
- 文本編輯器 + Complete ANTLR 4.4 Java binaries.jar
- Eclipse + Complete ANTLR 4.4 Java binaries.jar + eclipse plugin
- IntelliJ IDEA + Complete ANTLR 4.4 Java binaries.jar + intellij idea plugin
個人推薦使用方式3,IntelliJ IDEA確實比Eclipse好用,關鍵是不會卡;其次是插件系統也比eclipse好太多了。
方式1##
在開始之前,需要定制一下編譯工具。
Linux版
#antlr4.sh
#Linux
#!/bin/sh
java -cp "/usr/local/lib/antlr4-complete.jar:$CLASSPATH" org.antlr.v4.Tool $*
Windows版
#antlr4.bat
#Windows
java -cp C:\libraries\antlr-4.0-complete.jar;%CLASSPATH% org.antlr.v4.Tool %*
編譯antlr語法文件(以上篇文章中的示例代碼為例)
antlr4 Hello.g4
javac *.java
這樣就會在當前目錄下生成幾個Java文件。如HelloLexer.java、HelloParser.java等。antlr的編譯參數,可根據情況選用。
ANTLR Parser Generator Version 4.0
-o___ specify output directory where all output is generated
-lib___ specify location of grammars, tokens files
-atn generate rule augmented transition network diagrams
-encoding___ specify grammar file encoding; e.g., euc-jp
-message-format___ specify output style for messages in antlr, gnu, vs2005
-listener generate parse tree listener(default)
-no-listener don't generate parse tree listener
-visitor generate parse tree visitor
-no-visitor don't generate parse tree visitor(default)
-package___ specify a package/namespace for the generated code
-depend generate file dependencies
-D<option>=value set/override a grammar-level option
-Werror treat warnings as errors
-XdbgST launch StringTemplate visualizer on generated code
-Xforce-atn use the ATN simulator for all predictions
-Xlog dump lots of logging info to antlr-timestamp.log
方式二##
eclipse的antlr插件實在不好用,強烈不推薦使用。因此我也不在此說明安裝方法了,一定要使用eclipse的同學,可自行google。
方式三##
- 下載IntelliJ IDEA antlr plugin
- 按以下圖示步驟安裝
步驟一
步驟二
步驟三
步驟四
步驟五
- 重啟完成之后,新建java項目-新建文件,然后將Hello.g4的代碼復制進去。如下圖,即可測試antlr的語法文件。