mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 22:31:52 +00:00
Implement ignorable functions to parser
This commit is contained in:
@@ -52,6 +52,7 @@ import java.util.Map;
|
|||||||
public class Parser {
|
public class Parser {
|
||||||
private final String data;
|
private final String data;
|
||||||
private final Map<String, FunctionBuilder<? extends Function<?>>> functions = new HashMap<>();
|
private final Map<String, FunctionBuilder<? extends Function<?>>> functions = new HashMap<>();
|
||||||
|
private final List<String> ignoredFunctions = new GlueList<>();
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
@@ -64,6 +65,11 @@ public class Parser {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Parser ignoreFunction(String name) {
|
||||||
|
ignoredFunctions.add(name);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public String getID() {
|
public String getID() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@@ -339,7 +345,10 @@ public class Parser {
|
|||||||
while(tokens.hasNext()) {
|
while(tokens.hasNext()) {
|
||||||
Token token = tokens.get();
|
Token token = tokens.get();
|
||||||
if(token.getType().equals(Token.Type.BLOCK_END)) break; // Stop parsing at block end.
|
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);
|
if(tokens.hasNext() && !token.isLoopLike()) ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END);
|
||||||
}
|
}
|
||||||
return new Block(parsedItems, first.getPosition());
|
return new Block(parsedItems, first.getPosition());
|
||||||
@@ -398,6 +407,10 @@ public class Parser {
|
|||||||
ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end
|
ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end
|
||||||
|
|
||||||
if(fullStatement) ParserUtil.checkType(tokens.get(), Token.Type.STATEMENT_END);
|
if(fullStatement) ParserUtil.checkType(tokens.get(), Token.Type.STATEMENT_END);
|
||||||
|
|
||||||
|
if(ignoredFunctions.contains(identifier.getContent())) {
|
||||||
|
return Function.NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if(functions.containsKey(identifier.getContent())) {
|
if(functions.containsKey(identifier.getContent())) {
|
||||||
FunctionBuilder<?> builder = functions.get(identifier.getContent());
|
FunctionBuilder<?> builder = functions.get(identifier.getContent());
|
||||||
|
|||||||
+21
@@ -1,6 +1,27 @@
|
|||||||
package com.dfsek.terra.api.structures.parser.lang.functions;
|
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.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> {
|
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;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user