3

フォームの入力を一致させたい::

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 AUTHORNAME を期待する入力 'michael' が一致しません。

トークンを出力すると、AUTHORNAME ではなく COMMITHASH というトークンに文字列 'michael' が一致するようです。

上記のケースを修正するにはどうすればよいですか?

4

1 に答える 1