コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: JavaExperiment.cs プロジェクト: RainsSoft/Code2Xml
 public bool IsChild(CstNode e, Func<CstNode, bool> isCatchBlock) {
     return e.Ancestors().Any(isCatchBlock);
 }
コード例 #3
0
 public bool IsChild(CstNode e, Func <CstNode, bool> isCatchBlock)
 {
     return(e.Ancestors().Any(isCatchBlock));
 }