GitHub - JetBrains/gradle-grammar-kit-plugin: Gradle plugin for generating lexer...
source link: https://github.com/JetBrains/gradle-grammar-kit-plugin
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
gradle-grammarkit-plugin
Important: This project requires Gradle 6.6 or newer, however it is recommended to use the latest Gradle available. Update it with:
./gradlew wrapper --gradle-version=VERSION
This Gradle plugin automates generating lexers and parsers to support custom language development in IntelliJ plugins when using Grammar-Kit.
NB: The plugin does not support two-pass generation. Therefore, it does not support method mixins.
Usage
Loading and applying the plugin
Groovy – build.gradle
plugins { id "org.jetbrains.grammarkit" version "..." }
Kotlin DSL – build.gradle.kts
plugins { id("org.jetbrains.grammarkit") version "..." }
Note: The latest version is:
Configuration
Global configuration allows you to select necessary JFlex and Grammar-Kit versions.
Groovy – build.gradle
grammarKit { // Version of IntelliJ patched JFlex (see the link below), Default is 1.7.0-1 jflexRelease = "1.7.0-1" // Release version, tag, or short commit hash of Grammar-Kit to use (see link below). By default, the latest available is used. grammarKitRelease = "2021.1.1" // Optionally provide an IntelliJ version to build the classpath for GenerateParser/GenerateLexer tasks intellijRelease = "203.7717.81" }
Kotlin DSL – build.gradle.kts
grammarKit { // Version of IntelliJ patched JFlex (see the link below), Default is 1.7.0-1 jflexRelease.set("1.7.0-1") // Release version, tag, or short commit hash of Grammar-Kit to use (see link below). Default is 2021.1.2 grammarKitRelease.set("2021.1.2") // Optionally provide an IntelliJ version to build the classpath for GenerateParser/GenerateLexer tasks intellijRelease.set("203.7717.81") }
Tasks
Generating lexer
Groovy – build.gradle
generateLexer { // source flex file source = "grammar/Perl.flex" // target directory for lexer targetDir = "gen/com/perl5/lang/perl/lexer/" // target classname, target file will be targetDir/targetClass.java targetClass = "PerlLexer" // optional, path to the task-specific skeleton file. Default: none skeleton = "/some/specific/skeleton" // if set, plugin will remove a lexer output file before generating new one. Default: false purgeOldFiles = true }
Kotlin DSL – build.gradle.kts
generateLexer { // source flex file source.set("grammar/Perl.flex") // target directory for lexer targetDir.set("gen/com/perl5/lang/perl/lexer/") // target classname, target file will be targetDir/targetClass.java targetClass.set("PerlLexer") // optional, path to the task-specific skeleton file. Default: none skeleton.set("/some/specific/skeleton") // if set, plugin will remove a lexer output file before generating new one. Default: false purgeOldFiles.set(true) }
Generating parser
Groovy – build.gradle
generateParser { // source bnf file source = "grammar/Perl5.bnf" // optional, task-specific root for the generated files. Default: none targetRoot = "gen" // path to a parser file, relative to the targetRoot pathToParser = "/com/perl5/lang/perl/parser/PerlParserGenerated.java" // path to a directory with generated psi files, relative to the targetRoot pathToPsiRoot = "/com/perl5/lang/perl/psi" // if set, the plugin will remove a parser output file and psi output directory before generating new ones. Default: false purgeOldFiles = true }
Kotlin DSL – build.gradle.kts
generateParser { // source bnf file source.set("grammar/Perl5.bnf") // optional, task-specific root for the generated files. Default: none targetRoot.set("gen") // path to a parser file, relative to the targetRoot pathToParser.set("/com/perl5/lang/perl/parser/PerlParserGenerated.java") // path to a directory with generated psi files, relative to the targetRoot pathToPsiRoot.set("/com/perl5/lang/perl/psi") // if set, the plugin will remove a parser output file and psi output directory before generating new ones. Default: false purgeOldFiles.set(true) }
Links
Usage examples
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK