CalcExpression ParsePower()
        {
            var x = ParseUnary();

            while (_token.Type == Tktype.POWER)
            {
                var t = _token;
                GetToken();
                var a = ParseUnary();
                x = new CalcBinaryExpression(t, x, a);
            }
            return(x);
        }
        CalcExpression ParseAddSub()
        {
            var x = ParseMulDiv();

            while (_token.Type == Tktype.ADDSUB)
            {
                var t = _token;
                GetToken();
                var exprArg = ParseMulDiv();
                x = new CalcBinaryExpression(t, x, exprArg);
            }
            return(x);
        }
        CalcExpression ParseMulDiv()
        {
            var x = ParsePower();

            while (_token.Type == Tktype.MULDIV)
            {
                var t = _token;
                GetToken();
                var a = ParsePower();
                x = new CalcBinaryExpression(t, x, a);
            }
            return(x);
        }
        CalcExpression ParseCompare()
        {
            var x = ParseAddSub();

            while (_token.Type == Tktype.COMPARE)
            {
                var t = _token;
                GetToken();
                var exprArg = ParseAddSub();
                x = new CalcBinaryExpression(t, x, exprArg);
            }
            return(x);
        }