我想匹配表单的输入::
commit a1b2c3
Author: Michael <michael@test.com>
commit d3g4
Author: David <david@test.com>
这是我写的语法:
grammar commit;
file : commitinfo+;
commitinfo : commitdesc authordesc;
commitdesc : 'commit' COMMITHASH NEWLINE;
authordesc : 'Author:' AUTHORNAME '<' EMAIL '>' NEWLINE;
COMMITHASH : [a-z0-9]+;
AUTHORNAME : [a-zA-Z]+;
EMAIL : [a-zA-Z0-9.@]+;
NEWLINE : '\r'?'\n';
WHITESPACE : [ \t]->skip;
上述解析器的问题在于,对于上述输入,它完全匹配。但是当输入变为:
commit c1d2
Author: michael <michael@test.com>
它会引发如下错误:
第 2:8 行不匹配的输入“michael”需要 AUTHORNAME。
当我打印标记时,字符串“michael”似乎与标记 COMMITHASH 而不是 AUTHORNAME 匹配。
如何解决上述情况?