package nl.uva.polyql.utils;
import java.io.FileInputStream;
import java.io.IOException;
import nl.uva.polyql.antlr4.LineInfoListener;
import nl.uva.polyql.antlr4.QuestionnaireLexer;
import nl.uva.polyql.antlr4.QuestionnaireParser;
import nl.uva.polyql.ast.Form;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
public class ParserHelper {
/** The path to the resources folder */
public static final String RESOURCE_PATH = "res/";
/**
* Parses a file with QL and creates a form for it.
*
* @param filename
* The absolute or relative filename of the QL file
*
* @return The resulting form
*/
public static Form parseForm(final String filename) {
try {
final ANTLRInputStream input = new ANTLRInputStream(new FileInputStream(filename));
final QuestionnaireLexer lexer = new QuestionnaireLexer(input);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final QuestionnaireParser parser = new QuestionnaireParser(tokens);
parser.addParseListener(new LineInfoListener());
return parser.form().f;
} catch (final IOException ex) {
ex.printStackTrace();
return null;
}
}
/**
* Parses a file from the resources folder and creates a form for it.
*
* @param formname
* The name of the form excluding path and extension
*
* @return The resulting form
*/
public static Form parseResourceForm(final String formname) {
return parseForm(RESOURCE_PATH + formname + ".txt");
}
}