CSLE.CLS_Expression_Compiler.SplitExpressionWithOp C# (CSharp) Method

SplitExpressionWithOp() private method

private SplitExpressionWithOp ( IList tokens, int pos, int posend ) : IList
tokens IList
pos int
posend int
return IList
        IList<int> SplitExpressionWithOp(IList<Token> tokens, int pos, int posend)
        {
            List<int> list = new List<int>();
            List<int> listt = new List<int>();
            int dep = 0;
            int skip = 0;
            for (int i = pos; i <= posend; i++)
            {
                if (tokens[i].type == TokenType.PUNCTUATION || (tokens[i].type == TokenType.KEYWORD && tokens[i].text == "as") || (tokens[i].type == TokenType.KEYWORD && tokens[i].text == "is"))
                {
                    if (tokens[i].text == "(")
                    {

                        if (dep == 0 && (i == pos || tokens[i - 1].type == TokenType.PUNCTUATION) && i + 1 <= posend && tokens[i + 1].type == TokenType.TYPE)
                        {
                            list.Add(i);
                        }
                        dep++;
                        skip = i + 1;
                        continue;
                    }
                    else if (tokens[i].text == "{")
                    {
                        dep++;
                        skip = i + 1;
                        continue;
                    }
                    else if (tokens[i].text == "[")
                    {
                        if (dep == 0)
                        {
                            list.Add(i);
                        }
                        dep++;
                        skip = i + 1;
                        continue;
                    }
                    else if (tokens[i].text == ")" || tokens[i].text == "}" || tokens[i].text == "]")
                    {
                        dep--;
                        if (dep < 0) return null;
                        continue;
                    }

                }

                if (dep == 0 && i > pos && i < posend && i != skip)
                {
                    if (tokens[i].type == TokenType.PUNCTUATION || (tokens[i].type == TokenType.KEYWORD && tokens[i].text == "as") || (tokens[i].type == TokenType.KEYWORD && tokens[i].text == "is"))
                    {
                        if (tokens[i].text == "." && tokens[i - 1].type == TokenType.TYPE)
                        {
                            listt.Add(i);
                        }
                        else
                        {
                            list.Add(i);
                        }
                        skip = i + 1;
                    }

                }
            }
            return list.Count > 0 ? list : listt;
        }
        int GetLowestMathOp(IList<Token> tokens, IList<int> list)