ANTLR4解析器检测

时间:2015-12-12 12:03:06

标签: parsing antlr4

这是我第一次尝试使用ANTLR4语法。它应该识别一个非常简单的陈述,从命令'标签'开头,然后是冒号,然后是任意文本,以分号结束。但解析器无法识别'标签'作为描述。为什么呢?

grammar test;



 prog: stat+;

  stat:  
    description content
  ;

  description: 
     'label' COLON   
  ;

  content: 
    TEXT 
  ;

  TEXT: 
     .*? ';'
  ;

  STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote

  COMMENT
    : '//' (~('\n'|'\r'))*
  ; 

  COLON      : ':' ;
  ID: [a-zA-z]+;
  INT: [0-9]+;
  NEWLINE: '\r'? '\n';
  WS  :   [ \t\n\r]+ -> skip ;

代码示例:

label: 
this is an error;


wronglabel:YYY
this should be a error;

错误是:

第1行:0输入不匹配'标签:\ n这是一个错误;'期待'标签' (prog标签:\ n这是一个错误; \ n \ n \ n错误标签:YYY \ n这应该是一个错误; \ n \ n)

1 个答案:

答案 0 :(得分:1)

这样做效果更好:

grammar test;

 prog: stat+;

  stat:  
    description content
  ;

  description: 
     'label' COLON   
  ;

  content: 
    text 
  ;

  text: 
     .*? ';'
  ;

  STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote

  COMMENT
    : '//' (~('\n'|'\r'))*
  ; 

  COLON      : ':' ;
  ID: [a-zA-z]+;
  NEWLINE: '\r'? '\n';
  WS  :   [ \t\n\r]+ -> skip ;

似乎我混合了词法分析器和解析器规则: 词法规则必须是小写的, 解析器规则大写。 所以我将TEXT规则改为文本规则。