【问题标题】:ANTLR lexer mode match any text - extraneous inputANTLR 词法分析器模式匹配任何文本 - 无关输入
【发布时间】:2015-09-08 10:06:42
【问题描述】:

我切换模式以便接受语法中的任何文本。这个例子不包括现实生活情况的复杂性。我改编了 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}

如何解决此问题,以免出现上述错误?

【问题讨论】:

    标签: antlr4


    【解决方案1】:

    STR 模式同时发出 TEXT 和 STRING 令牌。 'quotedString' 规则必须是:

    quotedString : LQUOTE content STRING ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多