代码之家  ›  专栏  ›  技术社区  ›  Kanekotic

ANTLR4在导入时找不到语法

  •  3
  • Kanekotic  · 技术社区  · 7 年前

    我正在尝试将我的ANTLR4语法分割到多个文件中,以便更轻松地测试它们,我正在使用gradle作为java项目中的构建工具。

    这两种语法都通过separate正确编译,但当我将导入添加到主语法时,我会出现下一个编译错误

    inherited 语法看起来像:

    grammar SpecflowScenario;
    
    @header {
        package kanekotic.specflow.rider;
    }
    
    scenario
        : 'Scenario: ';
    

    main 语法看起来像:

    grammar SpecflowFeature;
    
    import SpecflowScenario;
    
    @header {
        package kanekotic.specflow.rider;
    }
    
    file returns [List<String> values]
        @init { $values = new ArrayList<String>(); }
        : 'Feature: ' EOF;
    

    这个 gradle.build 看起来像:

    plugins {
        id "org.jetbrains.intellij" version "0.1.10"
    }
    
    apply plugin: 'org.jetbrains.intellij'
    apply plugin: 'java'
    apply plugin: 'antlr'
    
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    
    intellij {
        version '143.2370.31'
        pluginName 'Specflow Rider'
    }
    
    group 'kanekotic.specflow.rider'
    version '0.1'
    
    repositories {
        mavenCentral()
        jcenter()
    }
    
    dependencies {
        antlr "org.antlr:antlr4:4.5"
        testCompile 'junit:junit:4.12'
        testCompile "org.mockito:mockito-core:2.+"
    } 
    

    所有开源代码都在下一个链接中: https://github.com/kanekotic/Specflow.Rider/tree/antlr4_multiple_grammar

    1 回复  |  直到 7 年前
        1
  •  5
  •   user3151902    7 年前

    Antlr插件使用 src/main/antlr lib公司 默认情况下为目录。因为要包含的语法文件位于 kanekotic/specflow/rider

    generateGrammarSource {
        arguments << "-lib" << "src/main/antlr/kanekotic/specflow/rider"
    }
    

    另请参见 this gradle thread