Search in sources :

Example 1 with Token

use of stanhebben.zenscript.parser.Token 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 Token

use of stanhebben.zenscript.parser.Token in project ZenScript by CraftTweaker.

the class ParsedFunction method parse.

public static ParsedFunction parse(ZenTokener parser, IEnvironmentGlobal environment) {
    parser.next();
    Token tName = parser.required(ZenTokener.T_ID, "identifier expected");
    // function (argname [as type], argname [as type], ...) [as type] {
    // ...contents... }
    parser.required(T_BROPEN, "( expected");
    List<ParsedFunctionArgument> arguments = new ArrayList<>();
    if (parser.optional(T_BRCLOSE) == null) {
        Token argName = parser.required(T_ID, "identifier expected");
        ZenType type = ZenTypeAny.INSTANCE;
        if (parser.optional(T_AS) != null) {
            type = ZenType.read(parser, environment);
        }
        arguments.add(new ParsedFunctionArgument(argName.getValue(), type));
        while (parser.optional(T_COMMA) != null) {
            Token argName2 = parser.required(T_ID, "identifier expected");
            ZenType type2 = ZenTypeAny.INSTANCE;
            if (parser.optional(T_AS) != null) {
                type2 = ZenType.read(parser, environment);
            }
            arguments.add(new ParsedFunctionArgument(argName2.getValue(), type2));
        }
        parser.required(T_BRCLOSE, ") expected");
    }
    ZenType type = ZenTypeAny.INSTANCE;
    if (parser.optional(T_AS) != null) {
        type = ZenType.read(parser, environment);
    }
    parser.required(T_AOPEN, "{ expected");
    Statement[] statements;
    if (parser.optional(T_ACLOSE) != null) {
        statements = new Statement[0];
    } else {
        ArrayList<Statement> statementsAL = new ArrayList<>();
        while (parser.optional(T_ACLOSE) == null) {
            statementsAL.add(Statement.read(parser, environment, type));
        }
        statements = statementsAL.toArray(new Statement[statementsAL.size()]);
    }
    return new ParsedFunction(tName.getPosition(), tName.getValue(), arguments, type, statements);
}
Also used : Statement(stanhebben.zenscript.statements.Statement) Token(stanhebben.zenscript.parser.Token)

Example 3 with Token

use of stanhebben.zenscript.parser.Token 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)

Example 4 with Token

use of stanhebben.zenscript.parser.Token in project CraftTweaker by CraftTweaker.

the class BracketHandlerEntity method find.

private IZenSymbol find(IEnvironmentGlobal environment, List<Token> tokens, int startIndex, int endIndex) {
    StringBuilder valueBuilder = new StringBuilder();
    for (int i = startIndex; i < endIndex; i++) {
        Token token = tokens.get(i);
        valueBuilder.append(token.getValue());
    }
    return position -> new ExpressionCallStatic(position, environment, method, new ExpressionString(position, valueBuilder.toString()));
}
Also used : IJavaMethod(stanhebben.zenscript.type.natives.IJavaMethod) CraftTweakerAPI(crafttweaker.CraftTweakerAPI) java.util(java.util) IBracketHandler(crafttweaker.zenscript.IBracketHandler) IEnvironmentGlobal(stanhebben.zenscript.compiler.IEnvironmentGlobal) crafttweaker.annotations(crafttweaker.annotations) Token(stanhebben.zenscript.parser.Token) stanhebben.zenscript.expression(stanhebben.zenscript.expression) IZenSymbol(stanhebben.zenscript.symbols.IZenSymbol) IEntityDefinition(crafttweaker.api.entity.IEntityDefinition) Token(stanhebben.zenscript.parser.Token)

Example 5 with Token

use of stanhebben.zenscript.parser.Token in project CraftTweaker by CraftTweaker.

the class BracketHandlerLiquid method find.

private IZenSymbol find(IEnvironmentGlobal environment, List<Token> tokens, int startIndex, int endIndex) {
    StringBuilder valueBuilder = new StringBuilder();
    for (int i = startIndex; i < endIndex; i++) {
        Token token = tokens.get(i);
        valueBuilder.append(token.getValue());
    }
    Fluid fluid = fluidNames.get(valueBuilder.toString());
    if (fluid != null) {
        return position -> new ExpressionCallStatic(position, environment, method, new ExpressionString(position, valueBuilder.toString()));
    }
    return null;
}
Also used : stanhebben.zenscript.type.natives(stanhebben.zenscript.type.natives) java.util(java.util) IBracketHandler(crafttweaker.zenscript.IBracketHandler) GlobalRegistry(crafttweaker.zenscript.GlobalRegistry) IEnvironmentGlobal(stanhebben.zenscript.compiler.IEnvironmentGlobal) crafttweaker.annotations(crafttweaker.annotations) Token(stanhebben.zenscript.parser.Token) net.minecraftforge.fluids(net.minecraftforge.fluids) stanhebben.zenscript.expression(stanhebben.zenscript.expression) IZenSymbol(stanhebben.zenscript.symbols.IZenSymbol) ILiquidStack(crafttweaker.api.liquid.ILiquidStack) MCLiquidStack(crafttweaker.mc1120.liquid.MCLiquidStack) Token(stanhebben.zenscript.parser.Token)

Aggregations

Token (stanhebben.zenscript.parser.Token)8 crafttweaker.annotations (crafttweaker.annotations)4 IBracketHandler (crafttweaker.zenscript.IBracketHandler)4 java.util (java.util)4 IEnvironmentGlobal (stanhebben.zenscript.compiler.IEnvironmentGlobal)4 stanhebben.zenscript.expression (stanhebben.zenscript.expression)4 IZenSymbol (stanhebben.zenscript.symbols.IZenSymbol)4 ZenType (stanhebben.zenscript.type.ZenType)3 crafttweaker (crafttweaker)2 GlobalRegistry (crafttweaker.zenscript.GlobalRegistry)2 ParsedExpression (stanhebben.zenscript.parser.expression.ParsedExpression)2 stanhebben.zenscript.type.natives (stanhebben.zenscript.type.natives)2 IJavaMethod (stanhebben.zenscript.type.natives.IJavaMethod)2 CraftTweakerAPI (crafttweaker.CraftTweakerAPI)1 IEntityDefinition (crafttweaker.api.entity.IEntityDefinition)1 crafttweaker.api.item (crafttweaker.api.item)1 ILiquidStack (crafttweaker.api.liquid.ILiquidStack)1 CraftTweakerMC.getIItemStackWildcardSize (crafttweaker.api.minecraft.CraftTweakerMC.getIItemStackWildcardSize)1 IOreDictEntry (crafttweaker.api.oredict.IOreDictEntry)1 MCItemUtils (crafttweaker.mc1120.item.MCItemUtils)1