12

GitHub - JetBrains/gradle-grammar-kit-plugin: Gradle plugin for generating lexer...

 2 years ago
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

Groovybuild.gradle

plugins {
    id "org.jetbrains.grammarkit" version "..."
}

Kotlin DSLbuild.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.

Groovybuild.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 DSLbuild.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

Groovybuild.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 DSLbuild.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

Groovybuild.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 DSLbuild.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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK