/* Generated By:JJTree: Do not edit this line. QASTatom.java Version 4.3 */ /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=false,TRACK_TOKENS=false,NODE_PREFIX=QAST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package querying.parsing.query; import java.util.ArrayList; import java.util.HashSet; import utilities.Pair; import warnings.StringListUtils; public class QASTatom extends SimpleNode { AtomType type; public QASTatom(int id) { super(id); type = AtomType.nonRelational; } public QASTatom(QueryParser p, int id) { super(p, id); type = AtomType.nonRelational; } public QASTatom(QASTterm term1, QASTterm term2) { super(QueryParserTreeConstants.JJTATOM); type = AtomType.relational; this.jjtAddChild(term1, 0); this.jjtAddChild(term2, 1); } public String getName() { QASTpredSymbol predS = (QASTpredSymbol) this.jjtGetChild(0); return predS.image; } public ArrayList<String> getArguments() { ArrayList<String> arguments = new ArrayList<String>(); if(this.jjtGetNumChildren()<2) { return null; } QASTtermList termList = (QASTtermList) this.jjtGetChild(1); for (int i = 0; i < termList.jjtGetNumChildren(); i++) { QASTterm term = (QASTterm) termList.jjtGetChild(i); arguments.add(term.toString()); } return arguments; } public String toString() { if (type == AtomType.nonRelational) if(this.jjtGetNumChildren()==1) return getName(); else return getName() + "(" + StringListUtils.getSeparatedList(getArguments(), ",") + ")"; else return ((SimpleNode) this.jjtGetChild(0)).toString() + "=" + ((SimpleNode) this.jjtGetChild(1)).toString(); } final private static String newVarPrefix = "VAR_"; private static int newVarId = 0; private String getUniqueVariable(HashSet<String> usedVariables) { while (usedVariables.contains(newVarPrefix + newVarId)) { ++newVarId; } usedVariables.add(newVarPrefix + newVarId); return newVarPrefix + newVarId; } public Pair<QASTatom, ArrayList<QASTatom>> moveOutArithmetics() { HashSet<String> usedVariables = this.fetchVariables(); ArrayList<QASTatom> movedOutAtoms = new ArrayList<QASTatom>(); if(this.jjtGetNumChildren()==1) return new Pair<QASTatom,ArrayList<QASTatom>>(this,movedOutAtoms); QASTtermList termList = (QASTtermList) this.jjtGetChild(1); for (int i = 0; i < termList.jjtGetNumChildren(); i++) { QASTterm term = (QASTterm) termList.jjtGetChild(i); String termStr = term.toString(); if (termStr.indexOf('/') != -1 || termStr.indexOf('+') != -1 || termStr.indexOf('*') != -1 || termStr.indexOf('-') != -1) { String varName = getUniqueVariable(usedVariables); QASTterm var = QASTterm.createTermFromVariable(varName); QASTatom newAtom = new QASTatom(var, term); movedOutAtoms.add(newAtom); termList.children[i] = var; } } return new Pair<QASTatom, ArrayList<QASTatom>>(this, movedOutAtoms); } } /* * JavaCC - OriginalChecksum=5521b04e7517df086398fd8ed3d519d2 (do not edit this * line) */