我是表达式树的新手,现在已经有一段时间没有做C#了。我需要使用表达式树创建反向波兰表示法计算器。
到目前为止,我已经创建了2个堆栈,一个用于操作,另一个用于数字。我想知道如何拆分用户输入并在以下表达式中调用它]
Expression<Func<double, double, double, double>> calc = (x, y, z) => x + y - z;
//sample input 11 6 5 4 + - / 7 * 2 2 2 + -
//my expression class
class Expression : ExpressionVisitor
{
Stack<int> nums = new Stack<int>();
Stack<char> ops = new Stack<char>();
public override Expression Visit(Expression node)
{
if (node == null)
{
return null;
}
switch (node.NodeType)
{
case ExpressionType.Add:
return this.VisitBinary((BinaryExpression)node);
case ExpressionType.Subtract:
return this.VisitBinary((BinaryExpression)node);
case ExpressionType.Multiply:
return this.VisitBinary((BinaryExpression)node);
case ExpressionType.Divide:
return this.VisitBinary((BinaryExpression)node);
case ExpressionType.Power:
return this.VisitBinary((BinaryExpression)node);
default:
return base.Visit(node);
}
}
protected override Expression VisitBinary(BinaryExpression node)
{
var rightSide = this.Visit(node.rightSide);
var leftSide = this.Visit(node.leftSide);
switch (node.NodeType)
{
case ExpressionType.Add:
return Expression.MakeBinary(ExpressionType.Add, leftSide, rightSide);
case ExpressionType.Subtract:
return Expression.MakeBinary(ExpressionType.Subtract, leftSide, rightSide);
case ExpressionType.Multiply:
return Expression.MakeBinary(ExpressionType.Multiply, leftSide, rightSide);
case ExpressionType.Divide:
return Expression.MakeBinary(ExpressionType.Divide, leftSide, rightSide);
case ExpressionType.Power:
return Expression.MakeBinary(ExpressionType.Power, leftSide, rightSide);
default:
return base.VisitBinary(node);
}
//main class
static void Main(string[] args)
{
var visitor = new Expression();
string input = Console.ReadLine();
string[] rpnTokens = input.Split(' ');
Expression<Func<double, double, double, double>> calc = (x, y, z) => x + y - z;
Console.WriteLine("result: " + calc);
}
我是表达式树的新手,现在已经有一段时间没有做C#了。我需要使用表达式树创建反向波兰表示法计算器。到目前为止,我已经创建了2个堆栈,其中一个用于操作,并且...
使用反向波兰表示法,将按照输入的顺序对用户输入进行操作。