为词法分析器添加模式时出现 Antlr 错误
Antlr Error when adding a Mode for Lexers
我是第一次尝试 Lexing 模式。
我有一个词法分析器语法,其中有一种模式正在导入到我的 "main" 语法中。
为语法分析器
生成 java 类 时出现此错误
'rule DESCRIPTION_FIELD contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output'
我关注了这个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 无法解析为变量”
这是错误的做法吗?是否有可能通过解析规则触发更改模式?
您不能在带有 import 语句的语法中使用模式。 github 上有相关问题:Problems with lexical modes inside an imported grammar and No error/incorrect code generation when importing lexer grammar with modes into a combined grammar。
因此,您应该通过以下方式修复您的主要语法并删除 import 语句:
parser grammar Grammar;
options { tokenVocab=TestLexerGrammar; }
我是第一次尝试 Lexing 模式。 我有一个词法分析器语法,其中有一种模式正在导入到我的 "main" 语法中。 为语法分析器
生成 java 类 时出现此错误'rule DESCRIPTION_FIELD contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output'
我关注了这个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 无法解析为变量”
这是错误的做法吗?是否有可能通过解析规则触发更改模式?
您不能在带有 import 语句的语法中使用模式。 github 上有相关问题:Problems with lexical modes inside an imported grammar and No error/incorrect code generation when importing lexer grammar with modes into a combined grammar。
因此,您应该通过以下方式修复您的主要语法并删除 import 语句:
parser grammar Grammar;
options { tokenVocab=TestLexerGrammar; }