package openmods.calc.parsing;
import com.google.common.collect.Lists;
import com.google.common.collect.PeekingIterator;
import java.util.List;
import openmods.calc.ExecutableList;
import openmods.calc.IExecutable;
public class AstCompiler<E> implements ITokenStreamCompiler<E> {
private final ICompilerState<E> initialCompilerState;
public AstCompiler(ICompilerState<E> initialCompilerState) {
this.initialCompilerState = initialCompilerState;
}
@Override
public IExecutable<E> compile(PeekingIterator<Token> input) {
final IAstParser<E> parser = initialCompilerState.getParser();
final IExprNode<E> rootNode = parser.parse(initialCompilerState, input);
final List<IExecutable<E>> output = Lists.newArrayList();
rootNode.flatten(output);
return ExecutableList.wrap(output);
}
}