public TestScriptToken(TestScriptTokenType type, string code, int startIndex, int length) { Type = type; Code = code; StartIndex = startIndex; Length = length; }
public TestScriptKeyword(string keyword, TestScriptTokenType tokenType) { Keyword = keyword; TokenType = tokenType; }
public TestScriptToken NextToken() { TestScriptToken token = null; char c = IgnoreWhiteSpaceAndComment(); switch (c) { case ':': token = new TestScriptToken(TestScriptTokenType.Colon, Code, CurrentPos, 1); CurrentPos += 1; break; case '(': token = new TestScriptToken(TestScriptTokenType.LeftParen, Code, CurrentPos, 1); CurrentPos += 1; break; case ')': token = new TestScriptToken(TestScriptTokenType.RightParen, Code, CurrentPos, 1); CurrentPos += 1; break; case ',': token = new TestScriptToken(TestScriptTokenType.Comma, Code, CurrentPos, 1); CurrentPos += 1; break; case ';': token = new TestScriptToken(TestScriptTokenType.Semicolon, Code, CurrentPos, 1); CurrentPos += 1; break; case '\0': token = new TestScriptToken(TestScriptTokenType.EndOfFile, Code, CurrentPos, 0); break; case '"': { char startChar = Peek(); int len = 0; int start = CurrentPos; while (true) { len += 1; CurrentPos += 1; if (Peek() == '\\') { len += 1; CurrentPos += 1; } else if (Peek() == startChar) { len += 1; CurrentPos += 1; break; } else if (Peek() == '\0') { throw new Exception("字符串未结束"); } } token = new TestScriptToken(TestScriptTokenType.String, Code, start, len); } break; default: if (char.IsDigit(c)) { int len = 0; int start = CurrentPos; do { len += 1; CurrentPos += 1; }while (char.IsDigit(Peek())); token = new TestScriptToken(TestScriptTokenType.Integer, Code, start, len); } else if (char.IsLetter(c)) { int len = 0; int start = CurrentPos; do { len += 1; CurrentPos += 1; c = Peek(); }while (char.IsLetterOrDigit(c) || c == '_'); TestScriptTokenType type = m_KeywordTable.Match(Code, start, len); token = new TestScriptToken(type, Code, start, len); } break; } if (token == null) { token = new TestScriptToken(TestScriptTokenType.Unknow, Code, CurrentPos, 0); } return(token); }