这是我第一次尝试使用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)
答案 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规则改为文本规则。