public void Visit(PutsExpression puts) { if (puts.Value is ILiteralExpression) { var value = ((ILiteralExpression)puts.Value).GetValue(); Console.Write(value); } else if (puts.Value is IdentifierExpression) { string varName = ((IdentifierExpression)puts.Value).Value; var variable = _variables.FirstOrDefault(var => var.Name == varName); if (variable != null) { if (variable.Value == null) { Console.Write("null"); } else { Console.Write(variable.Value); } } } else if (puts.Value is FunctionCallExpression) { Visit(puts.Value); var value = _returnValues.Pop(); Console.Write(value.Value); } else if (puts.Value is MathsExpression) { Visit(puts.Value); var value = _mathsResults.Pop().Value; Console.Write(value); } else { Console.Write(puts.Value.Print()); } }
protected virtual Expression VisitPuts(PutsExpression node) { Visit(node.Value); return(node); }