<commit_before>using System;
using System.Linq;
using static ParsecSharp.Parser;
using static ParsecSharp.Text;

namespace ParsecSharp.Examples
{
    // 逆ポーランド記法の式をパーサで計算してみるネタ
    public static class ReversePolishCalculator
    {
        // 整数または小数にマッチし、doubleにして返す
        private static readonly Parser<char, double> num =
            Optional(Char('-'), '+')
                .Append(Many1(Digit()))
                .Append(Optional(Char('.').Append(Many1(Digit())), Enumerable.Empty<char>()))
                .ToStr().Map(double.Parse);

        // 四則演算子にマッチし、二項演算関数にマップ
        private static readonly Parser<char, Func<double, double, double>> op =
            Choice(
                Char('+').Map(_ => (Func<double, double, double>)((x, y) => x + y)),
                Char('-').Map(_ => (Func<double, double, double>)((x, y) => x - y)),
                Char('*').Map(_ => (Func<double, double, double>)((x, y) => x * y)),
                Char('/').Map(_ => (Func<double, double, double>)((x, y) => x / y)));

        // 各要素間のデリミタ、今回は一文字空白にハードコード
        private static readonly Parser<char, Unit> delimiter =
            WhiteSpace().Ignore();

        // 式を表す再帰実行パーサ
        // 左再帰の定義: expr = expr expr op / num
        // 左再帰の除去: expr = num *( expr op )
        private static readonly Parser<char, double> expr =
            num.Chain(x =>
             from _ in delimiter
                           from y in expr
                           from __ in delimiter
                           from func in op
                           select func(x, y));

        // パーサの実行
        public static Result<char, double> Parse(string source)
            => expr.End().Parse(source);
    }
}<commit_msg>fix Examples<commit_after>using System;
using System.Linq;
using static ParsecSharp.Parser;
using static ParsecSharp.Text;

namespace ParsecSharp.Examples
{
    // 逆ポーランド記法の式をパーサで計算してみるネタ
    public static class ReversePolishCalculator
    {
        // 整数または小数にマッチし、doubleにして返す
        private static readonly Parser<char, double> num =
            Optional(Char('-'), '+')
                .Append(Many1(Digit()))
                .Append(Optional(Char('.').Append(Many1(Digit())), Enumerable.Empty<char>()))
                .ToStr().Map(double.Parse);

        // 四則演算子にマッチし、二項演算関数にマップ
        private static readonly Parser<char, Func<double, double, double>> op =
            Choice(
                Char('+').Map(_ => (Func<double, double, double>)((x, y) => x + y)),
                Char('-').Map(_ => (Func<double, double, double>)((x, y) => x - y)),
                Char('*').Map(_ => (Func<double, double, double>)((x, y) => x * y)),
                Char('/').Map(_ => (Func<double, double, double>)((x, y) => x / y)));

        // 各要素間のデリミタ、今回は一文字空白にハードコード
        private static readonly Parser<char, Unit> delimiter =
            WhiteSpace().Ignore();

        // 式を表す再帰実行パーサ
        // 左再帰の定義: expr = expr expr op / num
        // 左再帰の除去: expr = num *( expr op )
        private static readonly Parser<char, double> expr =
            num.Chain(x => from _ in delimiter
                           from y in expr
                           from __ in delimiter
                           from func in op
                           select func(x, y));

        // パーサの実行
        public static Result<char, double> Parse(string source)
            => expr.End().Parse(source);
    }
}
{'fraction_non_alphanumeric': 0.1423529411764706, 'fraction_numerical': 0.001176470588235294, 'mean_word_length': 1.8224066390041493, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 45, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3512837', 'n_tokens_mistral': 1146, 'n_tokens_neox': 1134, 'n_words': 239}