/// <summary>
        /// パース本処理後にロギングを行い、呼び出しスタックを更新します。
        /// </summary>
        /// <param name="result"></param>
        internal void PostParse <T>(ResultCore <T> result)
        {
            // 呼び出し階層の記録がOFFの場合は処理を直ちに終了
            if (_nostack)
            {
                return;
            }

            // アペンダーが存在しない場合は処理を直ちに終了
            if (_nolog)
            {
                _stack?.Pop();
                return;
            }

            // パース終了を示すログメッセージを作成してアペンダーをコール
            var buff = MakeLabel('-');

            if (result.Successful)
            {
                buff.Append("Success(").Append(result.Capture);
            }
            else
            {
                buff.Append("Failure(").Append(result.Message);
            }
            if (!result.CanBacktrack)
            {
                buff.Append(", cut");
            }
            _logAppender(buff.Append(')').ToString());

            // スタックから直近のパーサー名を削除
            _stack.Pop();
        }
Exemple #2
0
 /// <summary>
 /// パース開始と終了の文字位置の情報を持たない<see cref="ResultCore"/>を返します。
 /// </summary>
 /// <returns></returns>
 public ResultCore DetachPosition()
 {
     if (Successful)
     {
         return(ResultCore.OfSuccess(CanBacktrack));
     }
     else
     {
         return(ResultCore.OfFailure(_message, CanBacktrack));
     }
 }
 /// <summary>
 /// パース失敗を表す<see cref="ResultCore"/>インスタンスを生成します。
 /// </summary>
 /// <param name="message">パース失敗の理由を示すメッセージ</param>
 /// <param name="canBacktrack">直近の<c>|</c>や<c>Or(...)</c>を
 /// 起点とするバックトラックを有効にするかどうか(デフォルトは<c>true</c>で、バックトラックは有効)</param>
 /// <returns></returns>
 protected ResultCore Failure(string message, bool canBacktrack)
 {
     return(ResultCore.OfFailure(message, canBacktrack));
 }
 /// <summary>
 /// パース失敗を表す<see cref="ResultCore"/>インスタンスを生成します。
 /// </summary>
 /// <param name="message">パース失敗の理由を示すメッセージ</param>
 /// <returns></returns>
 protected ResultCore Failure(string message)
 {
     return(ResultCore.OfFailure(message, true));
 }
 /// <summary>
 /// パース成功を表す<see cref="ResultCore"/>インスタンスを生成します。
 /// </summary>
 /// <param name="canBacktrack">直近の<c>|</c>や<c>Or(...)</c>を
 /// 起点とするバックトラックを有効にするかどうか(デフォルトは<c>true</c>で、バックトラックは有効)</param>
 /// <returns></returns>
 protected ResultCore Success(bool canBacktrack)
 {
     return(ResultCore.OfSuccess(canBacktrack));
 }
 /// <summary>
 /// パース成功を表す<see cref="ResultCore"/>インスタンスを生成します。
 /// </summary>
 /// <returns></returns>
 protected ResultCore Success()
 {
     return(ResultCore.OfSuccess(true));
 }
Exemple #7
0
 /// <summary>
 /// パース成功を表す<see cref="ResultCore{T}"/>インスタンスを生成します。
 /// </summary>
 /// <param name="value"></param>
 /// <param name="canBacktrack">直近の<c>|</c>や<c>Or(...)</c>を
 /// 起点とするバックトラックを有効にするかどうか(デフォルトは<c>true</c>で、バックトラックは有効)</param>
 /// <returns></returns>
 protected ResultCore <T> Success(T value, bool canBacktrack)
 {
     return(ResultCore <T> .OfSuccess(value, canBacktrack));
 }
Exemple #8
0
 /// <summary>
 /// パース成功を表す<see cref="ResultCore{T}"/>インスタンスを生成します。
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 protected ResultCore <T> Success(T value)
 {
     return(ResultCore <T> .OfSuccess(value, true));
 }