public int Match(ICharStream input, int mode)
{
match_calls++;
this.mode = mode;
int mark = input.Mark();
try
{
this.startIndex = input.Index;
this.prevAccept.Reset();
DFA dfa = decisionToDFA[mode];
if (dfa.s0 == null)
{
return MatchATN(input);
}
else
{
return ExecATN(input, dfa.s0);
}
}
finally
{
input.Release(mark);
}
}