An approximate translation of this into C might look something like this:
The name parameters are converted to zero-argument functions which compute the answer. If the expression is a single variable, simple return a pointer to it. For a more complicated expression, compute it, place the result into a temporary, and return a pointer to the temporary. Any variables needed are referenced by the function as a global. These functions are traditionally called thunks.
The function being translated receives a pointer to a thunk for each of its by-name parameters. Its references are translated to call the function and de-reference the returned pointer. If the reference is right-side, the correct value is fetched. Left references where a single variable was sent set the variable, others just discard the value. Since the thunk computes the original expression, it gives the correct value, with the current variable values, each time is is used.
This is all pretty elaborate and expensive. That's why more recent languages don't use it.