internal Syntax GetSyntaxRule(IList<Token> tls, int s, int e)
{
Token tk = tls[s];
if (tk.IsType)
{
tk = (s + 1 < e) ? tls[s + 1] : null;
if (tk != null && (tk.Type == TokenType.SYMBOL || tk.Type == TokenType.USYMBOL))
{
tk = (s + 2 < e) ? tls[s + 2] : null;
if (tk != null && (tk.Type == TokenType.AST_PARENTHESIS || tk.Keyword == KeywordType.DOT))
{
return GetSyntax(KeywordType.StmtMethodDecl); //
}
return GetSyntax(KeywordType.Type); //
}
return GetSyntax(KeywordType.Expr); // expression
}
Syntax syn = GetSyntax(tk.Keyword);
if (syn == null || syn.SyntaxRule == null)
{
//wDBG_P("kw='%s', %d, %d", T_kw(syn.KeyWord), syn.ParseExpr == kmodsugar.UndefinedParseExpr, kmodsugar.UndefinedExprTyCheck == syn.ExprTyCheck);
int i;
for (i = s + 1; i < e; i++)
{
tk = tls[i];
syn = GetSyntax(tk.Keyword);
if (syn.SyntaxRule != null && syn.priority > 0)
{
ctx.SUGAR_P(ReportLevel.DEBUG, tk.ULine, 0, "binary operator syntax kw='%s'", syn.KeyWord.ToString()); // sugar $expr "=" $expr;
return syn;
}
}
return GetSyntax(KeywordType.Expr);
}
return syn;
}