这个语法怎么了?

时间:2011-11-22 06:44:51

标签: antlr

我正在尝试编写一个语法来解析格式

的输入
--
sfasfa af adfa
sfsdfsadfa
--

这就是我想出来的,但它说的是mismatchedTokenException。

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    :   '--';

我想要获取密码。

1 个答案:

答案 0 :(得分:0)

有一些问题:

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

尝试:

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--';