code: public GeneratedData generate(List<INode> ast) throws AnalysisException
  	{
  		clear();
  
  		if (Settings.dialect == Dialect.VDM_SL)
  		{
  			ModuleList moduleList = new ModuleList(getModules(ast));
  			moduleList.combineDefaults();
  			ast = getNodes(moduleList);
  		}
  
  		preProcessAst(ast);
  
  		List<IRStatus<PIR>> statuses = new LinkedList<>();
  
  		for (INode node : ast)
  		{
  			genIrStatus(statuses, node);
  		}
  
  		return genVdmToTargetLang(statuses);
  	}
docs: The entry point of this class. This method translates a VDM AST into target language code. Use of the template
  method design pattern ensures that the state of this code generator is properly initialized and that the VDM AST
  is pre-processed in accordance with the {@link #preProcessAst(List)} method.
  
  @param ast
  The VDM AST, which can be either VDM modules or classes.
  @return The data generated from the VDM AST.
  @throws AnalysisException
  If a problem occurs during the construction of the IR.