Implement ignorable functions to parser

This commit is contained in:
Astrashh
2021-05-11 15:48:28 +10:00
parent 596ac1c389
commit 1209842bcd
2 changed files with 35 additions and 1 deletions

View File

@@ -52,6 +52,7 @@ import java.util.Map;
public class Parser {
private final String data;
private final Map<String, FunctionBuilder<? extends Function<?>>> functions = new HashMap<>();
private final List<String> ignoredFunctions = new GlueList<>();
private String id;
@@ -64,6 +65,11 @@ public class Parser {
return this;
}
public Parser ignoreFunction(String name) {
ignoredFunctions.add(name);
return this;
}
public String getID() {
return id;
}
@@ -339,7 +345,10 @@ public class Parser {
while(tokens.hasNext()) {
Token token = tokens.get();
if(token.getType().equals(Token.Type.BLOCK_END)) break; // Stop parsing at block end.
parsedItems.add(parseItem(tokens, parsedVariables, loop));
Item<?> parsedItem = parseItem(tokens, parsedVariables, loop);
if (parsedItem != Function.NULL) {
parsedItems.add(parsedItem);
}
if(tokens.hasNext() && !token.isLoopLike()) ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END);
}
return new Block(parsedItems, first.getPosition());
@@ -398,6 +407,10 @@ public class Parser {
ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end
if(fullStatement) ParserUtil.checkType(tokens.get(), Token.Type.STATEMENT_END);
if(ignoredFunctions.contains(identifier.getContent())) {
return Function.NULL;
}
if(functions.containsKey(identifier.getContent())) {
FunctionBuilder<?> builder = functions.get(identifier.getContent());

View File

@@ -1,6 +1,27 @@
package com.dfsek.terra.api.structures.parser.lang.functions;
import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments;
import com.dfsek.terra.api.structures.parser.lang.Returnable;
import com.dfsek.terra.api.structures.parser.lang.variables.Variable;
import com.dfsek.terra.api.structures.tokenizer.Position;
import java.util.Map;
public interface Function<T> extends Returnable<T> {
Function<?> NULL = new Function<Object>() {
@Override
public ReturnType returnType() {
return null;
}
@Override
public Object apply(ImplementationArguments implementationArguments, Map<String, Variable<?>> variableMap) {
return null;
}
@Override
public Position getPosition() {
return null;
}
};
}