public static HashSet <string> GetSurroundingPaths( this CstNode node, HashSet <CstNode> surroundingNodes, FeatureExtractor extractor, CstNode outermostNode) { var path = node.Name; var paths = new HashSet <string>(); var ancestors = new Dictionary <CstNode, string> { { node, node.Name } }; paths.Add(node.Name); //paths.Add("'" + extractor.GetToken(node)); var ancestor = node.Ancestors().FirstOrDefault(a => a.Children().Count() > 1); if (surroundingNodes.Contains(ancestor)) { extractor.IsInner = false; var originalNode = node; path = node.Name + node.RuleId; while ((node = node.Parent) != outermostNode) { ancestors.Add(node, path + "<" + node.Name); path = path + "<" + node.Name + node.RuleId; paths.Add(path); } path = path + "<" + node.Name; // must not have RuleId paths.Add(path); var index = 0; foreach (var tokenNode in originalNode.PreviousTokenNodes(node).Where(IsMeaningfulIdentifier)) { if (!surroundingNodes.Contains(tokenNode)) { break; } paths.Add("'-" + extractor.GetToken(tokenNode)); index++; } extractor.TokenLeft = Math.Max(extractor.TokenLeft, index); index = 0; foreach (var tokenNode in originalNode.NextTokenNodes(node).Where(IsMeaningfulIdentifier)) { if (!surroundingNodes.Contains(tokenNode)) { break; } paths.Add("'+" + extractor.GetToken(tokenNode)); index++; } extractor.TokenRight = Math.Max(extractor.TokenRight, index); } GetSurroundingPaths(node, path, surroundingNodes, extractor, paths, ancestors); return(paths); }
public bool IsChild(CstNode e, Func<CstNode, bool> isCatchBlock) { return e.Ancestors().Any(isCatchBlock); }
public bool IsChild(CstNode e, Func <CstNode, bool> isCatchBlock) { return(e.Ancestors().Any(isCatchBlock)); }