ANTLR 外掛程式擴充 Java 外掛程式,以新增使用 ANTLR 產生剖析器的支援。

ANTLR 外掛程式支援 ANTLR 版本 2、3 和 4。

使用方式

若要使用 ANTLR 外掛程式,請在您的建置指令碼中包含下列內容

build.gradle.kts
plugins {
    antlr
}
build.gradle
plugins {
    id 'antlr'
}

工作

ANTLR 外掛程式會新增許多工作到您的專案,如下所示。

generateGrammarSourceAntlrTask

產生所有生產 ANTLR 語法的來源檔案。

generateTestGrammarSourceAntlrTask

產生所有測試 ANTLR 語法的來源檔案。

generateSourceSetGrammarSourceAntlrTask

產生給定來源組的所有 ANTLR 語法的來源檔案。

ANTLR 外掛程式會將下列相依性新增到 Java 外掛程式所新增的任務中。

表 1. ANTLR 外掛程式 - 其他任務相依性
任務名稱 相依性

compileJava

generateGrammarSource

compileTestJava

generateTestGrammarSource

compileSourceSetJava

generateSourceSetGrammarSource

專案配置

src/main/antlr

生產 ANTLR 語法檔案。如果 ANTLR 語法以套件組織,則 antlr 資料夾中的結構應反映套件結構。這可確保產生的來源會結束在正確的目標子資料夾中。

src/test/antlr

測試 ANTLR 語法檔案。

src/sourceSet/antlr

給定來源組的 ANTLR 語法檔案。

相依性管理

ANTLR 外掛程式會新增一個 antlr 相依性組態,提供要使用的 ANTLR 實作。下列範例顯示如何使用 ANTLR 版本 3。

build.gradle.kts
repositories {
    mavenCentral()
}

dependencies {
    antlr("org.antlr:antlr:3.5.2")   // use ANTLR version 3
    // antlr("org.antlr:antlr4:4.5") // use ANTLR version 4
}
build.gradle
repositories {
    mavenCentral()
}

dependencies {
    antlr "org.antlr:antlr:3.5.2" // use ANTLR version 3
    // antlr "org.antlr:antlr4:4.5" // use ANTLR version 4
}

如果未宣告相依性,antlr:antlr:2.7.7 會做為預設值。若要使用其他 ANTLR 版本,請將適當的相依性新增到 antlr 相依性組態,如上所示。

貢獻的擴充功能

antlrAntlrSourceDirectorySet

此來源組的 ANTLR 語法檔案。包含在 ANTLR 來源目錄中找到的所有 .g.g4 檔案,並排除所有其他類型的檔案。預設值為非空值。

慣例屬性 (已棄用)

ANTLR 外掛程式會新增一個慣例屬性。

antlrSourceDirectorySet

此來源組的 ANTLR 語法檔案。包含在 ANTLR 來源目錄中找到的所有 .g.g4 檔案,並排除所有其他類型的檔案。預設值為非空值。

此慣例屬性已棄用,並由上文所述的擴充功能取代。

來源組屬性

ANTLR 外掛程式會將下列屬性新增到專案中的每個來源組。

antlr.srcDirsSet<File>

包含此來源組的 ANTLR 語法檔案的來源目錄。可以使用任何 隱含轉換為檔案集合 的內容來設定。預設值為 [projectDir/src/name/antlr]

控制 ANTLR 產生器處理程序

ANTLR 工具會在分岔的處理程序中執行。這允許精細控制 ANTLR 處理程序的記憶體設定。若要設定 ANTLR 處理程序的堆積大小,可以使用 AntlrTaskmaxHeapSize 屬性。若要傳遞其他命令列引數,請附加到 AntlrTaskarguments 屬性。

build.gradle.kts
tasks.generateGrammarSource {
    maxHeapSize = "64m"
    arguments = arguments + listOf("-visitor", "-long-messages")
}
build.gradle
generateGrammarSource {
    maxHeapSize = "64m"
    arguments += ["-visitor", "-long-messages"]
}