Token NextToken()
{
while (ch == ' ' ||
ch >= 9 && ch <= 10 || ch == 13
) NextCh();
if (ch == '/' && Comment0() ||ch == '/' && Comment1()) return NextToken();
int recKind = noSym;
int recEnd = pos;
t = new Token();
t.pos = pos; t.col = col; t.line = line; t.charPos = charPos;
int state;
if (start.ContainsKey(ch)) { state = (int) start[ch]; }
else { state = 0; }
tlen = 0; AddCh();
switch (state) {
case -1: { t.kind = eofSym; break; } // NextCh already done
case 0: {
if (recKind != noSym) {
tlen = recEnd - t.pos;
SetScannerBehindT();
}
t.kind = recKind; break;
} // NextCh already done
case 1:
recEnd = pos; recKind = 1;
if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {AddCh(); goto case 1;}
else {t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t;}
case 2:
recEnd = pos; recKind = 2;
if (ch >= '0' && ch <= '9') {AddCh(); goto case 2;}
else {t.kind = 2; break;}
case 3:
recEnd = pos; recKind = 3;
if (ch >= '0' && ch <= '1') {AddCh(); goto case 3;}
else {t.kind = 3; break;}
case 4:
recEnd = pos; recKind = 4;
if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F') {AddCh(); goto case 4;}
else {t.kind = 4; break;}
case 5:
{t.kind = 5; break;}
case 6:
{t.kind = 6; break;}
case 7:
{t.kind = 7; break;}
case 8:
{t.kind = 8; break;}
case 9:
{t.kind = 9; break;}
case 10:
{t.kind = 10; break;}
case 11:
{t.kind = 11; break;}
case 12:
{t.kind = 14; break;}
case 13:
{t.kind = 15; break;}
case 14:
{t.kind = 16; break;}
case 15:
{t.kind = 17; break;}
case 16:
{t.kind = 18; break;}
case 17:
{t.kind = 24; break;}
case 18:
{t.kind = 25; break;}
case 19:
{t.kind = 27; break;}
case 20:
{t.kind = 31; break;}
case 21:
{t.kind = 32; break;}
case 22:
{t.kind = 36; break;}
case 23:
{t.kind = 37; break;}
case 24:
if (ch == 'b') {AddCh(); goto case 3;}
else if (ch == 'x') {AddCh(); goto case 4;}
else if (ch == 'i') {AddCh(); goto case 5;}
else {goto case 0;}
case 25:
recEnd = pos; recKind = 26;
if (ch == '=') {AddCh(); goto case 10;}
else {t.kind = 26; break;}
case 26:
recEnd = pos; recKind = 19;
if (ch == '=') {AddCh(); goto case 11;}
else {t.kind = 19; break;}
case 27:
recEnd = pos; recKind = 12;
if (ch == '=') {AddCh(); goto case 13;}
else {t.kind = 12; break;}
case 28:
recEnd = pos; recKind = 13;
if (ch == '=') {AddCh(); goto case 12;}
else {t.kind = 13; break;}
}
t.val = new String(tval, 0, tlen);
return t;
}