我第一次尝试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无法解析为变量"
这是一种错误的做法吗?是否有可能通过解析规则触发更改模式?
答案 0 :(得分:1)
您不能在带有import语句的语法中使用模式。 github上存在相关问题:Problems with lexical modes inside an imported grammar和No error/incorrect code generation when importing lexer grammar with modes into a combined grammar。
因此,您应该通过以下方式修复主语法并删除import语句:
parser grammar Grammar;
options { tokenVocab=TestLexerGrammar; }