Example #1
0
        public void Divide(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            // CALL BinaryOp
            var        _start_i1 = _index;
            _Calc_Item _r1;
            var        _arg1_0 = "/";

            _Calc_Args _actual_args1 = new _Calc_Item[] { new _Calc_Item(Multiplicative), new _Calc_Item(_arg1_0), new _Calc_Item(Number), new _Calc_Item(DecimalDigit) };

            if (_args != null)
            {
                _actual_args1 = _actual_args1.Concat(_args.Skip(_arg_index));
            }
            _r1 = _MemoCall(_memo, "BinaryOp", _index, BinaryOp, _actual_args1);

            if (_r1 != null)
            {
                _index = _r1.NextIndex;
            }

            // ACT
            var _r0 = _memo.Results.Peek();

            if (_r0 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _Calc_Item(_r0.StartIndex, _r0.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { return(_IM_Result.Results.Aggregate((q, n) => q / n)); }, _r0), true));
            }
        }
Example #2
0
        public void Expression(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            // CALLORVAR Additive
            _Calc_Item _r0;

            _r0 = _MemoCall(_memo, "Additive", _index, Additive, null);

            if (_r0 != null)
            {
                _index = _r0.NextIndex;
            }
        }
Example #3
0
        public void DecimalDigit(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            _Calc_Item c = null;

            // INPUT CLASS
            _ParseInputClass(_memo, ref _index, '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035', '\u0036', '\u0037', '\u0038', '\u0039');

            // BIND c
            c = _memo.Results.Peek();

            // ACT
            var _r0 = _memo.Results.Peek();

            if (_r0 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _Calc_Item(_r0.StartIndex, _r0.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { return(((char)c - '0').ToString()); }, _r0), true));
            }
        }
Example #4
0
        public void WS(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            // OR 0
            int _start_i0 = _index;

            // OR 1
            int _start_i1 = _index;

            // OR 2
            int _start_i2 = _index;

            // LITERAL ' '
            _ParseLiteralChar(_memo, ref _index, ' ');

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i2;
            }
            else
            {
                goto label2;
            }

            // LITERAL '\n'
            _ParseLiteralChar(_memo, ref _index, '\n');

label2:                             // OR
            int _dummy_i2 = _index; // no-op for label

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i1;
            }
            else
            {
                goto label1;
            }

            // LITERAL '\r'
            _ParseLiteralChar(_memo, ref _index, '\r');

label1:                             // OR
            int _dummy_i1 = _index; // no-op for label

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i0;
            }
            else
            {
                goto label0;
            }

            // LITERAL '\t'
            _ParseLiteralChar(_memo, ref _index, '\t');

label0:                             // OR
            int _dummy_i0 = _index; // no-op for label
        }
Example #5
0
        public void KW(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            _Calc_Item str = null;

            // ARGS 0
            _arg_index       = 0;
            _arg_input_index = 0;

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND str
            str = _memo.ArgResults.Peek();

            if (_memo.ArgResults.Pop() == null)
            {
                _memo.Results.Push(null);
                goto label0;
            }

            // AND 3
            int _start_i3 = _index;

            // CALLORVAR str
            _Calc_Item _r4;

            if (str.Production != null)
            {
                var _p4 = (System.Action <_Calc_Memo, int, IEnumerable <_Calc_Item> >)(object) str.Production;
                _r4 = _MemoCall(_memo, str.Production.Method.Name, _index, _p4, _args != null ? _args.Skip(_arg_index) : null);
            }
            else
            {
                _r4 = _ParseLiteralObj(_memo, ref _index, str.Inputs);
            }

            if (_r4 != null)
            {
                _index = _r4.NextIndex;
            }

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label3;
            }

            // STAR 5
            int _start_i5 = _index;
            var _res5     = Enumerable.Empty <int>();

label5:

            // CALLORVAR WS
            _Calc_Item _r6;

            _r6 = _MemoCall(_memo, "WS", _index, WS, null);

            if (_r6 != null)
            {
                _index = _r6.NextIndex;
            }

            // STAR 5
            var _r5 = _memo.Results.Pop();

            if (_r5 != null)
            {
                _res5 = _res5.Concat(_r5.Results);
                goto label5;
            }
            else
            {
                _memo.Results.Push(new _Calc_Item(_start_i5, _index, _memo.InputEnumerable, _res5.Where(_NON_NULL), true));
            }

label3:     // AND
            var _r3_2 = _memo.Results.Pop();
            var _r3_1 = _memo.Results.Pop();

            if (_r3_1 != null && _r3_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i3, _index, _memo.InputEnumerable, _r3_1.Results.Concat(_r3_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i3;
            }

label0:                                    // ARGS 0
            _arg_input_index = _arg_index; // no-op for label
        }
Example #6
0
        public void Digits(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            _Calc_Item type = null;
            _Calc_Item a    = null;
            _Calc_Item b    = null;

            // OR 0
            int _start_i0 = _index;

            // ARGS 1
            _arg_index       = 0;
            _arg_input_index = 0;

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND type
            type = _memo.ArgResults.Peek();

            if (_memo.ArgResults.Pop() == null)
            {
                _memo.Results.Push(null);
                goto label1;
            }

            // AND 5
            int _start_i5 = _index;

            // CALL Digits
            var        _start_i7 = _index;
            _Calc_Item _r7;

            _Calc_Args _actual_args7 = new _Calc_Item[] { type };

            if (_args != null)
            {
                _actual_args7 = _actual_args7.Concat(_args.Skip(_arg_index));
            }
            _r7 = _MemoCall(_memo, "Digits", _index, Digits, _actual_args7);

            if (_r7 != null)
            {
                _index = _r7.NextIndex;
            }

            // BIND a
            a = _memo.Results.Peek();

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label5;
            }

            // CALLORVAR type
            _Calc_Item _r9;

            if (type.Production != null)
            {
                var _p9 = (System.Action <_Calc_Memo, int, IEnumerable <_Calc_Item> >)(object) type.Production;
                _r9 = _MemoCall(_memo, type.Production.Method.Name, _index, _p9, _args != null ? _args.Skip(_arg_index) : null);
            }
            else
            {
                _r9 = _ParseLiteralObj(_memo, ref _index, type.Inputs);
            }

            if (_r9 != null)
            {
                _index = _r9.NextIndex;
            }

            // BIND b
            b = _memo.Results.Peek();

label5:     // AND
            var _r5_2 = _memo.Results.Pop();
            var _r5_1 = _memo.Results.Pop();

            if (_r5_1 != null && _r5_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i5, _index, _memo.InputEnumerable, _r5_1.Results.Concat(_r5_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i5;
            }

            // ACT
            var _r4 = _memo.Results.Peek();

            if (_r4 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _Calc_Item(_r4.StartIndex, _r4.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { return(a * 10 + b); }, _r4), true));
            }

label1:                                    // ARGS 1
            _arg_input_index = _arg_index; // no-op for label

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i0;
            }
            else
            {
                goto label0;
            }

            // ARGS 10
            _arg_index       = 0;
            _arg_input_index = 0;

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND type
            type = _memo.ArgResults.Peek();

            if (_memo.ArgResults.Pop() == null)
            {
                _memo.Results.Push(null);
                goto label10;
            }

            // CALLORVAR type
            _Calc_Item _r13;

            if (type.Production != null)
            {
                var _p13 = (System.Action <_Calc_Memo, int, IEnumerable <_Calc_Item> >)(object) type.Production;
                _r13 = _MemoCall(_memo, type.Production.Method.Name, _index, _p13, _args != null ? _args.Skip(_arg_index) : null);
            }
            else
            {
                _r13 = _ParseLiteralObj(_memo, ref _index, type.Inputs);
            }

            if (_r13 != null)
            {
                _index = _r13.NextIndex;
            }

label10:                                   // ARGS 10
            _arg_input_index = _arg_index; // no-op for label

label0:                                    // OR
            int _dummy_i0 = _index;        // no-op for label
        }
Example #7
0
        public void Additive(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            // OR 0
            int _start_i0 = _index;

            // OR 1
            int _start_i1 = _index;

            // CALLORVAR Add
            _Calc_Item _r2;

            _r2 = _MemoCall(_memo, "Add", _index, Add, null);

            if (_r2 != null)
            {
                _index = _r2.NextIndex;
            }

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i1;
            }
            else
            {
                goto label1;
            }

            // CALLORVAR Sub
            _Calc_Item _r3;

            _r3 = _MemoCall(_memo, "Sub", _index, Sub, null);

            if (_r3 != null)
            {
                _index = _r3.NextIndex;
            }

label1:                             // OR
            int _dummy_i1 = _index; // no-op for label

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i0;
            }
            else
            {
                goto label0;
            }

            // CALLORVAR Multiplicative
            _Calc_Item _r4;

            _r4 = _MemoCall(_memo, "Multiplicative", _index, Multiplicative, null);

            if (_r4 != null)
            {
                _index = _r4.NextIndex;
            }

label0:                             // OR
            int _dummy_i0 = _index; // no-op for label
        }
Example #8
0
        public void Number(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            _Calc_Item type = null;
            _Calc_Item n    = null;

            // ARGS 0
            _arg_index       = 0;
            _arg_input_index = 0;

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND type
            type = _memo.ArgResults.Peek();

            if (_memo.ArgResults.Pop() == null)
            {
                _memo.Results.Push(null);
                goto label0;
            }

            // AND 4
            int _start_i4 = _index;

            // CALL Digits
            var        _start_i6 = _index;
            _Calc_Item _r6;

            _Calc_Args _actual_args6 = new _Calc_Item[] { type };

            if (_args != null)
            {
                _actual_args6 = _actual_args6.Concat(_args.Skip(_arg_index));
            }
            _r6 = _MemoCall(_memo, "Digits", _index, Digits, _actual_args6);

            if (_r6 != null)
            {
                _index = _r6.NextIndex;
            }

            // BIND n
            n = _memo.Results.Peek();

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label4;
            }

            // STAR 7
            int _start_i7 = _index;
            var _res7     = Enumerable.Empty <int>();

label7:

            // CALLORVAR WS
            _Calc_Item _r8;

            _r8 = _MemoCall(_memo, "WS", _index, WS, null);

            if (_r8 != null)
            {
                _index = _r8.NextIndex;
            }

            // STAR 7
            var _r7 = _memo.Results.Pop();

            if (_r7 != null)
            {
                _res7 = _res7.Concat(_r7.Results);
                goto label7;
            }
            else
            {
                _memo.Results.Push(new _Calc_Item(_start_i7, _index, _memo.InputEnumerable, _res7.Where(_NON_NULL), true));
            }

label4:     // AND
            var _r4_2 = _memo.Results.Pop();
            var _r4_1 = _memo.Results.Pop();

            if (_r4_1 != null && _r4_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i4, _index, _memo.InputEnumerable, _r4_1.Results.Concat(_r4_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i4;
            }

            // ACT
            var _r3 = _memo.Results.Peek();

            if (_r3 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _Calc_Item(_r3.StartIndex, _r3.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { return(n); }, _r3), true));
            }

label0:                                    // ARGS 0
            _arg_input_index = _arg_index; // no-op for label
        }
Example #9
0
        public void BinaryOp(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            _Calc_Item first  = null;
            _Calc_Item op     = null;
            _Calc_Item second = null;
            _Calc_Item type   = null;
            _Calc_Item a      = null;
            _Calc_Item b      = null;

            // ARGS 0
            _arg_index       = 0;
            _arg_input_index = 0;

            // AND 1
            int _start_i1 = _arg_index;

            // AND 2
            int _start_i2 = _arg_index;

            // AND 3
            int _start_i3 = _arg_index;

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND first
            first = _memo.ArgResults.Peek();

            // AND shortcut
            if (_memo.ArgResults.Peek() == null)
            {
                _memo.ArgResults.Push(null); goto label3;
            }

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND op
            op = _memo.ArgResults.Peek();

label3:     // AND
            var _r3_2 = _memo.ArgResults.Pop();
            var _r3_1 = _memo.ArgResults.Pop();

            if (_r3_1 != null && _r3_2 != null)
            {
                _memo.ArgResults.Push(new _Calc_Item(_start_i3, _arg_index, _r3_1.Inputs.Concat(_r3_2.Inputs), _r3_1.Results.Concat(_r3_2.Results).Where(_NON_NULL), false));
            }
            else
            {
                _memo.ArgResults.Push(null);
                _arg_index = _start_i3;
            }

            // AND shortcut
            if (_memo.ArgResults.Peek() == null)
            {
                _memo.ArgResults.Push(null); goto label2;
            }

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // BIND second
            second = _memo.ArgResults.Peek();

label2:     // AND
            var _r2_2 = _memo.ArgResults.Pop();
            var _r2_1 = _memo.ArgResults.Pop();

            if (_r2_1 != null && _r2_2 != null)
            {
                _memo.ArgResults.Push(new _Calc_Item(_start_i2, _arg_index, _r2_1.Inputs.Concat(_r2_2.Inputs), _r2_1.Results.Concat(_r2_2.Results).Where(_NON_NULL), false));
            }
            else
            {
                _memo.ArgResults.Push(null);
                _arg_index = _start_i2;
            }

            // AND shortcut
            if (_memo.ArgResults.Peek() == null)
            {
                _memo.ArgResults.Push(null); goto label1;
            }

            // ANY
            _ParseAnyArgs(_memo, ref _arg_index, ref _arg_input_index, _args);

            // QUES
            if (_memo.ArgResults.Peek() == null)
            {
                _memo.ArgResults.Pop(); _memo.ArgResults.Push(new _Calc_Item(_arg_index, _memo.InputEnumerable));
            }

            // BIND type
            type = _memo.ArgResults.Peek();

label1:     // AND
            var _r1_2 = _memo.ArgResults.Pop();
            var _r1_1 = _memo.ArgResults.Pop();

            if (_r1_1 != null && _r1_2 != null)
            {
                _memo.ArgResults.Push(new _Calc_Item(_start_i1, _arg_index, _r1_1.Inputs.Concat(_r1_2.Inputs), _r1_1.Results.Concat(_r1_2.Results).Where(_NON_NULL), false));
            }
            else
            {
                _memo.ArgResults.Push(null);
                _arg_index = _start_i1;
            }

            if (_memo.ArgResults.Pop() == null)
            {
                _memo.Results.Push(null);
                goto label0;
            }

            // AND 14
            int _start_i14 = _index;

            // AND 15
            int _start_i15 = _index;

            // CALLORVAR first
            _Calc_Item _r17;

            if (first.Production != null)
            {
                var _p17 = (System.Action <_Calc_Memo, int, IEnumerable <_Calc_Item> >)(object) first.Production;
                _r17 = _MemoCall(_memo, first.Production.Method.Name, _index, _p17, _args != null ? _args.Skip(_arg_index) : null);
            }
            else
            {
                _r17 = _ParseLiteralObj(_memo, ref _index, first.Inputs);
            }

            if (_r17 != null)
            {
                _index = _r17.NextIndex;
            }

            // BIND a
            a = _memo.Results.Peek();

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label15;
            }

            // CALL KW
            var        _start_i18 = _index;
            _Calc_Item _r18;

            _Calc_Args _actual_args18 = new _Calc_Item[] { op };

            if (_args != null)
            {
                _actual_args18 = _actual_args18.Concat(_args.Skip(_arg_index));
            }
            _r18 = _MemoCall(_memo, "KW", _index, KW, _actual_args18);

            if (_r18 != null)
            {
                _index = _r18.NextIndex;
            }

label15:    // AND
            var _r15_2 = _memo.Results.Pop();
            var _r15_1 = _memo.Results.Pop();

            if (_r15_1 != null && _r15_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i15, _index, _memo.InputEnumerable, _r15_1.Results.Concat(_r15_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i15;
            }

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label14;
            }

            // CALL second
            var        _start_i20 = _index;
            _Calc_Item _r20;

            _Calc_Args _actual_args20 = new _Calc_Item[] { type };

            if (_args != null)
            {
                _actual_args20 = _actual_args20.Concat(_args.Skip(_arg_index));
            }
            _r20 = _MemoCall(_memo, second.ProductionName, _index, second.Production, _actual_args20);

            if (_r20 != null)
            {
                _index = _r20.NextIndex;
            }

            // BIND b
            b = _memo.Results.Peek();

label14:    // AND
            var _r14_2 = _memo.Results.Pop();
            var _r14_1 = _memo.Results.Pop();

            if (_r14_1 != null && _r14_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i14, _index, _memo.InputEnumerable, _r14_1.Results.Concat(_r14_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i14;
            }

            // ACT
            var _r13 = _memo.Results.Peek();

            if (_r13 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _Calc_Item(_r13.StartIndex, _r13.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { return(new List <int> {
                        a, b
                    }); }, _r13), true));
            }

label0:                                    // ARGS 0
            _arg_input_index = _arg_index; // no-op for label
        }
Example #10
0
        public void Multiplicative(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            int _arg_index       = 0;
            int _arg_input_index = 0;

            // OR 0
            int _start_i0 = _index;

            // OR 1
            int _start_i1 = _index;

            // CALLORVAR Multiply
            _Calc_Item _r2;

            _r2 = _MemoCall(_memo, "Multiply", _index, Multiply, null);

            if (_r2 != null)
            {
                _index = _r2.NextIndex;
            }

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i1;
            }
            else
            {
                goto label1;
            }

            // CALLORVAR Divide
            _Calc_Item _r3;

            _r3 = _MemoCall(_memo, "Divide", _index, Divide, null);

            if (_r3 != null)
            {
                _index = _r3.NextIndex;
            }

label1:                             // OR
            int _dummy_i1 = _index; // no-op for label

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i0;
            }
            else
            {
                goto label0;
            }

            // CALL Number
            var        _start_i4 = _index;
            _Calc_Item _r4;

            _Calc_Args _actual_args4 = new _Calc_Item[] { new _Calc_Item(DecimalDigit) };

            if (_args != null)
            {
                _actual_args4 = _actual_args4.Concat(_args.Skip(_arg_index));
            }
            _r4 = _MemoCall(_memo, "Number", _index, Number, _actual_args4);

            if (_r4 != null)
            {
                _index = _r4.NextIndex;
            }

label0:                             // OR
            int _dummy_i0 = _index; // no-op for label
        }
Example #11
0
        public void Expression(_Calc_Memo _memo, int _index, _Calc_Args _args)
        {
            _Calc_Item a = null;
            _Calc_Item b = null;

            // OR 0
            int _start_i0 = _index;

            // AND 2
            int _start_i2 = _index;

            // AND 3
            int _start_i3 = _index;

            // CALLORVAR Expression
            _Calc_Item _r5;

            _r5 = _MemoCall(_memo, "Expression", _index, Expression, null);

            if (_r5 != null)
            {
                _index = _r5.NextIndex;
            }

            // BIND a
            a = _memo.Results.Peek();

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label3;
            }

            // LITERAL "-"
            _ParseLiteralString(_memo, ref _index, "-");

label3:     // AND
            var _r3_2 = _memo.Results.Pop();
            var _r3_1 = _memo.Results.Pop();

            if (_r3_1 != null && _r3_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i3, _index, _memo.InputEnumerable, _r3_1.Results.Concat(_r3_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i3;
            }

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label2;
            }

            // CALLORVAR Expression
            _Calc_Item _r8;

            _r8 = _MemoCall(_memo, "Expression", _index, Expression, null);

            if (_r8 != null)
            {
                _index = _r8.NextIndex;
            }

            // BIND b
            b = _memo.Results.Peek();

label2:     // AND
            var _r2_2 = _memo.Results.Pop();
            var _r2_1 = _memo.Results.Pop();

            if (_r2_1 != null && _r2_2 != null)
            {
                _memo.Results.Push(new _Calc_Item(_start_i2, _index, _memo.InputEnumerable, _r2_1.Results.Concat(_r2_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i2;
            }

            // ACT
            var _r1 = _memo.Results.Peek();

            if (_r1 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _Calc_Item(_r1.StartIndex, _r1.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { return("(" + a + "-" + b + ")"); }, _r1), true));
            }

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i0;
            }
            else
            {
                goto label0;
            }

            // CALLORVAR DecimalDigit
            _Calc_Item _r9;

            _r9 = _MemoCall(_memo, "DecimalDigit", _index, DecimalDigit, null);

            if (_r9 != null)
            {
                _index = _r9.NextIndex;
            }

label0:                             // OR
            int _dummy_i0 = _index; // no-op for label
        }