Search in sources :

Example 31 with BeetlException

use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.

the class VarVirtualAttribute method evaluate.

public Object evaluate(Context ctx, Object o) {
    VirtualClassAttribute vae = ctx.gt.getVirtualAttributeEval(o.getClass(), name);
    if (vae == null) {
        BeetlException be = new BeetlException(BeetlException.VIRTUAL_NOT_FOUND);
        be.pushToken(token);
        throw be;
    }
    return vae.eval(o, name, ctx);
}
Also used : BeetlException(org.beetl.core.exception.BeetlException) VirtualClassAttribute(org.beetl.core.VirtualClassAttribute)

Example 32 with BeetlException

use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.

the class AntlrProgramBuilder method registerNewVar.

// 纪录一个新变量
protected void registerNewVar(ASTNode vas) {
    if (pbCtx.hasDefined(vas.token.text) != null) {
        GrammarToken token = pbCtx.hasDefined(vas.token.text);
        BeetlException ex = new BeetlException(BeetlException.VAR_ALREADY_DEFINED, "已经在第" + token.line + "行定义");
        ex.pushToken(vas.token);
        throw ex;
    }
    pbCtx.addVar(vas.token.text);
    pbCtx.setVarPosition(vas.token.text, vas);
}
Also used : BeetlException(org.beetl.core.exception.BeetlException) GrammarToken(org.beetl.core.statement.GrammarToken)

Example 33 with BeetlException

use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.

the class AntlrProgramBuilder method parseAjax.

protected AjaxStatement parseAjax(AjaxStContext ajaxCtx) {
    GrammarToken token = null;
    String flag = "render";
    List<TerminalNode> nodes = ajaxCtx.Identifier();
    if (nodes.size() == 1) {
        token = this.getBTToken(nodes.get(0).getSymbol());
    } else {
        token = this.getBTToken(nodes.get(1).getSymbol());
        flag = nodes.get(0).getSymbol().getText();
        if (!(flag.equals("render") || flag.equals("norender"))) {
            BeetlException be = new BeetlException(BeetlException.AJAX_PROPERTY_ERROR, "expect render or norender ,but " + flag);
            be.pushToken(token);
            throw be;
        }
    }
    BlockContext blockCtx = ajaxCtx.block();
    BlockStatement block = (BlockStatement) this.parseBlock(blockCtx.statement(), blockCtx);
    AjaxStatement ajaxStat = new AjaxStatement(block, token, flag.equals("render"));
    if (this.data.ajaxs == null) {
        this.data.ajaxs = new HashMap<String, AjaxStatement>();
    }
    String anchor = ajaxStat.token.text;
    if (this.data.ajaxs.containsKey(anchor)) {
        GrammarToken lastToken = this.data.ajaxs.get(anchor).token;
        BeetlException ex = new BeetlException(BeetlException.AJAX_ALREADY_DEFINED, "已经在第" + lastToken.line + "行定义");
        ex.pushToken(token);
        throw ex;
    }
    this.data.ajaxs.put(anchor, ajaxStat);
    return ajaxStat;
}
Also used : BeetlException(org.beetl.core.exception.BeetlException) BlockContext(org.beetl.core.parser.BeetlParser.BlockContext) BlockStatement(org.beetl.core.statement.BlockStatement) TerminalNode(org.antlr.v4.runtime.tree.TerminalNode) GrammarToken(org.beetl.core.statement.GrammarToken) AjaxStatement(org.beetl.core.statement.AjaxStatement)

Example 34 with BeetlException

use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.

the class AntlrProgramBuilder method parseTag.

protected TagStatement parseTag(FunctionTagCallContext fc) {
    String id = this.getID(fc.functionNs().Identifier());
    ExpressionListContext expListCtx = fc.expressionList();
    List<ExpressionContext> list = null;
    if (expListCtx != null) {
        list = fc.expressionList().expression();
    } else {
        list = Collections.EMPTY_LIST;
    }
    Expression[] expList = this.parseExpressionCtxList(list);
    if (id.equals("htmltagvar")) {
        int line = fc.functionNs().getStart().getLine();
        // 标签具有绑定变量功能
        Literal l = (Literal) expList[2];
        String varList = (String) l.obj;
        String[] vars = varList.split(",");
        // 定义的变量仅仅在标签体内可见
        this.pbCtx.enterBlock();
        VarDefineNode[] varDefine = new VarDefineNode[vars.length];
        for (int i = 0; i < vars.length; i++) {
            VarDefineNode varNode = new VarDefineNode(this.getBTToken(vars[i].trim(), line));
            this.pbCtx.addVarAndPostion(varNode);
            varDefine[i] = varNode;
        }
        BlockContext blockCtx = fc.block();
        Statement block = parseBlock(blockCtx.statement(), blockCtx);
        this.pbCtx.exitBlock();
        TagFactory tf = this.gt.getTagFactory(id);
        if (tf == null) {
            BeetlException ex = new BeetlException(BeetlException.TAG_NOT_FOUND);
            ex.pushToken(this.getBTToken(id, fc.functionNs().getStart().getLine()));
            throw ex;
        }
        TagStatement tag = new TagVarBindingStatement(id, expList, block, varDefine, this.getBTToken(id, line));
        return tag;
    } else {
        BlockContext blockCtx = fc.block();
        Statement block = parseBlock(blockCtx.statement(), blockCtx);
        TagFactory tf = this.gt.getTagFactory(id);
        if (tf == null) {
            BeetlException ex = new BeetlException(BeetlException.TAG_NOT_FOUND);
            ex.pushToken(this.getBTToken(id, fc.functionNs().getStart().getLine()));
            throw ex;
        }
        TagStatement tag = new TagStatement(id, expList, block, this.getBTToken(id, fc.functionNs().getStart().getLine()));
        return tag;
    }
}
Also used : BeetlException(org.beetl.core.exception.BeetlException) BlockContext(org.beetl.core.parser.BeetlParser.BlockContext) ContinueStatement(org.beetl.core.statement.ContinueStatement) DirectiveStatement(org.beetl.core.statement.DirectiveStatement) WhileStatement(org.beetl.core.statement.WhileStatement) AjaxStatement(org.beetl.core.statement.AjaxStatement) BreakStatement(org.beetl.core.statement.BreakStatement) ReturnStatement(org.beetl.core.statement.ReturnStatement) TagVarBindingStatement(org.beetl.core.statement.TagVarBindingStatement) EndStatement(org.beetl.core.statement.EndStatement) VarAssignStatement(org.beetl.core.statement.VarAssignStatement) GeneralForStatement(org.beetl.core.statement.GeneralForStatement) Statement(org.beetl.core.statement.Statement) BlockStatement(org.beetl.core.statement.BlockStatement) IfStatement(org.beetl.core.statement.IfStatement) ForStatement(org.beetl.core.statement.ForStatement) SwitchStatement(org.beetl.core.statement.SwitchStatement) TagStatement(org.beetl.core.statement.TagStatement) VarRefAssignStatement(org.beetl.core.statement.VarRefAssignStatement) SelectStatement(org.beetl.core.statement.SelectStatement) TryCatchStatement(org.beetl.core.statement.TryCatchStatement) ExpressionListContext(org.beetl.core.parser.BeetlParser.ExpressionListContext) TagStatement(org.beetl.core.statement.TagStatement) StatementExpressionContext(org.beetl.core.parser.BeetlParser.StatementExpressionContext) ExpressionContext(org.beetl.core.parser.BeetlParser.ExpressionContext) ParExpressionContext(org.beetl.core.parser.BeetlParser.ParExpressionContext) ContentBodyExpression(org.beetl.core.statement.ContentBodyExpression) ArthExpression(org.beetl.core.statement.ArthExpression) JsonMapExpression(org.beetl.core.statement.JsonMapExpression) CompareExpression(org.beetl.core.statement.CompareExpression) FunctionExpression(org.beetl.core.statement.FunctionExpression) IncDecExpression(org.beetl.core.statement.IncDecExpression) Expression(org.beetl.core.statement.Expression) AndExpression(org.beetl.core.statement.AndExpression) StatementExpression(org.beetl.core.statement.StatementExpression) NativeCallExpression(org.beetl.core.statement.NativeCallExpression) NegExpression(org.beetl.core.statement.NegExpression) FormatExpression(org.beetl.core.statement.FormatExpression) TernaryExpression(org.beetl.core.statement.TernaryExpression) OrExpression(org.beetl.core.statement.OrExpression) JsonArrayExpression(org.beetl.core.statement.JsonArrayExpression) NotBooleanExpression(org.beetl.core.statement.NotBooleanExpression) Literal(org.beetl.core.statement.Literal) VarDefineNode(org.beetl.core.statement.VarDefineNode) TagVarBindingStatement(org.beetl.core.statement.TagVarBindingStatement)

Example 35 with BeetlException

use of org.beetl.core.exception.BeetlException in project beetl2.0 by javamonkey.

the class AntlrProgramBuilder method parseAssingInExp.

/**
 *  赋值变量
 * @param agc
 * @return
 */
protected VarRefAssignExpress parseAssingInExp(AssignGeneralInExpContext agc) {
    VarRefAssignExpress vas = null;
    ExpressionContext expCtx = agc.generalAssignExp().expression();
    Expression exp = parseExpress(expCtx);
    VarRefContext varRefCtx = agc.generalAssignExp().varRef();
    VarRef ref = this.parseVarRefInLeftExpression(varRefCtx);
    vas = new VarRefAssignExpress(exp, ref);
    if (ref.attributes.length == 0) {
        // 变量定义:
        Token token = varRefCtx.Identifier().getSymbol();
        if (pbCtx.hasDefined(token.getText()) != null) {
            registerVar(vas);
            return vas;
        } else {
            BeetlException ex = new BeetlException(BeetlException.VAR_NOT_DEFINED);
            ex.pushToken(this.getBTToken(token));
            throw ex;
        }
    }
    return vas;
}
Also used : VarRef(org.beetl.core.statement.VarRef) BeetlException(org.beetl.core.exception.BeetlException) StatementExpressionContext(org.beetl.core.parser.BeetlParser.StatementExpressionContext) ExpressionContext(org.beetl.core.parser.BeetlParser.ExpressionContext) ParExpressionContext(org.beetl.core.parser.BeetlParser.ParExpressionContext) ContentBodyExpression(org.beetl.core.statement.ContentBodyExpression) ArthExpression(org.beetl.core.statement.ArthExpression) JsonMapExpression(org.beetl.core.statement.JsonMapExpression) CompareExpression(org.beetl.core.statement.CompareExpression) FunctionExpression(org.beetl.core.statement.FunctionExpression) IncDecExpression(org.beetl.core.statement.IncDecExpression) Expression(org.beetl.core.statement.Expression) AndExpression(org.beetl.core.statement.AndExpression) StatementExpression(org.beetl.core.statement.StatementExpression) NativeCallExpression(org.beetl.core.statement.NativeCallExpression) NegExpression(org.beetl.core.statement.NegExpression) FormatExpression(org.beetl.core.statement.FormatExpression) TernaryExpression(org.beetl.core.statement.TernaryExpression) OrExpression(org.beetl.core.statement.OrExpression) JsonArrayExpression(org.beetl.core.statement.JsonArrayExpression) NotBooleanExpression(org.beetl.core.statement.NotBooleanExpression) VarRefContext(org.beetl.core.parser.BeetlParser.VarRefContext) Token(org.antlr.v4.runtime.Token) GrammarToken(org.beetl.core.statement.GrammarToken) VarRefAssignExpress(org.beetl.core.statement.VarRefAssignExpress)

Aggregations

BeetlException (org.beetl.core.exception.BeetlException)60 GrammarToken (org.beetl.core.statement.GrammarToken)10 IOException (java.io.IOException)7 BeetlParserException (org.beetl.core.exception.BeetlParserException)6 Expression (org.beetl.core.statement.Expression)6 AndExpression (org.beetl.core.statement.AndExpression)5 ArthExpression (org.beetl.core.statement.ArthExpression)5 CompareExpression (org.beetl.core.statement.CompareExpression)5 ContentBodyExpression (org.beetl.core.statement.ContentBodyExpression)5 FormatExpression (org.beetl.core.statement.FormatExpression)5 FunctionExpression (org.beetl.core.statement.FunctionExpression)5 IncDecExpression (org.beetl.core.statement.IncDecExpression)5 JsonArrayExpression (org.beetl.core.statement.JsonArrayExpression)5 JsonMapExpression (org.beetl.core.statement.JsonMapExpression)5 NativeCallExpression (org.beetl.core.statement.NativeCallExpression)5 NegExpression (org.beetl.core.statement.NegExpression)5 NotBooleanExpression (org.beetl.core.statement.NotBooleanExpression)5 OrExpression (org.beetl.core.statement.OrExpression)5 StatementExpression (org.beetl.core.statement.StatementExpression)5 TernaryExpression (org.beetl.core.statement.TernaryExpression)5