Пример #1
0
            internal static ExpressionToken ReadExpression(TokenCollection stream)
            {
                if (stream.NextIsEndOfLine)
                {
                    throw new HspLogicalLineException("式:読み込み中にスタックが空になった");
                }
                ExpressionTermToken        elem     = null;
                List <ExpressionTermToken> elements = new List <ExpressionTermToken>();

                do        //最低一つはパラメータがあるはず。
                {
                    if (stream.NextIsBracketEnd)
                    {
                        break;
                    }
                    if (stream.NextToken is OperatorPrimitive)
                    {
                        elem = (ExpressionTermToken)(ReadOperator(stream));
                    }
                    else if (stream.NextToken is LiteralPrimitive)
                    {
                        elem = (ExpressionTermToken)(ReadLiteral(stream));
                    }
                    else if (stream.NextToken is FunctionPrimitive)
                    {
                        elem = (ExpressionTermToken)(ReadFunction(stream, true));
                    }
                    else if (stream.NextToken is VariablePrimitive)
                    {
                        elem = (ExpressionTermToken)(ReadVariable(stream));
                    }
                    else
                    {
                        throw new HspLogicalLineException("式:不適切な要素を検出");
                    }
                    elements.Add(elem);
                } while (!stream.NextIsEndOfParam);
                ExpressionToken ret = new ExpressionToken(elements);

                ret.RpnConvert();
                return(ret);
            }