独自のパーサーを作成するのに多くの時間を費やさなかったことを願っています;)
このコードを使用して式を評価します。
class Program
{
public static double Evaluate(string expression)
{
using (var stringReader = new StringReader("<dummy/>"))
{
var navigator = new XPathDocument(stringReader).CreateNavigator();
expression = Regex.Replace(expression, @"([\+\-\*])", " ${1} "); // add some space
expression = expression.Replace("/", " div ").Replace("%", " mod ");
return (double)navigator.Evaluate(string.Format("number({0})", expression));
}
}
static void Main(string[] args)
{
Console.WriteLine(Evaluate("3*-2+1"));
}
}
出力します:-5
それは方法に基づいていXPathNavigator.Evaluate
ます。正規表現は入力にいくつかのスペースを追加し、除算とモジュロ記号が置き換えられます。