如何导入(或使用 tokenVocab)不同 directory/package 中的语法文件?

How to import (or use tokenVocab) for a grammar file in a different directory/package?

我在这样的目录中有两个语法文件:

 +- antlr4
     +- common
     |   +- Numbers.g4
     +- lang
         +- Lang.g4

Lang.g4里面,我尝试做:

  grammar Lang;

  options {
      tokenVocab = common.Numbers;
  }

但是我得到一个错误:

 cannot find tokens file <PROJECT_LOCATION>/target/generated-sources/antlr4/common.Numbers.tokens

我是否仅限于将所有语法和词法分析器文件放在同一目录中?

你不限。

您应该在 Lang.g4 语法目录中有一个 Numbers.token 文件。之后你可以通过以下方式使用tokenVocab

options {
      tokenVocab = Numbers;
}

要将生成的文件放置到自定义位置,您可以使用 -o 命令行参数。看这里:ANTLR Tool Command Line Options.