package org.python.antlr;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.Token;
import org.python.antlr.base.mod;
public class BaseParser {
protected final CharStream charStream;
@Deprecated
protected final boolean partial;
protected final String filename;
protected final String encoding;
protected ErrorHandler errorHandler = new FailFastHandler();
public BaseParser(CharStream stream, String filename, String encoding) {
this(stream, filename, encoding, false);
}
@Deprecated
public BaseParser(CharStream stream, String filename, String encoding, boolean partial) {
this.charStream = stream;
this.filename = filename;
this.encoding = encoding;
this.partial = partial;
}
public void setAntlrErrorHandler(ErrorHandler eh) {
this.errorHandler = eh;
}
protected PythonParser setupParser(boolean single) {
PythonLexer lexer = new PythonLexer(charStream);
lexer.setErrorHandler(errorHandler);
lexer.single = single;
CommonTokenStream tokens = new CommonTokenStream(lexer);
PythonTokenSource indentedSource = new PythonTokenSource(tokens, filename, single);
tokens = new CommonTokenStream(indentedSource);
PythonParser parser = new PythonParser(tokens, encoding);
parser.setErrorHandler(errorHandler);
parser.setTreeAdaptor(new PythonTreeAdaptor());
return parser;
}
public mod parseExpression() {
mod tree = null;
PythonParser parser = setupParser(false);
try {
PythonParser.eval_input_return r = parser.eval_input();
tree = (mod)r.tree;
} catch (RecognitionException e) {
//XXX: this can't happen. Need to strip the throws from antlr
// generated code.
}
return tree;
}
public mod parseInteractive() {
mod tree = null;
PythonParser parser = setupParser(true);
try {
PythonParser.single_input_return r = parser.single_input();
tree = (mod)r.tree;
} catch (RecognitionException e) {
//I am only throwing ParseExceptions, but "throws RecognitionException" still gets
//into the generated code.
System.err.println("FIXME: pretty sure this can't happen -- but needs to be checked");
}
return tree;
}
public mod parseModule() {
mod tree = null;
PythonParser parser = setupParser(false);
try {
PythonParser.file_input_return r = parser.file_input();
tree = (mod)r.tree;
} catch (RecognitionException e) {
//XXX: this can't happen. Need to strip the throws from antlr
// generated code.
}
return tree;
}
}