为Lexers添加模式时出现Antlr错误

时间:2016-04-01 14:49:08

标签: parsing antlr grammar antlr4 lexer

我第一次尝试Lexing Modes。 我有一个lexer语法,其模式是我导入到我的" main"语法。 在为Grammar的词法分析器

生成java类时出现此错误

'规则DESCRIPTION_FIELD包含带有无法识别的常量值的词法分析器命令;词法分析者可能会产生错误的输出'

我跟着这个article 我的Lexer语法如下:

lexer grammar TestLexerGrammar;

DESCRIPTION_FIELD
:
    'DESCRIPTION:'-> pushMode(FREETEXTMODE)
;


mode FREETEXTMODE;

FREE_TEXT_FIELD_FORMAT
:
    STR+
;

fragment
STR
:
    (
        LETTER
        | DIGIT
    )
;

我的主要语法:

grammar Grammar;
import TestLexerGrammar;


descriptionElement
:
    DESCRIPTION_FIELD freeTextFields
;

freeTextFields
:
    FREE_TEXT_FIELD_FORMAT+
;

所以在生成的GrammarLexer.java中我收到一个错误:" FREETEXTMODE无法解析为变量"

这是一种错误的做法吗?是否有可能通过解析规则触发更改模式?

1 个答案:

答案 0 :(得分:1)

您不能在带有import语句的语法中使用模式。 github上存在相关问题:Problems with lexical modes inside an imported grammarNo error/incorrect code generation when importing lexer grammar with modes into a combined grammar

因此,您应该通过以下方式修复主语法并删除import语句:

parser grammar Grammar;
options { tokenVocab=TestLexerGrammar; }