'..'
ANTLR3レクサーからトークンを作成します。これは、次のような式をつなぎ合わせるために使用されます。
a..b // [1]
c .. x // [2]
1..2 // [3]
3 .. 4 // [4]
だから、私は付け加えました、
DOTDOTSEP : '..'
;
問題は、私がすでにルールを持っているということです:
FLOAT : INT (('.' INT (('e'|'E') INT)? 'f'?) | (('e'|'E') INT)? ('f'))
;
そして、上記の例[3]では1..2
、として一致していますFLOAT
(最初の後に続くのは、INTではなく.
別のものであるため理由はわかりませんが、そうです)。.
DOTDOTSEP
レクサールールの優先順位を変更して、最初に一致させてから、次に一致させる方法があるかどうか疑問に思いますFLOAT
。
ここを見ると、私は負けているように見えます"The rule having the greatest count is the winner.",
が、それを回避する方法があるのだろうかと思います。
PSINTは次のように定義されます...
fragment DIGIT
: '0'..'9'
;
INT : DIGIT+
;
編集。
もう少しテストすると、FLOAT
ルールに直接一致するほど単純ではないと思います。(質問を変更するつもりでしたが、今は答えがあるので、変更しません。)問題(私は信じています)はまだレクサールールの優先順位にあるので、質問は同じままです。