0

List<String>値と演算子でいっぱいの があります。

["123", "+", "(", "890", "-", "15.00", ")"]

これらの数値と演算子をスタックにプッシュし、ポップして評価するアルゴリズムを作成できることはわかっています。しかし、外部ライブラリを使用せずに行うより良い方法はありますか?

4

4 に答える 4

4

数値と演算子をスタックにプッシュすると、インタープリターになります。

これを行うための明らかにより良い方法 (「より良い」の定義について) は、コンパイラーを作成することです!

入力は既に字句トークンに分割されているため、字句解析器の実装をスキップして、すぐに AST の作成に取り掛かることができます。System. Linq. Expressions Namespaceで、入力を変換する適切なクラスを見つけることができます。Expression Classを見てください。結果をラムダ式でラップし、IL にコンパイルして、CLR で実行できます。

于 2011-08-16T17:39:26.710 に答える
2

ListMehrdadが述べたように、に参加して、実行時にコンパイラに評価させることができます。

Expression e = new Expression("5 * 2"); 
e.Evaluate();

ここですでに尋ねられた非常によく似た質問を見つけました

アップデート :

NCalc "NCalc - Mathematical Expressions Evaluator for .NET" これは外部ライブラリですが、プロジェクトにコードを直接追加できるオープン ソース プロジェクトだと思います。

アップデート :

関数を使用しString.Joinてリストに参加できます。

string formula = String.Join("",listMathOperators);
于 2011-08-16T17:41:13.007 に答える
0

式を計算する完全なクラスがあります。

まず、次のように、リストのすべての文字列を単一の文字列に抽出する必要があります。

string sExpression = "123+(890-15.00)";

次に、パーサーでこの式を評価する必要があります。これを作成する完全なクラスがありますが、ここにファイルを添付することはできません。

于 2011-08-16T17:41:49.103 に答える
0

.NET フレームワークの C# コンパイラ クラスをいつでも使用して、C# 式として評価できます...

于 2011-08-16T17:34:33.363 に答える