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); }