ANTLR 词法分析器模式匹配任何文本 - 无关输入
ANTLR lexer mode match any text - extraneous input
我切换模式以便我可以接受语法中的任何文本。此示例不包括现实生活情况的复杂性。我改编了 ANTLR 书中的一个例子。
词法分析器
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}
如何解决此问题,以免出现上述错误?
STR 模式发出 TEXT 和 STRING 令牌。 'quotedString' 规则需要是:
quotedString : LQUOTE content STRING ;
我切换模式以便我可以接受语法中的任何文本。此示例不包括现实生活情况的复杂性。我改编了 ANTLR 书中的一个例子。
词法分析器
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}
如何解决此问题,以免出现上述错误?
STR 模式发出 TEXT 和 STRING 令牌。 'quotedString' 规则需要是:
quotedString : LQUOTE content STRING ;