public override ParserNode Optimize(ParserNodeContext Context)
{
var LeftNodeOptimized = LeftNode.Optimize(Context);
var RightNodeOptimized = RightNode.Optimize(Context);
if ((LeftNodeOptimized is ParserNodeNumericLiteral) && (RightNodeOptimized is ParserNodeNumericLiteral))
{
var LeftNodeLiteral = (ParserNodeNumericLiteral)LeftNodeOptimized;
var RightNodeLiteral = (ParserNodeNumericLiteral)RightNodeOptimized;
switch (Operator)
{
case "+": return new ParserNodeNumericLiteral() { Value = LeftNodeLiteral.Value + RightNodeLiteral.Value, };
case "-": return new ParserNodeNumericLiteral() { Value = LeftNodeLiteral.Value - RightNodeLiteral.Value, };
case "*": return new ParserNodeNumericLiteral() { Value = LeftNodeLiteral.Value * RightNodeLiteral.Value, };
case "/": return new ParserNodeNumericLiteral() { Value = LeftNodeLiteral.Value / RightNodeLiteral.Value, };
}
}
return this;
}