package openmods.calc.parsing; import com.google.common.base.Preconditions; import openmods.calc.IExecutable; public abstract class SingleTokenPostfixCompilerState<E> implements IPostfixCompilerState<E> { private static class RejectToken extends RuntimeException { private static final long serialVersionUID = 4788201874529404099L; } private IExecutable<E> result; protected abstract IExecutable<E> parseToken(Token token); protected IExecutable<E> rejectToken() { throw new RejectToken(); } @Override public Result acceptToken(Token token) { Preconditions.checkState(result == null); try { result = parseToken(token); return Result.ACCEPTED_AND_FINISHED; } catch (RejectToken e) { return Result.REJECTED; } } @Override public Result acceptExecutable(IExecutable<E> executable) { return Result.REJECTED; } @Override public IExecutable<E> exit() { Preconditions.checkState(result != null); return result; } }