Antlr4 ANTLR lexer模式匹配任何文本-无关输入

Antlr4 ANTLR lexer模式匹配任何文本-无关输入,antlr4,Antlr4,我切换模式以便可以接受语法中的任何文本。这个例子不包括现实生活中的复杂情况。我改编了ANTLR书中的一个例子 Lexer parser grammar StringsParser; @header { package lexertest; } options { tokenVocab=StringsLexer; } test:quotedString+; quotedString:LQUOTE content; content:TEXT+?; lexer grammar Str

我切换模式以便可以接受语法中的任何文本。这个例子不包括现实生活中的复杂情况。我改编了ANTLR书中的一个例子

Lexer

parser grammar StringsParser;

@header {
    package lexertest;
}
options { tokenVocab=StringsLexer; }

test:quotedString+;
quotedString:LQUOTE content;  
content:TEXT+?;
lexer grammar StringsLexer;

LQUOTE : '"' -> mode(STR) ;
WS     : [ \r\t\n]+ -> skip ;

mode STR;

STRING : '"' -> mode(DEFAULT_MODE);
TEXT   : .;
解析器

parser grammar StringsParser;

@header {
    package lexertest;
}
options { tokenVocab=StringsLexer; }

test:quotedString+;
quotedString:LQUOTE content;  
content:TEXT+?;
lexer grammar StringsLexer;

LQUOTE : '"' -> mode(STR) ;
WS     : [ \r\t\n]+ -> skip ;

mode STR;

STRING : '"' -> mode(DEFAULT_MODE);
TEXT   : .;
测试输入

"hi"
"mom"
给我:

line 1:3 extraneous input '"' expecting {<EOF>, LQUOTE, TEXT}
line 2:4 extraneous input '"' expecting {<EOF>, LQUOTE, TEXT}
第1行:3个无关输入“'
第2行:4外部输入'''s'应为{,LQUOTE,TEXT}

如何修复此问题以避免出现上述错误?

STR模式同时发出文本和字符串标记。“quotedString”规则必须是:

quotedString : LQUOTE content STRING ;