/// <summary> /// このパーサーのパースが成功したあと引数で指定した別のパーサーのパースを行う新しいパーサーを返します。 /// <para> /// 例えば<c>var p2 = p0.Then(p1); p2.Parse(...);</c>というコードがあったとき、 /// p0のパースが成功した場合は、引き続きp1のパースが実行されます。 /// p1が成功した場合はp2の結果も成功となります。p1が失敗した場合はp2の結果も失敗です。 /// p0が失敗した場合はp1は実行されず、p2の結果は失敗となります。 /// </para> /// </summary> /// <param name="self">レシーバー</param> /// <param name="another">別のパーサー</param> /// <returns>新しいパーサー</returns> public static Parser <Tuple <T1, T2, T3> > Then <T1, T2, T3>(this Parser <Tuple <T1, T2> > self, Parser <T3> another) { return(TripleParser <T1, T2, T3> .Create(self, another)); }
/// <summary> /// このパーサーのパースが成功したあと引数で指定した別のパーサーのパースを行う新しいパーサーを返します。 /// <para> /// 例えば<c>var p2 = p0.Then(p1); p2.Parse(...);</c>というコードがあったとき、 /// p0のパースが成功した場合は、引き続きp1のパースが実行されます。 /// p1が成功した場合はp2の結果も成功となります。p1が失敗した場合はp2の結果も失敗です。 /// p0が失敗した場合はp1は実行されず、p2の結果は失敗となります。 /// </para> /// </summary> /// <param name="another">別のパーサー</param> /// <returns>新しいパーサー</returns> public Parser <Tuple <T, T2, T3> > Then <T2, T3>(Parser <Tuple <T2, T3> > another) { return(TripleParser <T, T2, T3> .Create(this, another)); }