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 == '_' || 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:
{t.kind = 3; break;}
case 4:
{t.kind = 4; break;}
case 5:
if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '&' || ch >= '(' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
else if (ch == 92) {AddCh(); goto case 7;}
else {goto case 0;}
case 6:
if (ch == 39) {AddCh(); goto case 9;}
else {goto case 0;}
case 7:
if (ch >= ' ' && ch <= '~') {AddCh(); goto case 8;}
else {goto case 0;}
case 8:
if (ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'f') {AddCh(); goto case 8;}
else if (ch == 39) {AddCh(); goto case 9;}
else {goto case 0;}
case 9:
{t.kind = 5; break;}
case 10:
recEnd = pos; recKind = 42;
if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z') {AddCh(); goto case 10;}
else {t.kind = 42; break;}
case 11:
recEnd = pos; recKind = 43;
if (ch >= '-' && ch <= '.' || ch >= '0' && ch <= ':' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z') {AddCh(); goto case 11;}
else {t.kind = 43; break;}
case 12:
if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 12;}
else if (ch == 10 || ch == 13) {AddCh(); goto case 4;}
else if (ch == '"') {AddCh(); goto case 3;}
else if (ch == 92) {AddCh(); goto case 14;}
else {goto case 0;}
case 13:
recEnd = pos; recKind = 42;
if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
else if (ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z') {AddCh(); goto case 15;}
else {t.kind = 42; break;}
case 14:
if (ch >= ' ' && ch <= '~') {AddCh(); goto case 12;}
else {goto case 0;}
case 15:
recEnd = pos; recKind = 42;
if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
else if (ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z') {AddCh(); goto case 15;}
else if (ch == '=') {AddCh(); goto case 11;}
else {t.kind = 42; break;}
case 16:
{t.kind = 17; break;}
case 17:
{t.kind = 20; break;}
case 18:
{t.kind = 21; break;}
case 19:
{t.kind = 22; break;}
case 20:
{t.kind = 25; break;}
case 21:
{t.kind = 26; break;}
case 22:
{t.kind = 27; break;}
case 23:
{t.kind = 28; break;}
case 24:
{t.kind = 31; break;}
case 25:
{t.kind = 32; break;}
case 26:
{t.kind = 33; break;}
case 27:
{t.kind = 34; break;}
case 28:
{t.kind = 35; break;}
case 29:
{t.kind = 39; break;}
case 30:
{t.kind = 40; break;}
case 31:
recEnd = pos; recKind = 18;
if (ch == '.') {AddCh(); goto case 19;}
else if (ch == '>') {AddCh(); goto case 22;}
else if (ch == ')') {AddCh(); goto case 30;}
else {t.kind = 18; break;}
case 32:
recEnd = pos; recKind = 24;
if (ch == '.') {AddCh(); goto case 21;}
else {t.kind = 24; break;}
case 33:
recEnd = pos; recKind = 30;
if (ch == '.') {AddCh(); goto case 29;}
else {t.kind = 30; break;}
}
t.val = new String(tval, 0, tlen);
return t;
}