Compiler construction 使用antlr4时,不会识别Lexer标记
我正在尝试使用ANTLR4创建一个简单的解析器,但我在识别lexer标记时遇到了一个问题。问题是,即使在单词SAYS之后有一个“:”,解析器规则也无法识别它。此外,对于提及的内容,@michael也未被识别 输入文本为:约翰说:你好@michael这不起作用 //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') ;
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.词法分析器和解析器: