private PqlPatternNode Pattern() { PqlToken id = currentToken; PqlSynonym synonym = new PqlSynonym(id); Eat(PqlTokenType.IDENT); Eat(PqlTokenType.LPAREN); PqlArgument varRef = Ref(); Eat(PqlTokenType.COMMA); PqlExpr expr = null; if (currentToken.Type == PqlTokenType.STRING) { expr = Expr(true); } else if (currentToken.Type == PqlTokenType.FLOOR) { Eat(PqlTokenType.FLOOR); if (currentToken.Type == PqlTokenType.STRING) { expr = Expr(false); Eat(PqlTokenType.FLOOR); } else if (currentToken.Type == PqlTokenType.COMMA) { Eat(PqlTokenType.COMMA); Eat(PqlTokenType.FLOOR); } } Eat(PqlTokenType.RPAREN); return(new PqlPatternNode(synonym, varRef, expr)); }
private PqlCompare AttrCompare() { PqlAttrRef left = AttrRef(); Eat(PqlTokenType.EQ); PqlArgument right = Ref(); return(new PqlCompare(left, right)); }
private PqlAffectsT AffectsT() { Eat(PqlTokenType.AFFECTST); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlAffectsT(PqlTokenType.AFFECTST, leftRef, rightRef)); }
private PqlNextT NextT() { Eat(PqlTokenType.NEXTT); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlNextT(PqlTokenType.NEXTT, leftRef, rightRef)); }
private PqlUses Uses() { Eat(PqlTokenType.USES); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlUses(PqlTokenType.USES, leftRef, rightRef)); }
private PqlModifies Modifies() { Eat(PqlTokenType.MODIFIES); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlModifies(PqlTokenType.MODIFIES, leftRef, rightRef)); }
private PqlFollowsT FollowsT() { Eat(PqlTokenType.FOLLOWST); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlFollowsT(PqlTokenType.FOLLOWST, leftRef, rightRef)); }
private PqlCallsT CallsT() { Eat(PqlTokenType.CALLST); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlCallsT(PqlTokenType.CALLST, leftRef, rightRef)); }
private PqlParent Parent() { Eat(PqlTokenType.PARENT); Eat(PqlTokenType.LPAREN); PqlArgument leftRef = Ref(); Eat(PqlTokenType.COMMA); PqlArgument rightRef = Ref(); Eat(PqlTokenType.RPAREN); return(new PqlParent(PqlTokenType.PARENT, leftRef, rightRef)); }
private void ProcessContainerPattern(IProgramKnowledgeBase pkb, BindingsManager bindingsManager) { PqlArgument leftRef = VarRef; if (leftRef is PqlString) { Variable variable = pkb.Variables.GetVariableByName((leftRef as PqlString).Value); for (int i = 0; i < Args.GetSize(); i++) { Container container = Args.GetEntityByIndex(i) as Container; if (!container.Condition.Name.Equals(variable.Name)) { bindingsManager.RemoveBoundEntity(container, Args); i--; } } } }
private void ProcessAssignPattern(IProgramKnowledgeBase pkb, BindingsManager bindingsManager) { PqlArgument leftRef = VarRef; PqlExpr rightRef = Expr; if (leftRef is PqlString) { Variable variable = pkb.Variables.GetVariableByName((leftRef as PqlString).Value); for (int i = 0; i < Args.GetSize(); i++) { Assign assignment = Args.GetEntityByIndex(i) as Assign; if (assignment == null || !assignment.Left.Name.Equals(variable.Name)) { bindingsManager.RemoveBoundEntity(assignment, Args); i--; } } } if (rightRef != null) { for (int i = 0; i < Args.GetSize(); i++) { Assign assignment = Args.GetEntityByIndex(i) as Assign; if (assignment == null) { Args.RemoveEntity(assignment); i--; } else { bool match = Expr.IsExact ? CompareTrees(assignment.Right, Expr.ExprTree, true) : FindTree(assignment.Right, Expr.ExprTree); if (!match) { bindingsManager.RemoveBoundEntity(assignment, Args); i--; } } } } }
public PqlPatternNode(PqlSynonym syn, PqlArgument varRef, PqlExpr expr) { Synonym = syn; VarRef = varRef; Expr = expr; }
public PqlParentT(PqlTokenType relationType, PqlArgument leftRef, PqlArgument rightRef) : base(relationType, leftRef, rightRef) { }
public PqlFollows(PqlTokenType relationType, PqlArgument leftRef, PqlArgument rightRef) : base(relationType, leftRef, rightRef) { }
public PqlRelation(PqlTokenType relationType, PqlArgument leftRef, PqlArgument rightRef) { RelationType = relationType; LeftRef = leftRef; RightRef = rightRef; }
public PqlCompare(PqlAttrRef leftRef, PqlArgument rightRef) { LeftRef = leftRef; RightRef = rightRef; }