/// <summary> /// Move on stack of tokens while the specified predicate is true /// </summary> /// <param name="t"> 1st token </param> /// <param name="tokens"> stack with 2nd token </param> /// <param name="pr"></param> /// <returns></returns> public static List <IToken> MoveWhile(IToken t, Stack <IToken> tokens, IPredicateOf2 <IToken, IToken> pr) { List <IToken> result = new List <IToken>(); while (Check(t, tokens, pr)) { result.Add(tokens.Pop()); } return(result); }
/// <summary> /// Defines trueness of the specified predicate towards /// two specific tokens /// </summary> /// <param name="t1"> 1st token </param> /// <param name="tokens"> stack with 2nd token on top </param> /// <param name="pr"></param> /// <returns></returns> public static bool Check(IToken t1, Stack <IToken> tokens, IPredicateOf2 <IToken, IToken> pr) { return(tokens.Count != 0 && pr.Execute(t1, tokens.Peek())); }