BaseTerm PrefixToTerm()
            {
                BaseTerm  t0, t1;
                BaseToken token = null;

                try
                {
                    token = PS.Pop();
                }
                catch // should not occur -- please report if it does
                {
                    IO.Error("PrefixToTerm (): Unanticipated error in expression -- please report");
                }

                if (token is OperandToken)
                {
                    return(((OperandToken)token).term);
                }

                OperatorToken oprToken = (OperatorToken)token;

                if (oprToken.IsZerofix) // operator as operand; no arguments
                {
                    return(new OperatorTerm(oprToken.triplet.Name));
                }

                t0 = PrefixToTerm();

                if (oprToken.IsInfix)
                {
                    t1 = PrefixToTerm(); // get the second operand from the PS-stack

                    return(new OperatorTerm(oprToken.od, t0, t1));
                }
                else // prefix or postfix
                {
                    return(new OperatorTerm(oprToken.od, t0));
                }
            }