6.4 KiB
Gradle Grammar-Kit Plugin
Gradle Grammar-Kit Plugin automates generating custom language lexers and parsers when using Grammar-Kit.
Current Release: %gradle-grammar-kit-plugin-version%
GitHub: Releases & Changelog, Issue Tracker
The Gradle Grammar-Kit Plugin automates generating lexers and parsers to support building custom language plugins for IntelliJ-based IDEs when using Grammar-Kit.
The plugin does not support two-pass generation. Therefore, it does not support method mixins.
{style="note" title="Known Limitations"}
Please see CONTRIBUTING on how to submit feedback and contribute to this project.
Before visiting the Issue Tracker, update both plugin and Gradle to the latest versions.
Usage
To enable this plugin in your Gradle-based project, register the plugin in the Gradle build script's plugins
section:
plugins {
id("org.jetbrains.grammarkit") version "%gradle-grammar-kit-plugin-version%"
}
plugins {
id "org.jetbrains.grammarkit" version "%gradle-grammar-kit-plugin-version%"
}
This project requires Gradle 7.4 or newer, however, it is recommended to use the latest Gradle available. See Gradle Installation guide.
{title="Minimum Gradle Version"}
Configuration
Grammar-Kit Extension
After the Gradle Grammar-Kit Plugin is applied, the grammarKit
extension can be used to configure the plugin and common settings of the provided tasks.
In most cases, explicit configuration can be omitted.
{style="tip"}
Example:
grammarKit {
jflexRelease.set("1.7.0-1")
grammarKitRelease.set("2021.1.2")
}
grammarKit {
jflexRelease = "1.7.0-1"
grammarKitRelease = "2021.1.2"
}
grammarKitRelease
{#grammar-kit-extension-grammarkitrelease}
The release version of the Grammar-Kit to use.
- {type="narrow"}
- Type
String
- Default value
2022.3.2
jflexRelease
{#grammar-kit-extension-jflexrelease}
The version of the IntelliJ-patched JFlex, a fork of JFlex lexer generator for IntelliJ Platform API.
- {type="narrow"}
- Type
String
- Default value
1.9.2
intellijRelease
{#grammar-kit-extension-intellijrelease}
An optional IntelliJ IDEA version to build the classpath for GenerateParser
and GenerateLexer
tasks.
If provided, grammarKitRelease
and jflexRelease
properties are ignored as both dependencies will be provided from the given IntelliJ IDEA release.
- {type="narrow"}
- Type
String
- Default value
null
Tasks
generateLexer
{#generatelexer-task}
The generateLexer
task generates a lexer for the given grammar.
The following sections describe task configuration options. See also for common configuration.
sourceFile
{#tasks-generatelexer-source}
The source .*flex file to generate the lexer from.
- {type="narrow"}
- Required
- yes
- Type
String
targetOutputDir
{#tasks-generatelexer-targetOutputDir}
The path to the target directory for the generated lexer.
- {type="narrow"}
- Required
- yes
- Type
String
skeleton
{#tasks-generatelexer-skeleton}
An optional path to the skeleton file to use for the generated lexer.
The path will be provided as --skel
option.
By default, it uses the idea-flex.skeleton skeleton file.
- {type="narrow"}
- Type
String
- Default
null
purgeOldFiles
{#tasks-generatelexer-purgeoldfiles}
Purge old files from the target directory before generating the lexer.
- {type="narrow"}
- Type
Boolean
- Default
false
generateParser
{#generateparser-task}
The generateParser
task generates a parser for the given grammar.
The following sections describe task configuration options. See also for common configuration.
sourceFile
{#tasks-generateparser-source}
The source .bnf file to generate the parser from.
- {type="narrow"}
- Required
- yes
- Type
String
targetRootOutputDir
{#tasks-generateparser-targetrootOutputDir}
The path to the target directory for the generated parser.
- {type="narrow"}
- Type
String
- Default
null
pathToParser
{#tasks-generateparser-pathtoparser}
The location of the generated parser class, relative to the targetRootOutputDir
.
- {type="narrow"}
- Required
- yes
- Type
String
pathToPsiRoot
{#tasks-generateparser-pathtopsiroot}
The location of the generated PSI files, relative to the targetRootOutputDir
.
- {type="narrow"}
- Required
- yes
- Type
String
purgeOldFiles
{#tasks-generateparser-purgeoldfiles}
Purge old files from the target directory before generating the parser.
- {type="narrow"}
- Type
Boolean
- Default
false