/** * Author: Georg Hofferek <georg.hofferek@iaik.tugraz.at> */ package at.iaik.suraq.parser; import java.io.BufferedReader; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import at.iaik.suraq.exceptions.ParseError; import at.iaik.suraq.sexp.SExpression; import at.iaik.suraq.smtlib.formula.ArrayVariable; import at.iaik.suraq.smtlib.formula.DomainVariable; import at.iaik.suraq.smtlib.formula.Formula; import at.iaik.suraq.smtlib.formula.PropositionalVariable; import at.iaik.suraq.smtlib.formula.UninterpretedFunction; /** * Used for parsing (single) formulas, e.g, after simplification. * * @author Georg Hofferek <georg.hofferek@iaik.tugraz.at> * */ /** * @author Georg Hofferek <georg.hofferek@iaik.tugraz.at> * */ public class FormulaParser extends SMTLibParser { private Formula parsedFormula; private static final long serialVersionUID = 1L; /** * * Constructs a new <code>FormulaParser</code>. * * @param propVars * @param domainVars * @param arrayVars * @param uninterpretedFunctions * @param input * @throws IOException * @throws ParseError */ public FormulaParser(Collection<? extends PropositionalVariable> propVars, Collection<? extends DomainVariable> domainVars, Collection<? extends ArrayVariable> arrayVars, Collection<? extends UninterpretedFunction> uninterpretedFunctions, BufferedReader input) throws IOException, ParseError { this.arrayVariables = new HashSet<ArrayVariable>(arrayVars); this.boolVariables = new HashSet<PropositionalVariable>(propVars); this.domainVariables = new HashSet<DomainVariable>(domainVars); this.functions = new HashSet<UninterpretedFunction>( uninterpretedFunctions); SExpParser sExpParser = new SExpParser(input); sExpParser.parse(); assert (sExpParser.parsingSuccessfull); SExpression expression = sExpParser.getRootExpr(); if (expression.getChildren().size() == 1) this.rootExpr = sExpParser.getRootExpr().getChildren().get(0); else this.rootExpr = sExpParser.getRootExpr(); } /** * @see at.iaik.suraq.parser.Parser#parse() */ @Override public void parse() throws ParseError { parsedFormula = this.parseFormulaBody(rootExpr); } /** * @return the <code>parsedFormula</code> */ public Formula getParsedFormula() { return parsedFormula; } }