Search in sources :

Example 1 with ParsedExpression

use of stanhebben.zenscript.parser.expression.ParsedExpression in project ZenScript by CraftTweaker.

the class Statement method read.

public static Statement read(ZenTokener parser, IEnvironmentGlobal environment, ZenType returnType) {
    Token next = parser.peek();
    switch(next.getType()) {
        case T_AOPEN:
            {
                Token t = parser.next();
                ArrayList<Statement> statements = new ArrayList<>();
                while (parser.optional(T_ACLOSE) == null) {
                    statements.add(read(parser, environment, returnType));
                }
                return new StatementBlock(t.getPosition(), statements);
            }
        case T_RETURN:
            {
                parser.next();
                ParsedExpression expression = null;
                if (parser.peek() != null && !parser.isNext(T_SEMICOLON)) {
                    expression = ParsedExpression.read(parser, environment);
                }
                parser.required(T_SEMICOLON, "; expected");
                return new StatementReturn(next.getPosition(), returnType, expression);
            }
        case T_VAR:
        case T_VAL:
            {
                Token start = parser.next();
                String name = parser.required(T_ID, "identifier expected").getValue();
                ZenType type = null;
                ParsedExpression initializer = null;
                if (parser.optional(T_AS) != null) {
                    type = ZenType.read(parser, environment);
                }
                if (parser.optional(T_ASSIGN) != null) {
                    initializer = ParsedExpression.read(parser, environment);
                }
                parser.required(T_SEMICOLON, "; expected");
                return new StatementVar(start.getPosition(), name, type, initializer, start.getType() == T_VAL);
            }
        case T_IF:
            {
                Token t = parser.next();
                ParsedExpression expression = ParsedExpression.read(parser, environment);
                Statement onIf = read(parser, environment, returnType);
                Statement onElse = null;
                if (parser.optional(T_ELSE) != null) {
                    onElse = read(parser, environment, returnType);
                }
                return new StatementIf(t.getPosition(), expression, onIf, onElse);
            }
        case T_FOR:
            {
                Token t = parser.next();
                String name = parser.required(T_ID, "identifier expected").getValue();
                List<String> names = new ArrayList<>();
                names.add(name);
                while (parser.optional(T_COMMA) != null) {
                    names.add(parser.required(T_ID, "identifier expected").getValue());
                }
                parser.required(T_IN, "in expected");
                ParsedExpression source = ParsedExpression.read(parser, environment);
                Statement content = read(parser, environment, null);
                return new StatementForeach(t.getPosition(), names.toArray(new String[names.size()]), source, content);
            }
        case T_WHILE:
            {
                parser.next();
                ParsedExpression condition = ParsedExpression.read(parser, environment);
                Statement content = read(parser, environment, null);
                return new StatementWhileDo(next.getPosition(), content, condition);
            }
        case T_VERSION:
            {
                Token t = parser.next();
                parser.required(T_INTVALUE, "integer expected");
                parser.required(T_SEMICOLON, "; expected");
                return new StatementNull(t.getPosition());
            }
        case T_BREAK:
            {
                parser.next();
                parser.required(T_SEMICOLON, "; expected");
                return new StatementBreak(next.getPosition());
            }
    }
    ZenPosition position = parser.peek().getPosition();
    StatementExpression result = new StatementExpression(position, ParsedExpression.read(parser, environment));
    parser.required(T_SEMICOLON, "; expected");
    return result;
}
Also used : Token(stanhebben.zenscript.parser.Token) ParsedExpression(stanhebben.zenscript.parser.expression.ParsedExpression) ZenPosition(stanhebben.zenscript.util.ZenPosition) ZenType(stanhebben.zenscript.type.ZenType)

Example 2 with ParsedExpression

use of stanhebben.zenscript.parser.expression.ParsedExpression in project ZenScript by CraftTweaker.

the class ParsedGlobalValue method parse.

public static ParsedGlobalValue parse(ZenTokener parser, IEnvironmentGlobal environment, String owner, boolean global) {
    // Start ("GLOBAL")
    Token startingPoint = parser.next();
    // Name ("globalName", "test")
    String name = parser.required(T_ID, "Global value requires a name!").getValue();
    // Type ("as type", "as IItemStack")
    ZenType type = ZenType.ANY;
    Token nee = parser.optional(T_AS);
    if (nee != null) {
        type = ZenType.read(parser, environment);
    }
    // "="
    parser.required(T_ASSIGN, "Global values have to be initialized!");
    // "value, <minecraft:dirt>"
    ParsedExpression value = ParsedExpression.read(parser, environment);
    // ";"
    parser.required(T_SEMICOLON, "; expected");
    // throw it together
    return new ParsedGlobalValue(startingPoint.getPosition(), name, type, value, owner, global);
}
Also used : ParsedExpression(stanhebben.zenscript.parser.expression.ParsedExpression) Token(stanhebben.zenscript.parser.Token) ZenType(stanhebben.zenscript.type.ZenType)

Aggregations

Token (stanhebben.zenscript.parser.Token)2 ParsedExpression (stanhebben.zenscript.parser.expression.ParsedExpression)2 ZenType (stanhebben.zenscript.type.ZenType)2 ZenPosition (stanhebben.zenscript.util.ZenPosition)1