public CsvParser(CsvTextReader reader) { this._reader = reader; this._token = this._tokenizer.Tokenize(this._reader); }
public CsvToken Tokenize(CsvTextReader reader) { int n; char ch; _stringBuilder.Length = 0; // // Trim whitespace // while ((n = reader.Peek()) != -1) { ch = (char)n; switch (ch) { case ' ': case '\t': { reader.Read(); break; } default: { goto s0; } } } s0: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\"': { reader.Read(); _stringBuilder.Append(ch); goto s1; } case ',': { reader.Read(); _stringBuilder.Append(ch); goto s4; } case '\r': { reader.Read(); _stringBuilder.Append(ch); goto s5; } case '\n': { reader.Read(); _stringBuilder.Append(ch); goto s6; } case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 'T': case 't': { reader.Read(); _stringBuilder.Append(ch); goto s8; } case 'F': case 'f': { reader.Read(); _stringBuilder.Append(ch); goto s12; } case '0': { reader.Read(); _stringBuilder.Append(ch); goto s15; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { reader.Read(); _stringBuilder.Append(ch); goto s17; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s1: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType._ERROR_)); } } ch = (char)n; switch (ch) { case '\t': case '\n': case '\r': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s1; } case '\"': { reader.Read(); _stringBuilder.Append(ch); goto s2; } case '\\': { reader.Read(); _stringBuilder.Append(ch); goto s3; } default: { _stringBuilder.Append(ch); goto se; } } s2: return(new CsvToken(CsvTokenType.QUOTED_STRING, _stringBuilder.ToString())); s3: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType._ERROR_)); } } ch = (char)n; switch (ch) { case '\t': case '\n': case '\r': case ' ': case '!': case '\"': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s1; } default: { _stringBuilder.Append(ch); goto se; } } s4: return(new CsvToken(CsvTokenType.COMMA, _stringBuilder.ToString())); s5: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType._ERROR_)); } } ch = (char)n; switch (ch) { case '\n': { reader.Read(); _stringBuilder.Append(ch); goto s6; } default: { _stringBuilder.Append(ch); goto se; } } s6: return(new CsvToken(CsvTokenType.NEWLINE, _stringBuilder.ToString())); s7: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s8: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 'r': { reader.Read(); _stringBuilder.Append(ch); goto s9; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s9: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 'u': { reader.Read(); _stringBuilder.Append(ch); goto s10; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s10: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 'e': { reader.Read(); _stringBuilder.Append(ch); goto s11; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s11: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.BOOLEAN, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } default: { return(new CsvToken(CsvTokenType.BOOLEAN, _stringBuilder.ToString())); } } s12: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 'a': { reader.Read(); _stringBuilder.Append(ch); goto s13; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s13: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 'l': { reader.Read(); _stringBuilder.Append(ch); goto s14; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s14: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case 's': { reader.Read(); _stringBuilder.Append(ch); goto s10; } default: { return(new CsvToken(CsvTokenType.STRING, _stringBuilder.ToString())); } } s15: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.INTEGER, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case '.': { reader.Read(); _stringBuilder.Append(ch); goto s16; } default: { return(new CsvToken(CsvTokenType.INTEGER, _stringBuilder.ToString())); } } s16: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.FLOAT, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { reader.Read(); _stringBuilder.Append(ch); goto s16; } default: { return(new CsvToken(CsvTokenType.FLOAT, _stringBuilder.ToString())); } } s17: n = reader.Peek(); if (n == -1) { if (_stringBuilder.Length == 0) { return(new CsvToken(CsvTokenType._EOF_)); } else { return(new CsvToken(CsvTokenType.INTEGER, _stringBuilder.ToString())); } } ch = (char)n; switch (ch) { case '\t': case ' ': case '!': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case '-': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': { reader.Read(); _stringBuilder.Append(ch); goto s7; } case '.': { reader.Read(); _stringBuilder.Append(ch); goto s16; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { reader.Read(); _stringBuilder.Append(ch); goto s17; } default: { return(new CsvToken(CsvTokenType.INTEGER, _stringBuilder.ToString())); } } se: return(new CsvToken(CsvTokenType._ERROR_, _stringBuilder.ToString())); }