我正在尝试解析日志文件条目。
LogGram.g4
grammar LogGram;
logs: log* ;
log : dateformat Identifier '[' className ']' '(' thread ')'
;
thread : Letter+ SPECIAL* LetterOrDigit+
;
className : Identifier ('.' Identifier)* ;
dateformat : DATE TMSTAMP ;
Identifier : Letter LetterOrDigit* ;
Letter : [a-zA-Z$_] ;
LetterOrDigit : [a-zA-Z0-9$_];
SPECIAL : [-@#,;:'"/] ;
DATE : DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT ;
TMSTAMP : DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ',' DIGIT DIGIT DIGIT
;
DIGIT : [0-9] ;
WS : [ trnu000C]+ -> skip;
服务器.log
2017-08-10 12:50:56,081 ERROR [io.undertow.request] (default task-32)
解析和打印时的控制台输出
line 1:53 mismatched input 'default' expecting Letter
2017-08-10 12:50:56,081 ERROR [io.undertow.request] (defaulttask-32)
为什么在打印输出之前出现不匹配行?
我不是antlr专家。只是一个想法
SPECIAL : [-@#,;:'"/] ;
使用-
用于定义范围的字符 你能尝试另一种方式吗
HYPHEN : '-';
SPECIAL : [@#,;:'"/] | HYPHEN ;