ANTLR4在导入时没有找到语法

时间:2017-09-03 16:36:07

标签: java parsing gradle antlr antlr4

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

这两种语法都是通过单独编译正确但当我将导入添加到我的主语法时,我得到下一个编译错误

  

错误(110):kanekotic / specflow / rider / SpecflowFeature.g4:3:7:无法找到或加载语法SpecflowScenario

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 个答案:

答案 0 :(得分:2)

Antlr插件默认使用src/main/antlr作为 lib 目录。由于要包含的语法文件位于kanekotic/specflow/rider中,请使用gradle文件中的以下代码来包含此位置:

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

另见this gradle thread