public object VisitSetExpr(Expr <object> .Set expr)
 {
     Resolve(expr.value);
     Resolve(expr.obj);
     return(null);
 }
 public void Resolve(Expr <object> expr)
 {
     expr.Accept(this);
 }
 public object VisitUnaryExpr(Expr <object> .Unary expr)
 {
     Resolve(expr.right);
     return(null);
 }
 public object VisitGetExpr(Expr <object> .Get expr)
 {
     Resolve(expr.obj);
     return(null);
 }
 public object VisitLogicalExpr(Expr <object> .Logical expr)
 {
     Resolve(expr.left);
     Resolve(expr.right);
     return(null);
 }
 public object VisitLiteralExpr(Expr <object> .Literal expr)
 {
     return(null);
 }
 public object VisitGroupingExpr(Expr <object> .Grouping expr)
 {
     Resolve(expr.expression);
     return(null);
 }
 public object VisitBinaryExpr(Expr <object> .Binary expr)
 {
     Resolve(expr.left);
     Resolve(expr.right);
     return(null);
 }
 public object VisitAssignExpr(Expr <object> .Assign expr)
 {
     Resolve(expr.value);
     ResolveLocal(expr, expr.name);
     return(null);
 }