package openmods.calc.parsing;
import com.google.common.base.Preconditions;
import openmods.calc.IExecutable;
public abstract class BracketPostfixCompilerStateBase<E> extends SimplePostfixCompilerState<E> {
private final String openingBracket;
private boolean isFinished;
public BracketPostfixCompilerStateBase(IExecutableListBuilder<E> builder, String openingBracket) {
super(builder);
this.openingBracket = openingBracket;
}
@Override
public Result acceptToken(Token token) {
if (token.type == TokenType.RIGHT_BRACKET) {
TokenUtils.checkIsValidBracketPair(openingBracket, token.value);
isFinished = true;
return Result.ACCEPTED_AND_FINISHED;
}
return processBracketContent(token);
}
protected Result processBracketContent(Token token) {
return super.acceptToken(token);
}
@Override
public IExecutable<E> exit() {
Preconditions.checkState(isFinished, "Missing closing bracket");
final IExecutable<E> compiledExpr = super.exit();
return processCompiledBracket(compiledExpr);
}
protected abstract IExecutable<E> processCompiledBracket(IExecutable<E> compiledExpr);
}