Antlr 这语法怎么了

Antlr 这语法怎么了,antlr,Antlr,我试图写一个语法来解析输入的格式 -- sfasfa af adfa sfsdfsadfa -- 这就是我想到的,但上面说的是不匹配的TokenException grammar abc; key : MARK password MARK; password: char+ ; char: CHAR; WS: (' '|'\r'|'\t'|'\u000C'|'\n') {channel=99;}; CHAR: ('a'..'z'|'A'..'Z'|'0'..'9'|'/

我试图写一个语法来解析输入的格式

--
sfasfa af adfa
sfsdfsadfa
--
这就是我想到的,但上面说的是不匹配的TokenException

grammar abc;

key :   MARK password MARK;

password:   char+ ;

char:   CHAR;

WS: (' '|'\r'|'\t'|'\u000C'|'\n') {channel=99;};

CHAR:   ('a'..'z'|'A'..'Z'|'0'..'9'|'/'|'+'|'='|'_'|'-'|':')*;

MARK    :   '--';

我想获取密码。

有两件事出错:

  • lexer规则应始终至少匹配1个字符(您的
    char
    规则可以匹配空字符串)
  • 单词
    频道
    前面应加
    $
  • 最好不要使用幻数(不是
    99
    ,而是
    HIDDEN
尝试:


谢谢,这解决了所有的问题。你能告诉我lexer和parser规则有什么区别吗?@Buxme,看看前面的问答:
grammar abc;

key      : HEADER password END;
password : char+ ;
char     : CHAR;
WS       : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;};
CHAR     : ('a'..'z'|'A'..'Z'|'0'..'9'|'/'|'+'|'='|'_'|'-'|':');
HEADER   : '--BEGIN--';
END      : '--END--';