Writing this visitor includes writing the symbol table (environment). It should include methods that allow you to insert new records, and lookup symbols to return those records. You will also need to write classes to store the data (including the symbol table) for each of the types of declarations in the language (variables, methods, classes).
Since a variable may be bound in an enclosing scope, your classes will need to include a pointer to their parent scope so you can look for a binding by climbing up the scope levels.
This project can get heavy and confusing -- draw outline and ideas, bring questions to class, come to office hours as necessary. Your greatest success will come from a clear picture in your head of what needs to be done.
Testing will need to verify that correct expressions are accepted and incorrect (semantically) expressions are rejected.
Documentation and structure will be more important on this project since you are writing your own code.