private static KonohaExpr ParseExpr_Parenthesis(Context ctx, Syntax syn, KStatement stmt, IList<Token> tls, int s, int c, int e)
{
Token tk = tls[c];
if(s == c) {
KonohaExpr expr = stmt.newExpr2(ctx, tk.Sub, 0, tk.Sub.Count);
return KModSugar.Expr_rightJoin(ctx, expr, stmt, tls, s + 1, c + 1, e);
}
else {
KonohaExpr lexpr = stmt.newExpr2(ctx, tls, s, c);
if(lexpr == null) {
return null;
}
if (lexpr.syn == null)
{
lexpr.syn = stmt.ks.GetSyntax(lexpr.tk.Keyword);
}
if(lexpr.syn.KeyWord == KeywordType.DOT) {
lexpr.syn = stmt.ks.GetSyntax(KeywordType.ExprMethodCall); // CALL
}
else if(lexpr.syn.KeyWord != KeywordType.ExprMethodCall) {
Console.WriteLine("function calls .. ");
syn = stmt.ks.GetSyntax(KeywordType.Parenthesis); // (f null ())
lexpr = new ConsExpr(ctx, syn, lexpr, null);
}
stmt.addExprParams(ctx, lexpr, tk.Sub, 0, tk.Sub.Count, true/*allowEmpty*/);
return KModSugar.Expr_rightJoin(ctx, lexpr, stmt, tls, s + 1, c + 1, e);
}
}