public Syntax getSyntaxRule(CTX ctx, List<Token> tls, int s, int e) { Token tk = tls.get(s); if (tk.kw.equals(KW.Type)) { tk = lookAhead(ctx, tls, s + 1, e); if (tk != null && (tk.tt == TK.SYMBOL || tk.tt == TK.USYMBOL)) { tk = lookAhead(ctx, tls, s + 2, e); if (tk != null && (tk.tt == TK.AST_PARENTHESIS || tk.kw.equals(KW.DOT))) { return syntax(ctx, KW.StmtMethodDecl); // } return syntax(ctx, KW.StmtTypeDecl); // } return syntax(ctx, KW.Expr); // expression } Syntax syn = syntax(ctx, tk.kw); if (syn.syntaxRuleNULL == null) { ctx.DBG_P( "kw='%s', %d, %d", syn.kw, 0, 0); // TODO syn.ParseExpr == kmodsugar.UndefinedParseExpr, kmodsugar.UndefinedExprTyCheck // == syn.ExprTyCheck); int i; for (i = s + 1; i < e; i++) { tk = tls.get(i); syn = syntax(ctx, tk.kw); if (syn.syntaxRuleNULL != null && syn.priority > 0) { ctx.SUGAR_P(System.out, tk.uline, tk.lpos, "binary operator syntax kw='%s'", syn.kw); return syn; } } return syntax(ctx, KW.Expr); } return syn; }
public KObject eval(CTX ctx, String script, long uline) { ctx.gamma = new Gamma(); ctx.gamma.ks = this; List<Token> tls = new ArrayList<Token>(); int pos = tls.size(); tokenize(ctx, script, uline, tls); Block bk = Parser.newBlock(ctx, this, null, tls, pos, tls.size(), ';'); KArray.clear(tls, pos); return evalBlock(ctx, bk); }