我第一次尝试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; }