Compiler construction 使用antlr4时,不会识别Lexer标记

Compiler construction 使用antlr4时,不会识别Lexer标记,compiler-construction,token,antlr4,Compiler Construction,Token,Antlr4,我正在尝试使用ANTLR4创建一个简单的解析器,但我在识别lexer标记时遇到了一个问题。问题是,即使在单词SAYS之后有一个“:”,解析器规则也无法识别它。此外,对于提及的内容,@michael也未被识别 输入文本为:约翰说:你好@michael这不起作用 //Lexer规则 grammar ChatLexer; /* * Lexer Rules */ fragment A : ('A'|'a') ; fragment S : ('S'|'s') ;

我正在尝试使用ANTLR4创建一个简单的解析器,但我在识别lexer标记时遇到了一个问题。问题是,即使在单词SAYS之后有一个“:”,解析器规则也无法识别它。此外,对于提及的内容,@michael也未被识别

输入文本为:约翰说:你好@michael这不起作用

//Lexer规则

grammar ChatLexer;

/*
 * Lexer Rules
 */
fragment A          : ('A'|'a') ;
fragment S          : ('S'|'s') ;
fragment Y          : ('Y'|'y') ;
fragment H          : ('H'|'h') ;
fragment O          : ('O'|'o') ;
fragment U          : ('U'|'u') ;
fragment T          : ('T'|'t') ;
fragment LOWERCASE  : [a-z] ;
fragment UPPERCASE  : [A-Z] ;
SAYS                : S A Y S ;
SHOUTS              : S H O U T S;
WORD                : (LOWERCASE | UPPERCASE | '_')+ ;
WHITESPACE          : (' ' | '\t') ;
NEWLINE             : ('\r'? '\n' | '\r')+ ;
TEXT                : ('['|'(') ~[\])]+ (']'|')') ;

fragment COLON          : ':';
fragment DASH           : '-';
fragment LEFTBRACKET    : '(';
fragment RIGHTBRACKET   : ')';
fragment LEFTSQRBRACKET : '[';
fragment RIGHTSQRBRACKET: ']';
fragment AT             : '@';
fragment SLASH          : '/';
//解析器规则

parser grammar ChatParser;

/*
 * Parser Rules
 */
chat                : line+ EOF ;
line                : name command message NEWLINE;
message             : (emoticon | link | color | mention | WORD | WHITESPACE)+ ;
name                : WORD WHITESPACE;
command             : (SAYS | SHOUTS) COLON WHITESPACE ;

emoticon            : COLON DASH? RIGHTBRACKET
                    | COLON DASH? LEFTBRACKET
                    ;
link                : TEXT TEXT ;
color               : SLASH WORD SLASH message SLASH;
mention             : AT WORD ;


我不明白为什么“:”和“@”不被识别一个
片段
只能由其他词法规则使用,而不能在解析器规则中使用。从
冒号
AT
规则中删除
片段
关键字

一些背景信息w.r.t.词法分析器和解析器:


您能给我指出正确的方向来区分lexer规则和parser规则吗。