public static IEnumerable <CstNode> GetUppermostNodesByNames(CstNode cst, ISet <string> nodeNames)
 {
     return(cst.DescendantsAndSelf()
            .Where(node => nodeNames.Contains(node.Name))
            .Where(node => node.AncestorsWithSingleChild()
                   .All(ancestor => !nodeNames.Contains(ancestor.Name))));
 }
Example #2
0
 public IEnumerable<CstNode> ExtractElements(CstNode ast) {
     foreach (var nameAndRules in FilterDictionary) {
         var elements = ast.DescendantsAndSelf(nameAndRules.Key);
         var rules = nameAndRules.Value;
         var results = elements.Where(e => rules.All(rule => rule.IsAcceptable(e)));
         foreach (var result in results) {
             yield return result;
         }
     }
 }
Example #3
0
 public IEnumerable <CstNode> ExtractElements(CstNode ast)
 {
     foreach (var nameAndRules in FilterDictionary)
     {
         var elements = ast.DescendantsAndSelf(nameAndRules.Key);
         var rules    = nameAndRules.Value;
         var results  = elements.Where(e => rules.All(rule => rule.IsAcceptable(e)));
         foreach (var result in results)
         {
             yield return(result);
         }
     }
 }
Example #4
0
        /// <summary>
        /// Find the most inner element which includes this range from the specified CstNode instance.
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        public CstNode FindInnermostNode(CstNode root)
        {
            CstNode lastElement = null;

            foreach (var elem in root.DescendantsAndSelf())
            {
                var pos = Locate(elem);
                if (pos.Contains(this))
                {
                    lastElement = elem;
                }
                else if (EndLocation <= pos.StartLocation)
                {
                    break;
                }
            }
            return(lastElement);
        }
Example #5
0
 protected IEnumerable <CstNode> GetAllElements(CstNode cst, ISet <string> elementNames)
 {
     return(cst.DescendantsAndSelf()
            .Where(e => elementNames.Contains(e.Name)));
 }
Example #6
0
 protected IEnumerable<CstNode> GetAllElements(CstNode cst, ISet<string> elementNames) {
     return cst.DescendantsAndSelf()
             .Where(e => elementNames.Contains(e.Name));
 }
	    public static IEnumerable<CstNode> GetUppermostNodesByNames(CstNode cst, ISet<string> nodeNames) {
		    return cst.DescendantsAndSelf()
				    .Where(node => nodeNames.Contains(node.Name))
				    .Where(node => node.AncestorsWithSingleChild()
						    .All(ancestor => !nodeNames.Contains(ancestor.Name)));
	    }