public static void ReadCommentsAndWhitespace( ITSQLTokenizer tokenizer, TSQLElement element) { ReadCommentsAndWhitespace( tokenizer, element.Tokens); }
public static void RecurseParens( ITSQLTokenizer tokenizer, TSQLElement element, ref int nestedLevel) { if (tokenizer.Current.Type == TSQLTokenType.Character) { element.Tokens.Add(tokenizer.Current); TSQLCharacters character = tokenizer.Current.AsCharacter.Character; if (character == TSQLCharacters.OpenParentheses) { nestedLevel++; } else if (character == TSQLCharacters.CloseParentheses) { nestedLevel--; } } else if (tokenizer.Current.IsKeyword(TSQLKeywords.CASE)) { // have to handle CASE special, so that we always match up // 1 and only 1 END TSQLCaseExpression caseExp = new TSQLCaseExpressionParser().Parse(tokenizer); element.Tokens.AddRange(caseExp.Tokens); if (tokenizer.Current != null) { element.Tokens.Add(tokenizer.Current); } } else { element.Tokens.Add(tokenizer.Current); } }
/// <summary> /// This reads recursively through parenthesis and returns when it hits /// one of the stop words outside of any nested parenthesis. /// </summary> public static void ReadUntilStop( ITSQLTokenizer tokenizer, TSQLElement element, List <TSQLFutureKeywords> futureKeywords, List <TSQLKeywords> keywords, bool lookForStatementStarts) { int nestedLevel = 0; while ( tokenizer.MoveNext() && !tokenizer.Current.IsCharacter(TSQLCharacters.Semicolon) && !( nestedLevel == 0 && tokenizer.Current.IsCharacter(TSQLCharacters.CloseParentheses) ) && ( nestedLevel > 0 || ( tokenizer.Current.Type != TSQLTokenType.Keyword && !futureKeywords.Any(fk => tokenizer.Current.IsFutureKeyword(fk)) ) || ( tokenizer.Current.Type == TSQLTokenType.Keyword && !keywords.Any(k => tokenizer.Current.AsKeyword.Keyword == k) && !( lookForStatementStarts && tokenizer.Current.AsKeyword.Keyword.IsStatementStart() ) ) )) { RecurseParens( tokenizer, element, ref nestedLevel); } }