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



我第一次尝试Lexing Mode。我有一个lexer语法和一个模式,我正在导入到我的"主"语法中。我在为Grammar的lexer 生成java类时遇到了这个错误

'rule DESCRIPTION_FIELD包含一个具有无法识别的常数值的lexer命令;lexer解释器可能产生错误的输出

我关注这篇文章我的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无法解析为变量"

这是错误的做法吗?有没有可能通过解析规则来触发模式的改变?

您不能在带有import语句的语法中使用mode。github上存在相关问题:导入语法中的词法模式问题,以及将带模式的lexer语法导入组合语法时无错误/错误代码生成。

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

parser grammar Grammar;
options { tokenVocab=TestLexerGrammar; }

相关内容

  • 没有找到相关文章

最新更新