使用 antlr 创建语法定义的问题

Issue creating grammar definition with antlr

我目前正在学习 Frederico Tomasetti Antlr 教程,但是在尝试生成我的 antlr 语法定义时出现以下错误。

Chat.g4:52:26: syntax error: ']' came as a complete surprise to me

Chat.g4:52:25 syntax error: mismatched input ')' expecting SEMI while matching a lexer rule

谁能看出我哪里出错了?

我的 g4 文件:

 1  grammar Chat;
 2  
 3  /*
 4   * Parser Rules
 5   */
 6   
 7  chat                : line+ EOF ;
 8   
 9  line                : name command message NEWLINE;
10   
11  message             : (emoticon | link | color | mention | WORD | WHITESPACE)+ ;
12   
13  name                : WORD WHITESPACE;
14   
15  command             : (SAYS | SHOUTS) ':' WHITESPACE ;
16                                          
17  emoticon            : ':' '-'? ')'
18                      | ':' '-'? '('
19                      ;
20   
21  link                : '[' TEXT ']' '(' TEXT ')' ;
22   
23  color               : '/' WORD '/' message '/';
24   
25  mention             : '@' WORD ;
26  
27  /*
28   * Lexer Rules
29   */
30   
31  fragment A          : ('A'|'a') ;
32  fragment S          : ('S'|'s') ;
33  fragment Y          : ('Y'|'y') ;
34  fragment H          : ('H'|'h') ;
35  fragment O          : ('O'|'o') ;
36  fragment U          : ('U'|'u') ;
37  fragment T          : ('T'|'t') ;
38   
39  fragment LOWERCASE  : [a-z] ;
40  fragment UPPERCASE  : [A-Z] ;
41   
42  SAYS                : S A Y S ;
43   
44  SHOUTS              : S H O U T S;
45   
46  WORD                : (LOWERCASE | UPPERCASE | '_')+ ;
47   
48  WHITESPACE          : (' ' | '\t') ;
49   
50  NEWLINE             : ('\r'? '\n' | '\r')+ ;
51   
52  TEXT                : ~[])]+ ;

如有任何帮助,我们将不胜感激。

TEXT                : ~[])]+ ;

您不能在字符 class 中使用未转义的 ] - 即使在开头也不行。您需要在它前面加一个反斜杠:~[\])]+.