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)