private void LazyLoadPath(VirtualForestNodePath path) { var transitionState = path.TransitionState; var completedParseNode = path.ForestNode; if (transitionState.NextTransition != null) { var virtualNode = new VirtualForestNode(Location, transitionState.NextTransition, completedParseNode); if (transitionState.Reduction.ParseNode == null) { AddUniqueFamily(virtualNode); } else { AddUniqueFamily(transitionState.Reduction.ParseNode, virtualNode); } } else if (transitionState.Reduction.ParseNode != null) { AddUniqueFamily(transitionState.Reduction.ParseNode, completedParseNode); } else { AddUniqueFamily(completedParseNode); } }
public void AddNewVirtualNode( VirtualForestNode virtualNode) { var hash = ComputeHashCode( virtualNode.Symbol, virtualNode.Origin, virtualNode.Location); _virtualNodes.Add(hash, virtualNode); }
public bool TryGetExistingVirtualNode( int location, ITransitionState transitionState, out VirtualForestNode node) { var targetState = transitionState.GetTargetState(); var hash = ComputeHashCode(targetState.DottedRule.Production.LeftHandSide, targetState.Origin, location); return(_virtualNodes.TryGetValue(hash, out node)); }
public bool TryGetExistingVirtualNode( int location, ITransitionState transitionState, out VirtualForestNode node) { var targetState = transitionState.GetTargetState(); var hash = ComputeHashCode(targetState.Production.LeftHandSide, targetState.Origin, location); return _virtualNodes.TryGetValue(hash, out node); }
private VirtualForestNode CreateVirtualParseNode(IState completed, int k, ITransitionState rootTransitionState) { VirtualForestNode virtualParseNode = null; if (!_nodeSet.TryGetExistingVirtualNode( k, rootTransitionState, out virtualParseNode)) { virtualParseNode = new VirtualForestNode(k, rootTransitionState, completed.ParseNode); _nodeSet.AddNewVirtualNode(virtualParseNode); } else { virtualParseNode.AddUniquePath( new VirtualForestNodePath(rootTransitionState, completed.ParseNode)); } return virtualParseNode; }
private void LazyLoadPath(VirtualForestNodePath path) { var transitionState = path.TransitionState; var completedParseNode = path.ForestNode; if (transitionState.NextTransition != null) { var virtualNode = new VirtualForestNode(Location, transitionState.NextTransition, completedParseNode); if (transitionState.Reduction.ParseNode == null) AddUniqueFamily(virtualNode); else AddUniqueFamily(transitionState.Reduction.ParseNode, virtualNode); } else if (transitionState.Reduction.ParseNode != null) { AddUniqueFamily(transitionState.Reduction.ParseNode, completedParseNode); } else { AddUniqueFamily(completedParseNode); } }