package me.tomassetti.turin.parser;
import me.tomassetti.parser.antlr.TurinLexer;
import me.tomassetti.parser.antlr.TurinParser;
import org.antlr.v4.runtime.*;
import java.io.IOException;
import java.io.InputStream;
public class InternalParser {
public TurinParser.TurinFileContext produceParseTree(InputStream inputStream) throws IOException {
CharStream charStream = new ANTLRInputStream(inputStream);
TurinLexer l = new TurinLexer(charStream);
TurinParser p = new TurinParser(new CommonTokenStream(l));
p.addErrorListener(new BaseErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
throw new IllegalStateException("failed to parse at L " + line + ", C " + charPositionInLine + " due to " + msg, e);
}
});
TurinParser.TurinFileContext turinFileContext = p.turinFile();
if (l._mode != 0) {
throw new RuntimeException("Lexical error");
}
return turinFileContext;
}
}