Search in sources :

Example 6 with Token

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

the class ParsedZenClassMethod method parse.

public static ParsedZenClassMethod parse(ZenTokener parser, EnvironmentScript classEnvironment, String className) {
    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;
        ParsedExpression expression = null;
        boolean hasDefaultArgument = false;
        if (parser.optional(T_AS) != null) {
            type = ZenType.read(parser, classEnvironment);
        }
        if (parser.optional(T_ASSIGN) != null) {
            expression = ParsedExpression.read(parser, classEnvironment);
            if (expression instanceof ParsedExpressionVariable) {
                throw new ParseException(parser.getFile(), parser.getLine(), parser.getLineOffset(), "Variables are not allowed in default arguments");
            }
            hasDefaultArgument = true;
        }
        arguments.add(new ParsedFunctionArgument(argName.getValue(), type, expression));
        while (parser.optional(T_COMMA) != null) {
            Token argName2 = parser.required(T_ID, "identifier expected");
            ZenType type2 = ZenTypeAny.INSTANCE;
            ParsedExpression expression2 = null;
            if (parser.optional(T_AS) != null) {
                type2 = ZenType.read(parser, classEnvironment);
            }
            if (parser.optional(T_ASSIGN) != null) {
                expression2 = ParsedExpression.read(parser, classEnvironment);
                if (expression2 instanceof ParsedExpressionVariable) {
                    throw new ParseException(parser.getFile(), parser.getLine(), parser.getLineOffset(), "Variables are not allowed in default arguments");
                }
                hasDefaultArgument = true;
            } else if (hasDefaultArgument) {
                throw new ParseException(parser.getFile(), parser.getLine(), parser.getLineOffset(), "Parameter " + argName2.getValue() + " requires a default argument");
            }
            arguments.add(new ParsedFunctionArgument(argName2.getValue(), type2, expression2));
        }
        parser.required(T_BRCLOSE, ") expected");
    }
    ZenType type = ZenTypeAny.INSTANCE;
    if (parser.optional(T_AS) != null) {
        type = ZenType.read(parser, classEnvironment);
    }
    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, classEnvironment, type));
        }
        statements = statementsAL.toArray(new Statement[statementsAL.size()]);
    }
    return new ParsedZenClassMethod(new ParsedFunction(tName.getPosition(), tName.getValue(), arguments, type, statements), className);
}
Also used : ParsedFunction(stanhebben.zenscript.definitions.ParsedFunction) ParsedExpressionVariable(stanhebben.zenscript.parser.expression.ParsedExpressionVariable) Statement(stanhebben.zenscript.statements.Statement) ArrayList(java.util.ArrayList) Token(stanhebben.zenscript.parser.Token) ParsedFunctionArgument(stanhebben.zenscript.definitions.ParsedFunctionArgument) ParsedExpression(stanhebben.zenscript.parser.expression.ParsedExpression) ParseException(stanhebben.zenscript.parser.ParseException) ZenType(stanhebben.zenscript.type.ZenType)

Example 7 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;
        ParsedExpression expression = null;
        boolean hasDefaultArgument = false;
        if (parser.optional(T_AS) != null) {
            type = ZenType.read(parser, environment);
        }
        if (parser.optional(T_ASSIGN) != null) {
            expression = ParsedExpression.read(parser, environment);
            if (expression instanceof ParsedExpressionVariable) {
                throw new ParseException(parser.getFile(), parser.getLine(), parser.getLineOffset(), "Variables are not allowed in default arguments");
            }
            hasDefaultArgument = true;
        }
        arguments.add(new ParsedFunctionArgument(argName.getValue(), type, expression));
        while (parser.optional(T_COMMA) != null) {
            Token argName2 = parser.required(T_ID, "identifier expected");
            ZenType type2 = ZenTypeAny.INSTANCE;
            ParsedExpression expression2 = null;
            if (parser.optional(T_AS) != null) {
                type2 = ZenType.read(parser, environment);
            }
            if (parser.optional(T_ASSIGN) != null) {
                expression2 = ParsedExpression.read(parser, environment);
                if (expression2 instanceof ParsedExpressionVariable) {
                    throw new ParseException(parser.getFile(), parser.getLine(), parser.getLineOffset(), "Variables are not allowed in default arguments");
                }
                hasDefaultArgument = true;
            } else if (hasDefaultArgument) {
                throw new ParseException(parser.getFile(), parser.getLine(), parser.getLineOffset(), "Parameter " + argName2.getValue() + " requires a default argument");
            }
            arguments.add(new ParsedFunctionArgument(argName2.getValue(), type2, expression2));
        }
        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 : ParsedExpressionVariable(stanhebben.zenscript.parser.expression.ParsedExpressionVariable) Statement(stanhebben.zenscript.statements.Statement) Token(stanhebben.zenscript.parser.Token) ParsedExpression(stanhebben.zenscript.parser.expression.ParsedExpression) ParseException(stanhebben.zenscript.parser.ParseException)

Example 8 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 9 with Token

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

the class BracketHandlerItem method find.

private IZenSymbol find(IEnvironmentGlobal environment, List<Token> tokens, int startIndex, int endIndex, int meta) {
    StringBuilder valueBuilder = new StringBuilder();
    for (int i = startIndex; i < endIndex; i++) {
        Token token = tokens.get(i);
        valueBuilder.append(token.getValue());
    }
    String itemName = valueBuilder.toString();
    if (itemNames.containsKey(itemName) || blockNames.containsKey(itemName)) {
        return position -> new ExpressionCallStatic(position, environment, method, new ExpressionString(position, valueBuilder.toString()), new ExpressionInt(position, meta, ZenType.INT));
    }
    return null;
}
Also used : MCItemUtils(crafttweaker.mc1120.item.MCItemUtils) java.util(java.util) ZenTokener(stanhebben.zenscript.ZenTokener) IBracketHandler(crafttweaker.zenscript.IBracketHandler) Token(stanhebben.zenscript.parser.Token) net.minecraft.item(net.minecraft.item) stanhebben.zenscript.expression(stanhebben.zenscript.expression) IJavaMethod(stanhebben.zenscript.type.natives.IJavaMethod) crafttweaker(crafttweaker) Block(net.minecraft.block.Block) IEnvironmentGlobal(stanhebben.zenscript.compiler.IEnvironmentGlobal) OreDictionary(net.minecraftforge.oredict.OreDictionary) crafttweaker.annotations(crafttweaker.annotations) crafttweaker.api.item(crafttweaker.api.item) ResourceLocation(net.minecraft.util.ResourceLocation) ZenType(stanhebben.zenscript.type.ZenType) IZenSymbol(stanhebben.zenscript.symbols.IZenSymbol) CraftTweakerMC.getIItemStackWildcardSize(crafttweaker.api.minecraft.CraftTweakerMC.getIItemStackWildcardSize) Token(stanhebben.zenscript.parser.Token)

Example 10 with Token

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

the class BracketHandlerPotion 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 new PotionReferenceSymbol(environment, valueBuilder.toString());
}
Also used : Token(stanhebben.zenscript.parser.Token)

Aggregations

Token (stanhebben.zenscript.parser.Token)10 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 ParsedExpression (stanhebben.zenscript.parser.expression.ParsedExpression)4 IZenSymbol (stanhebben.zenscript.symbols.IZenSymbol)4 ZenType (stanhebben.zenscript.type.ZenType)4 crafttweaker (crafttweaker)2 GlobalRegistry (crafttweaker.zenscript.GlobalRegistry)2 ParseException (stanhebben.zenscript.parser.ParseException)2 ParsedExpressionVariable (stanhebben.zenscript.parser.expression.ParsedExpressionVariable)2 Statement (stanhebben.zenscript.statements.Statement)2 stanhebben.zenscript.type.natives (stanhebben.zenscript.type.natives)2 IJavaMethod (stanhebben.zenscript.type.natives.IJavaMethod)2 ZenPosition (stanhebben.zenscript.util.ZenPosition)2 CraftTweakerAPI (crafttweaker.CraftTweakerAPI)1 IEntityDefinition (crafttweaker.api.entity.IEntityDefinition)1 crafttweaker.api.item (crafttweaker.api.item)1