mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 06:40:55 +00:00
Name changes
This commit is contained in:
+27
-25
@@ -98,16 +98,16 @@ public class Parser {
|
|||||||
SourcePosition start = tokenizer.consume().getPosition();
|
SourcePosition start = tokenizer.consume().getPosition();
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN);
|
||||||
scopeBuilder = scopeBuilder.subInLoop();
|
scopeBuilder = scopeBuilder.subInLoop();
|
||||||
Expression<?> first = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
Expression<?> condition = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
ParserUtil.ensureReturnType(first, Expression.ReturnType.BOOLEAN);
|
ParserUtil.ensureReturnType(condition, Expression.ReturnType.BOOLEAN);
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
||||||
return new WhileKeyword(parseStatementBlock(tokenizer, scopeBuilder), (Expression<Boolean>) first, start); // While loop
|
return new WhileKeyword(parseStatementBlock(tokenizer, scopeBuilder), (Expression<Boolean>) condition, start); // While loop
|
||||||
}
|
}
|
||||||
|
|
||||||
private IfKeyword parseIfStatement(Tokenizer tokenizer, ScopeBuilder scopeBuilder) {
|
private IfKeyword parseIfStatement(Tokenizer tokenizer, ScopeBuilder scopeBuilder) {
|
||||||
SourcePosition start = tokenizer.consume().getPosition();
|
SourcePosition start = tokenizer.consume().getPosition();
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN);
|
||||||
Expression<?> condition = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
Expression<?> condition = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
ParserUtil.ensureReturnType(condition, Expression.ReturnType.BOOLEAN);
|
ParserUtil.ensureReturnType(condition, Expression.ReturnType.BOOLEAN);
|
||||||
|
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
||||||
@@ -121,7 +121,7 @@ public class Parser {
|
|||||||
tokenizer.consume(); // Consume else.
|
tokenizer.consume(); // Consume else.
|
||||||
if(tokenizer.current().isType(Token.Type.IF_STATEMENT)) {
|
if(tokenizer.current().isType(Token.Type.IF_STATEMENT)) {
|
||||||
tokenizer.consume(); // Consume if.
|
tokenizer.consume(); // Consume if.
|
||||||
Expression<?> elseCondition = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
Expression<?> elseCondition = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
ParserUtil.ensureReturnType(elseCondition, Expression.ReturnType.BOOLEAN);
|
ParserUtil.ensureReturnType(elseCondition, Expression.ReturnType.BOOLEAN);
|
||||||
elseIf.add(Pair.of((Expression<Boolean>) elseCondition, parseStatementBlock(tokenizer, scopeBuilder)));
|
elseIf.add(Pair.of((Expression<Boolean>) elseCondition, parseStatementBlock(tokenizer, scopeBuilder)));
|
||||||
} else {
|
} else {
|
||||||
@@ -141,7 +141,7 @@ public class Parser {
|
|||||||
return block;
|
return block;
|
||||||
} else {
|
} else {
|
||||||
SourcePosition position = tokenizer.current().getPosition();
|
SourcePosition position = tokenizer.current().getPosition();
|
||||||
return new Block(Collections.singletonList(parseExpression(tokenizer, scopeBuilder)), position);
|
return new Block(Collections.singletonList(parseStatement(tokenizer, scopeBuilder)), position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,9 +158,9 @@ public class Parser {
|
|||||||
if(functions.containsKey(name.getContent()) || scopeBuilder.contains(name.getContent()))
|
if(functions.containsKey(name.getContent()) || scopeBuilder.contains(name.getContent()))
|
||||||
throw new ParseException(name.getContent() + " is already defined in this scope", name.getPosition());
|
throw new ParseException(name.getContent() + " is already defined in this scope", name.getPosition());
|
||||||
initializer = forVar;
|
initializer = forVar;
|
||||||
} else initializer = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
} else initializer = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END);
|
||||||
Expression<?> conditional = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
Expression<?> conditional = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
ParserUtil.ensureReturnType(conditional, Expression.ReturnType.BOOLEAN);
|
ParserUtil.ensureReturnType(conditional, Expression.ReturnType.BOOLEAN);
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END);
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ public class Parser {
|
|||||||
Token token = tokenizer.current();
|
Token token = tokenizer.current();
|
||||||
if(scopeBuilder.contains(token.getContent())) { // Assume variable assignment
|
if(scopeBuilder.contains(token.getContent())) { // Assume variable assignment
|
||||||
incrementer = parseAssignment(tokenizer, scopeBuilder);
|
incrementer = parseAssignment(tokenizer, scopeBuilder);
|
||||||
} else incrementer = parseFunction(tokenizer, true, scopeBuilder);
|
} else incrementer = parseFunctionInvocation(tokenizer, true, scopeBuilder);
|
||||||
|
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ public class Parser {
|
|||||||
start);
|
start);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Expression<?> parseLogicMathExpression(Tokenizer tokenizer, boolean full, ScopeBuilder scopeBuilder) {
|
private Expression<?> parseExpression(Tokenizer tokenizer, boolean full, ScopeBuilder scopeBuilder) {
|
||||||
boolean booleanInverted = false; // Check for boolean not operator
|
boolean booleanInverted = false; // Check for boolean not operator
|
||||||
boolean negate = false;
|
boolean negate = false;
|
||||||
if(tokenizer.current().isType(Token.Type.BOOLEAN_NOT)) {
|
if(tokenizer.current().isType(Token.Type.BOOLEAN_NOT)) {
|
||||||
@@ -195,10 +195,10 @@ public class Parser {
|
|||||||
if(id.isConstant()) {
|
if(id.isConstant()) {
|
||||||
expression = parseConstantExpression(tokenizer);
|
expression = parseConstantExpression(tokenizer);
|
||||||
} else if(id.isType(Token.Type.GROUP_BEGIN)) { // Parse grouped expression
|
} else if(id.isType(Token.Type.GROUP_BEGIN)) { // Parse grouped expression
|
||||||
expression = parseMathLogicGroup(tokenizer, scopeBuilder);
|
expression = parseExpressionGroup(tokenizer, scopeBuilder);
|
||||||
} else {
|
} else {
|
||||||
if(functions.containsKey(id.getContent()))
|
if(functions.containsKey(id.getContent()))
|
||||||
expression = parseFunction(tokenizer, false, scopeBuilder);
|
expression = parseFunctionInvocation(tokenizer, false, scopeBuilder);
|
||||||
else if(scopeBuilder.contains(id.getContent())) {
|
else if(scopeBuilder.contains(id.getContent())) {
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.IDENTIFIER);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.IDENTIFIER);
|
||||||
String varId = id.getContent();
|
String varId = id.getContent();
|
||||||
@@ -241,9 +241,9 @@ public class Parser {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private Expression<?> parseMathLogicGroup(Tokenizer tokenizer, ScopeBuilder scopeBuilder) {
|
private Expression<?> parseExpressionGroup(Tokenizer tokenizer, ScopeBuilder scopeBuilder) {
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN);
|
||||||
Expression<?> expression = parseLogicMathExpression(tokenizer, true, scopeBuilder); // Parse inside of group as a separate expression
|
Expression<?> expression = parseExpression(tokenizer, true, scopeBuilder); // Parse inside of group as a separate expression
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END);
|
||||||
return expression;
|
return expression;
|
||||||
}
|
}
|
||||||
@@ -253,14 +253,16 @@ public class Parser {
|
|||||||
Token binaryOperator = tokenizer.consume();
|
Token binaryOperator = tokenizer.consume();
|
||||||
ParserUtil.checkBinaryOperator(binaryOperator);
|
ParserUtil.checkBinaryOperator(binaryOperator);
|
||||||
|
|
||||||
Expression<?> right = parseLogicMathExpression(tokenizer, false, scopeBuilder);
|
Expression<?> right = parseExpression(tokenizer, false, scopeBuilder);
|
||||||
|
|
||||||
Token other = tokenizer.current();
|
Token other = tokenizer.current();
|
||||||
if(ParserUtil.hasPrecedence(binaryOperator.getType(), other.getType())) {
|
|
||||||
|
if(ParserUtil.hasPrecedence(binaryOperator.getType(), other.getType()))
|
||||||
return assemble(left, parseBinaryOperation(right, tokenizer, scopeBuilder), binaryOperator);
|
return assemble(left, parseBinaryOperation(right, tokenizer, scopeBuilder), binaryOperator);
|
||||||
} else if(other.isBinaryOperator()) {
|
|
||||||
|
if(other.isBinaryOperator())
|
||||||
return parseBinaryOperation(assemble(left, right, binaryOperator), tokenizer, scopeBuilder);
|
return parseBinaryOperation(assemble(left, right, binaryOperator), tokenizer, scopeBuilder);
|
||||||
}
|
|
||||||
return assemble(left, right, binaryOperator);
|
return assemble(left, right, binaryOperator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,7 +319,7 @@ public class Parser {
|
|||||||
throw new ParseException(identifier.getContent() + " is already defined in this scope", identifier.getPosition());
|
throw new ParseException(identifier.getContent() + " is already defined in this scope", identifier.getPosition());
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.ASSIGNMENT);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.ASSIGNMENT);
|
||||||
|
|
||||||
Expression<?> value = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
Expression<?> value = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
ParserUtil.ensureReturnType(value, returnType);
|
ParserUtil.ensureReturnType(value, returnType);
|
||||||
|
|
||||||
String id = identifier.getContent();
|
String id = identifier.getContent();
|
||||||
@@ -339,7 +341,7 @@ public class Parser {
|
|||||||
while(tokenizer.hasNext()) {
|
while(tokenizer.hasNext()) {
|
||||||
Token token = tokenizer.current();
|
Token token = tokenizer.current();
|
||||||
if(token.isType(Token.Type.BLOCK_END)) break; // Stop parsing at block end.
|
if(token.isType(Token.Type.BLOCK_END)) break; // Stop parsing at block end.
|
||||||
Expression<?> expression = parseExpression(tokenizer, scopeBuilder);
|
Expression<?> expression = parseStatement(tokenizer, scopeBuilder);
|
||||||
if(expression != Function.NULL) {
|
if(expression != Function.NULL) {
|
||||||
expressions.add(expression);
|
expressions.add(expression);
|
||||||
}
|
}
|
||||||
@@ -348,7 +350,7 @@ public class Parser {
|
|||||||
return new Block(expressions, startPosition);
|
return new Block(expressions, startPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Expression<?> parseExpression(Tokenizer tokenizer, ScopeBuilder scopeBuilder) {
|
private Expression<?> parseStatement(Tokenizer tokenizer, ScopeBuilder scopeBuilder) {
|
||||||
Token token = tokenizer.current();
|
Token token = tokenizer.current();
|
||||||
|
|
||||||
// Include BREAK and CONTINUE as valid token types if scope is within a loop
|
// Include BREAK and CONTINUE as valid token types if scope is within a loop
|
||||||
@@ -365,7 +367,7 @@ public class Parser {
|
|||||||
case WHILE_LOOP -> parseWhileLoop(tokenizer, scopeBuilder);
|
case WHILE_LOOP -> parseWhileLoop(tokenizer, scopeBuilder);
|
||||||
case IDENTIFIER -> {
|
case IDENTIFIER -> {
|
||||||
if(scopeBuilder.contains(token.getContent())) yield parseAssignment(tokenizer, scopeBuilder); // Assume variable assignment
|
if(scopeBuilder.contains(token.getContent())) yield parseAssignment(tokenizer, scopeBuilder); // Assume variable assignment
|
||||||
else yield parseFunction(tokenizer, true, scopeBuilder);
|
else yield parseFunctionInvocation(tokenizer, true, scopeBuilder);
|
||||||
}
|
}
|
||||||
case NUMBER_VARIABLE, STRING_VARIABLE, BOOLEAN_VARIABLE -> parseVariableDeclaration(tokenizer, scopeBuilder);
|
case NUMBER_VARIABLE, STRING_VARIABLE, BOOLEAN_VARIABLE -> parseVariableDeclaration(tokenizer, scopeBuilder);
|
||||||
case RETURN -> new ReturnKeyword(tokenizer.consume().getPosition());
|
case RETURN -> new ReturnKeyword(tokenizer.consume().getPosition());
|
||||||
@@ -385,7 +387,7 @@ public class Parser {
|
|||||||
|
|
||||||
ParserUtil.ensureType(tokenizer.consume(), Token.Type.ASSIGNMENT);
|
ParserUtil.ensureType(tokenizer.consume(), Token.Type.ASSIGNMENT);
|
||||||
|
|
||||||
Expression<?> value = parseLogicMathExpression(tokenizer, true, scopeBuilder);
|
Expression<?> value = parseExpression(tokenizer, true, scopeBuilder);
|
||||||
|
|
||||||
String id = identifier.getContent();
|
String id = identifier.getContent();
|
||||||
|
|
||||||
@@ -401,7 +403,7 @@ public class Parser {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private Function<?> parseFunction(Tokenizer tokenizer, boolean fullStatement, ScopeBuilder scopeBuilder) {
|
private Function<?> parseFunctionInvocation(Tokenizer tokenizer, boolean fullStatement, ScopeBuilder scopeBuilder) {
|
||||||
Token identifier = tokenizer.consume();
|
Token identifier = tokenizer.consume();
|
||||||
ParserUtil.ensureType(identifier, Token.Type.IDENTIFIER); // First token must be identifier
|
ParserUtil.ensureType(identifier, Token.Type.IDENTIFIER); // First token must be identifier
|
||||||
|
|
||||||
@@ -442,7 +444,7 @@ public class Parser {
|
|||||||
List<Expression<?>> args = new ArrayList<>();
|
List<Expression<?>> args = new ArrayList<>();
|
||||||
|
|
||||||
while(!tokenizer.current().isType(Token.Type.GROUP_END)) {
|
while(!tokenizer.current().isType(Token.Type.GROUP_END)) {
|
||||||
args.add(parseLogicMathExpression(tokenizer, true, scopeBuilder));
|
args.add(parseExpression(tokenizer, true, scopeBuilder));
|
||||||
ParserUtil.ensureType(tokenizer.current(), Token.Type.SEPARATOR, Token.Type.GROUP_END);
|
ParserUtil.ensureType(tokenizer.current(), Token.Type.SEPARATOR, Token.Type.GROUP_END);
|
||||||
if(tokenizer.current().isType(Token.Type.SEPARATOR)) tokenizer.consume();
|
if(tokenizer.current().isType(Token.Type.SEPARATOR)) tokenizer.consume();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user