CFGLib.Parsers.Forests.ForestVisitors.GraphVisitors.GraphVisitor.Visit C# (CSharp) Méthode

Visit() public méthode

public Visit ( ForestInternal node ) : bool
node ForestInternal
Résultat bool
		public override bool Visit(ForestInternal node) {
			if (_visited.Contains(node.InternalNode)) {
				return true;
			}
			_visited.Add(node.InternalNode);

			var currentNode = _currentNode;

			for (int i = 0; i < node.Options.Count; i++) {
				var option = node.Options[i];
				string optionId = _ids[node.InternalNode] + "-" + i;
				var optionNode = new ChildNode(option.Production.Rhs, node.StartPosition, node.EndPosition, optionId, currentNode.Rank + 1);

				_graph.AddEdge(currentNode, optionNode, option.Production);
				foreach (var children in option.Children()) {
					foreach (var child in children) {
						int childSeenId;
						if (child is ForestLeaf) {
							childSeenId = _id++;
						} else {
							var internalChild = (ForestInternal)child;
							if (!_ids.TryGetValue(internalChild.InternalNode, out childSeenId)) {
								childSeenId = _id++;
								_ids[internalChild.InternalNode] = childSeenId;
							}
						}

						string childId = "" + childSeenId;
						var childNode = new ForestNodeNode(child, childId, optionNode.Rank + 1);
						_graph.AddEdge(optionNode, childNode);
						_currentNode = childNode;
						child.Accept(this);
						// child.GetGraphHelper(g, childNode, visited, ids, ref id);
					}
				}
			}
			return true;
		}