使用Antlr创建语法定义时出现问题

时间:2018-10-31 12:09:33

标签: 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                : ~[])]+ ;

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

TEXT                : ~[])]+ ;

您不能使用字符类中未转义的]-甚至在一开始也不能使用。您需要在其前面加上反斜杠:~[\])]+