示例#1
0
        protected override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
        {
            CPlusPlusModifierToken o = other as CPlusPlusModifierToken;

            return(o != null && this.modifier == o.modifier);
        }
示例#2
0
 public virtual bool DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo)
 {
     return(DoMatch(pos, match));
 }
示例#3
0
        public static bool DoMatchCollection(Role role, INode firstPatternChild, INode firstOtherChild, Match match)
        {
            BacktrackingInfo      backtrackingInfo = new BacktrackingInfo();
            Stack <INode>         patternStack     = new Stack <INode>();
            Stack <PossibleMatch> stack            = backtrackingInfo.backtrackingStack;

            patternStack.Push(firstPatternChild);
            stack.Push(new PossibleMatch(firstOtherChild, match.CheckPoint()));
            while (stack.Count > 0)
            {
                INode cur1 = patternStack.Pop();
                INode cur2 = stack.Peek().NextOther;
                match.RestoreCheckPoint(stack.Pop().Checkpoint);
                bool success = true;
                while (cur1 != null && success)
                {
                    while (cur1 != null && cur1.Role != role)
                    {
                        cur1 = cur1.NextSibling;
                    }
                    while (cur2 != null && cur2.Role != role)
                    {
                        cur2 = cur2.NextSibling;
                    }
                    if (cur1 == null)
                    {
                        break;
                    }

                    Debug.Assert(stack.Count == patternStack.Count);
                    success = cur1.DoMatchCollection(role, cur2, match, backtrackingInfo);
                    Debug.Assert(stack.Count >= patternStack.Count);
                    while (stack.Count > patternStack.Count)
                    {
                        patternStack.Push(cur1.NextSibling);
                    }

                    cur1 = cur1.NextSibling;
                    if (cur2 != null)
                    {
                        cur2 = cur2.NextSibling;
                    }
                }
                while (cur2 != null && cur2.Role != role)
                {
                    cur2 = cur2.NextSibling;
                }
                if (success && cur2 == null)
                {
                    return(true);
                }
            }
            return(false);
        }
示例#4
0
 public abstract bool DoMatch(INode other, Match match);