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;
}
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);
}
Aggregations