diff --git a/CMakeLists.txt b/CMakeLists.txt
index 708b8b6..c1944ac 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,32 +57,6 @@
 set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -O0 -g ${MY_CXX_WARNING_FLAGS}")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -O3 -DNDEBUG ${MY_CXX_WARNING_FLAGS}")
 
-# Compiler-specific C++11 activation.
-if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
-    execute_process(
-        COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
-    # Just g++-5.0 and greater contain <codecvt> header. (test in ubuntu)
-    if (NOT (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0))
-        message(FATAL_ERROR "${PROJECT_NAME} requires g++ 5.0 or greater.")
-    endif ()
-elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND APPLE)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
-elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
-    execute_process(
-        COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CLANG_VERSION)
-    if (NOT (CLANG_VERSION VERSION_GREATER 4.2.1 OR CLANG_VERSION VERSION_EQUAL 4.2.1))
-        message(FATAL_ERROR "${PROJECT_NAME} requires clang 4.2.1 or greater.")
-    endif ()
-    # You can use libc++ to compile this project when g++ is NOT greater than or equal to 5.0.
-    if (WITH_LIBCXX)
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
-    endif()
-elseif ( MSVC_VERSION GREATER 1800 OR MSVC_VERSION EQUAL 1800 )
-  # Visual Studio 2012+ supports c++11 features
-else ()
-    message(FATAL_ERROR "Your C++ compiler does not support C++11.")
-endif ()
-
 # Flatbuffer
 set(flatbuffer-GENERATED_SRC
   ${PROJECT_SOURCE_DIR}/src/Cache/header_generated.h
@@ -119,33 +93,21 @@
 
 add_custom_target(GenerateParser DEPENDS ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp)
 add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp
+  COMMAND echo "       Parser Generation..."
   COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/src/parser/
-  COMMAND java -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -listener -visitor -o ${PROJECT_SOURCE_DIR}/src/parser/  ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4
+  COMMAND java -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -o ${PROJECT_SOURCE_DIR}/src/parser/  ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4  ${PROJECT_SOURCE_DIR}/grammar/SV3_1aLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4
+  COMMAND echo "       Serializer, Parser Listener, code generation..."
   COMMAND SourceCompile/generate_parser_listener.tcl ;
   COMMAND API/generate_python_listener_api.tcl ;
+  COMMAND echo "       Python API Generation..."
   COMMAND ${SWIG_EXECUTABLE}  -c++ -python -o API/slapi_wrap.cxx API/slapi.i ;
   COMMAND API/embed_python_api.tcl
   WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/src/"
-  DEPENDS ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4 ${PROJECT_SOURCE_DIR}/src/API/slapi.i
+  COMMAND echo "       Code Generation completed"
+  DEPENDS ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4 ${PROJECT_SOURCE_DIR}/src/API/slapi.i
  )
 
-include_directories(
-  ${PROJECT_SOURCE_DIR}/src/API
-  ${PROJECT_SOURCE_DIR}/src/Design
-  ${PROJECT_SOURCE_DIR}/src/Library
-  ${PROJECT_SOURCE_DIR}/src/parser
-  ${PROJECT_SOURCE_DIR}/src/SourceCompile
-  ${PROJECT_SOURCE_DIR}/src/DesignCompile
-  ${PROJECT_SOURCE_DIR}/src/Testbench
-  ${PROJECT_SOURCE_DIR}/src/CommandLine
-  ${PROJECT_SOURCE_DIR}/src/Common
-  ${PROJECT_SOURCE_DIR}/src/ErrorReporting
-  ${PROJECT_SOURCE_DIR}/src/Utils
-  ${PROJECT_SOURCE_DIR}/src/Cache
-  ${PROJECT_SOURCE_DIR}/src/Config
-  ${PROJECT_SOURCE_DIR}/src/Expression
-  ${PROJECT_SOURCE_DIR}/src/Package
-)
+include_directories(${PROJECT_SOURCE_DIR}/src)
 
 file(GLOB surelog_SRC
   ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aLexer.cpp
@@ -201,14 +163,16 @@
 add_dependencies(surelog GenerateParser)
 add_dependencies(surelog GenerateSerializer)
 
+# Linkage instructions
 target_link_libraries(
   surelog ${PYTHON_LIBRARIES}
- )
-
+)
 target_link_libraries(
   surelog -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a dl util m rt pthread tcmalloc
 )
 
+# Creation of the distribution directory,
+# Precompiled package creation
 add_custom_command(TARGET surelog POST_BUILD
   COMMAND echo "       Creating staging for precompiled packages"
   COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
@@ -231,9 +195,14 @@
  )
 
 
-
-
+# Installation target
 INSTALL(
   TARGETS surelog
   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
 )
+INSTALL(
+  DIRECTORY   ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python
+              ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
+              ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/pkg
+  DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog
+)
diff --git a/INSTALL.md b/INSTALL.md
index be04204..48a194c 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -13,10 +13,10 @@
 
 * Please install the following package updates:
 
-   * sudo apt-get install build-essential pkg-config tcsh swig google-perftools python3 python3-dev
+   * sudo apt-get install build-essential pkg-config tcsh swig uuid-dev libgoogle-perftools-dev python3 python3-dev
 
    * If you don't intent to change the grammar:
-     * sudo apt-get install default-jre 
+     * sudo apt-get install default-jre
    * If you do intent to change the grammar:
      * sudo apt-get install default-jdk ant
 
@@ -28,4 +28,3 @@
 * Build
   * make
   * or see [`src/README`](./src/README.md)
-  
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 2643191..2138ba2 100644
--- a/Makefile
+++ b/Makefile
@@ -11,8 +11,9 @@
 	cd build; ../tests/regression.tcl mt=0
 
 clean:
-	rm -rf build;
-	chmod -fR u+rwx dist; rm -rf dist;
+	rm -rf dist;
+	$(MAKE) -C build clean
+	rm -rf build
 
 install:
 	cd build; make install
diff --git a/README.md b/README.md
index ff19cb8..58dba26 100644
--- a/README.md
+++ b/README.md
@@ -34,13 +34,16 @@
 ```bash
 make
 ```
+```bash
+make install (/usr/local/bin and /usr/local/lib/surelog by default, use DESTDIR= for alternative locations)
+```
 
 For more build/test options and system requirements for building see
 [`src/README`](src/README.md) file.
 
 # Surelog commands
- * The executable is located here:
-   * dist/Release/GNU-Linux/surelog
+ * The executable is located here (If not installed in:
+   * build/dist/Release/surelog
 
  * STANDARD VERILOG COMMAND LINE:
    * -f <file>             Accepts a file containing command line arguments
diff --git a/grammar/build.xml b/grammar/build.xml
index 456e1c7..f217507 100644
--- a/grammar/build.xml
+++ b/grammar/build.xml
@@ -24,7 +24,7 @@
 
   <!-- set global properties for this build -->
   <property name="antlr_tool_location"
-	    value="../antlr4/antlr4-4.7.2/tool/target/antlr4-4.7.2-complete.jar"/>
+	    value="../third_party/antlr4/antlr4-4.7.2-complete.jar"/>
   <property name="antlr_tool_target"  value="org.antlr.v4.Tool"/>
   <property name="antlr_test_rig"     value="org.antlr.v4.gui.TestRig"/>
   <property name="sv_parser_grammar"  value="SV3_1a"/>
@@ -47,9 +47,9 @@
   <target name="compile_cpp" depends="init"
         description="compile the Grammar files for C++">
     <!-- Compile the G4 files for C++, only generates C++ files -->
-	<echo>Antlr Compile SV3_1aPpLexer.g4  SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4  SV3_1aSplitterParser.g4 </echo>
+	<echo>Antlr Compile SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4 </echo>
         <java  classpath="${antlr_tool_location}" classname="${antlr_tool_target}" fork="true" maxmemory="4096m" >
-          <arg line="${antlr_tool_cpp_options}  SV3_1aPpLexer.g4  SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4  SV3_1aSplitterParser.g4" />
+          <arg line="${antlr_tool_cpp_options} SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4" />
         </java>
  
   </target>
@@ -58,30 +58,9 @@
   <target name="compile_java" depends="init"
         description="Compile the Grammar files for Java for Testing purposes">
     <!-- Compile the G4 files for Java target-->
-	<echo>Antlr Compile SV3_1aPpLexer.g4  SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4  SV3_1aSplitterParser.g4</echo>
+	<echo>Antlr Compile SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4</echo>
         <java classpath="${antlr_tool_location}" classname="${antlr_tool_target}">
-          <arg line="  SV3_1aPpLexer.g4  SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4  SV3_1aSplitterParser.g4" />
-        </java>
-
-  </target>
-
-  <target name="compile_full_cpp" depends="init"
-        description="compile the Grammar files for C++">
-    <!-- Compile the G4 files for C++, only generates C++ files -->
-	<echo>Antlr Compile SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aPpLexer.g4  SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4  SV3_1aSplitterParser.g4 </echo>
-        <java  classpath="${antlr_tool_location}" classname="${antlr_tool_target}" fork="true" maxmemory="4096m" >
-          <arg line="${antlr_tool_cpp_options} SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4" />
-        </java>
- 
-  </target>
-
-  
-  <target name="compile_full_java" depends="init"
-        description="Compile the Grammar files for Java for Testing purposes">
-    <!-- Compile the G4 files for Java target-->
-	<echo>Antlr Compile SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aPpLexer.g4  SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4  SV3_1aSplitterParser.g4</echo>
-        <java classpath="${antlr_tool_location}" classname="${antlr_tool_target}">
-          <arg line=" SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4" />
+          <arg line=" SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4" />
         </java>
 
   </target>
@@ -95,27 +74,6 @@
          fork="true"/>
   </target>
   
-  <target name="copy_cpp">
-    <!-- Copy generated files to Project area -->
-    <copy todir="../SVIncCompil/parser/">
-      <fileset dir="." includes="*.cpp *.h *.tokens"/>
-    </copy>   
-  </target>
-
-   <target name="copy_pp_cpp">
-    <!-- Copy generated files to Project area -->
-    <copy todir="../SVIncCompil/parser/">
-      <fileset dir="." includes="*Pp*.cpp *Pp*.h *Pp*.tokens"/>
-    </copy>   
-   </target>
-
-   <target name="copy_lib_cpp">
-    <!-- Copy generated files to Project area -->
-    <copy todir="../SVIncCompil/parser/">
-      <fileset dir="." includes="*Lib*.cpp *Lib*.h *Lib*.tokens"/>
-    </copy>   
-  </target> 
-
   <target name="clean"
         description="clean up">
     <!-- Delete the generated files: *.cpp, *.h, *.tokens *.java -->
diff --git a/src/API/PythonAPI.cpp b/src/API/PythonAPI.cpp
index ee445f7..b536da3 100644
--- a/src/API/PythonAPI.cpp
+++ b/src/API/PythonAPI.cpp
@@ -21,23 +21,23 @@
  * Created on May 13, 2017, 4:42 PM
  */
 
-#include "../SourceCompile/SymbolTable.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/FileUtils.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Utils/StringUtils.h"
+#include "Utils/FileUtils.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
 #include "antlr4-runtime.h"
 using namespace std;
 using namespace antlr4;
 
-#include "../parser/SV3_1aParserBaseListener.h"
+#include "parser/SV3_1aParserBaseListener.h"
 
-#include "SV3_1aPythonListener.h"
+#include "API/SV3_1aPythonListener.h"
 
 using namespace SURELOG;
 
@@ -47,13 +47,13 @@
 #include <iostream>
 #include <cstdio>
 #include "Python.h"
-#include "PythonAPI.h"
-#include "SLAPI.h"
-#include "slapi_wrap.cxx"
-#include "slapi.h"
-#include "vobjecttypes_py.h"
+#include "API/PythonAPI.h"
+#include "API/SLAPI.h"
+#include "API/slapi_wrap.cxx"
+#include "API/slapi.h"
+#include "API/vobjecttypes_py.h"
 #include <cstdlib>
-#include "../SourceCompile/PythonListen.h"
+#include "SourceCompile/PythonListen.h"
 
 std::string PythonAPI::m_invalidScriptResult = "INVALID_PYTHON_SCRIPT_RESULT";
 
@@ -199,7 +199,7 @@
           if (i < argc - 1) {
             m_builtinPath = argv[i + 1];
           }
-      } 
+      }
   }
   Py_SetProgramName((wchar_t*)argv[0]); /* optional but recommended */
 
diff --git a/src/API/SLAPI.cpp b/src/API/SLAPI.cpp
index 4aea9f7..fe9735f 100644
--- a/src/API/SLAPI.cpp
+++ b/src/API/SLAPI.cpp
@@ -24,21 +24,21 @@
 #include <string>
 #include <vector>
 
-#include "../ErrorReporting/Waiver.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../Utils/StringUtils.h"
+#include "ErrorReporting/Waiver.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Utils/StringUtils.h"
 
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/PythonListen.h"
-#include "../Design/FileContent.h"
-#include "../Testbench/ClassDefinition.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/PythonListen.h"
+#include "Design/FileContent.h"
+#include "Testbench/ClassDefinition.h"
 #include <cstdlib>
 #include <iostream>
 #include "antlr4-runtime.h"
@@ -46,15 +46,15 @@
 using namespace antlr4;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "SV3_1aPythonListener.h"
-#include "../Utils/ParseUtils.h"
-#include "../Utils/FileUtils.h"
-#include "PythonAPI.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "API/SV3_1aPythonListener.h"
+#include "Utils/ParseUtils.h"
+#include "Utils/FileUtils.h"
+#include "API/PythonAPI.h"
 
-#include "SLAPI.h"
+#include "API/SLAPI.h"
 
 void SURELOG::SLsetWaiver(const char* messageId, const char* fileName,
                           unsigned int line, const char* objectName) {
diff --git a/src/API/SV3_1aPythonListener.cpp b/src/API/SV3_1aPythonListener.cpp
index ca16fdf..7785a87 100644
--- a/src/API/SV3_1aPythonListener.cpp
+++ b/src/API/SV3_1aPythonListener.cpp
@@ -11,15 +11,15 @@
  * 
  * Created on April 16, 2017, 8:28 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/PythonListen.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/PythonListen.h"
 #include <cstdlib>
 #include <iostream>
 #include "antlr4-runtime.h"
@@ -27,14 +27,14 @@
 using namespace antlr4;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "SV3_1aPythonListener.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "API/SV3_1aPythonListener.h"
 using namespace antlr4;
-#include "../Utils/ParseUtils.h"
-#include "../Utils/FileUtils.h"
-#include "PythonAPI.h"
+#include "Utils/ParseUtils.h"
+#include "Utils/FileUtils.h"
+#include "API/PythonAPI.h"
 
 SV3_1aPythonListener::SV3_1aPythonListener (PythonListen* pl, PyThreadState* interpState, antlr4::CommonTokenStream* tokens, unsigned int lineOffset) : 
 m_pl(pl), m_interpState(interpState), m_tokens(tokens), m_lineOffset(lineOffset) { }
diff --git a/src/API/slapi.py b/src/API/slapi.py
index 055221f..9f8524a 100644
--- a/src/API/slapi.py
+++ b/src/API/slapi.py
@@ -1,15 +1,22 @@
 # This file was automatically generated by SWIG (http://www.swig.org).
-# Version 3.0.8
+# Version 3.0.12
 #
 # Do not make changes to this file unless you know what you are doing--modify
 # the SWIG interface file instead.
 
-
-
-
-
-from sys import version_info
-if version_info >= (2, 6, 0):
+from sys import version_info as _swig_python_version_info
+if _swig_python_version_info >= (2, 7, 0):
+    def swig_import_helper():
+        import importlib
+        pkg = __name__.rpartition('.')[0]
+        mname = '.'.join((pkg, '_slapi')).lstrip('.')
+        try:
+            return importlib.import_module(mname)
+        except ImportError:
+            return importlib.import_module('_slapi')
+    _slapi = swig_import_helper()
+    del swig_import_helper
+elif _swig_python_version_info >= (2, 6, 0):
     def swig_import_helper():
         from os.path import dirname
         import imp
@@ -19,22 +26,27 @@
         except ImportError:
             import _slapi
             return _slapi
-        if fp is not None:
-            try:
-                _mod = imp.load_module('_slapi', fp, pathname, description)
-            finally:
+        try:
+            _mod = imp.load_module('_slapi', fp, pathname, description)
+        finally:
+            if fp is not None:
                 fp.close()
-            return _mod
+        return _mod
     _slapi = swig_import_helper()
     del swig_import_helper
 else:
     import _slapi
-del version_info
+del _swig_python_version_info
+
 try:
     _swig_property = property
 except NameError:
     pass  # Python < 2.2 doesn't have 'property'.
 
+try:
+    import builtins as __builtin__
+except ImportError:
+    import __builtin__
 
 def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
     if (name == "thisown"):
@@ -59,37 +71,30 @@
     return _swig_setattr_nondynamic(self, class_type, name, value, 0)
 
 
-def _swig_getattr_nondynamic(self, class_type, name, static=1):
+def _swig_getattr(self, class_type, name):
     if (name == "thisown"):
         return self.this.own()
     method = class_type.__swig_getmethods__.get(name, None)
     if method:
         return method(self)
-    if (not static):
-        return object.__getattr__(self, name)
-    else:
-        raise AttributeError(name)
-
-def _swig_getattr(self, class_type, name):
-    return _swig_getattr_nondynamic(self, class_type, name, 0)
+    raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
 
 
 def _swig_repr(self):
     try:
         strthis = "proxy of " + self.this.__repr__()
-    except Exception:
+    except __builtin__.Exception:
         strthis = ""
     return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
 
 try:
     _object = object
     _newclass = 1
-except AttributeError:
+except __builtin__.Exception:
     class _object:
         pass
     _newclass = 0
 
-
 class SwigPyIterator(_object):
     __swig_setmethods__ = {}
     __setattr__ = lambda self, name, value: _swig_setattr(self, SwigPyIterator, name, value)
@@ -236,7 +241,7 @@
         this = _slapi.new_UIntVector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
diff --git a/src/API/slapi_wrap.cxx b/src/API/slapi_wrap.cxx
index a9f81cb..6b260e3 100644
--- a/src/API/slapi_wrap.cxx
+++ b/src/API/slapi_wrap.cxx
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 3.0.8
+ * Version 3.0.12
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make
@@ -106,9 +106,11 @@
 #endif
 
 /* exporting methods */
-#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
-#  ifndef GCC_HASCLASSVISIBILITY
-#    define GCC_HASCLASSVISIBILITY
+#if defined(__GNUC__)
+#  if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#    ifndef GCC_HASCLASSVISIBILITY
+#      define GCC_HASCLASSVISIBILITY
+#    endif
 #  endif
 #endif
 
@@ -668,16 +670,16 @@
     char d = *(c++);
     unsigned char uu;
     if ((d >= '0') && (d <= '9'))
-      uu = ((d - '0') << 4);
+      uu = (unsigned char)((d - '0') << 4);
     else if ((d >= 'a') && (d <= 'f'))
-      uu = ((d - ('a'-10)) << 4);
+      uu = (unsigned char)((d - ('a'-10)) << 4);
     else
       return (char *) 0;
     d = *(c++);
     if ((d >= '0') && (d <= '9'))
-      uu |= (d - '0');
+      uu |= (unsigned char)(d - '0');
     else if ((d >= 'a') && (d <= 'f'))
-      uu |= (d - ('a'-10));
+      uu |= (unsigned char)(d - ('a'-10));
     else
       return (char *) 0;
     *u = uu;
@@ -860,10 +862,6 @@
 }
 #endif
 
-/* Add PyObject_Del for old Pythons */
-#if PY_VERSION_HEX < 0x01060000
-# define PyObject_Del(op) PyMem_DEL((op))
-#endif
 #ifndef PyObject_DEL
 # define PyObject_DEL PyObject_Del
 #endif
@@ -978,6 +976,7 @@
 #if PY_VERSION_HEX < 0x03020000
 #define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
 #define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
+#define Py_hash_t long
 #endif
 
 /* -----------------------------------------------------------------------------
@@ -1926,7 +1925,6 @@
   static int type_init = 0;
   if (!type_init) {
     const PyTypeObject tmp = {
-      /* PyObject header changed in Python 3 */
 #if PY_VERSION_HEX >= 0x03000000
       PyVarObject_HEAD_INIT(NULL, 0)
 #else
@@ -1937,7 +1935,7 @@
       sizeof(SwigPyObject),                 /* tp_basicsize */
       0,                                    /* tp_itemsize */
       (destructor)SwigPyObject_dealloc,     /* tp_dealloc */
-      0,				    /* tp_print */
+      0,                                    /* tp_print */
 #if PY_VERSION_HEX < 0x02020000
       (getattrfunc)SwigPyObject_getattr,    /* tp_getattr */
 #else
@@ -1945,7 +1943,7 @@
 #endif
       (setattrfunc)0,                       /* tp_setattr */
 #if PY_VERSION_HEX >= 0x03000000
-    0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */
+      0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */
 #else
       (cmpfunc)SwigPyObject_compare,        /* tp_compare */
 #endif
@@ -1955,7 +1953,7 @@
       0,                                    /* tp_as_mapping */
       (hashfunc)0,                          /* tp_hash */
       (ternaryfunc)0,                       /* tp_call */
-      0,				    /* tp_str */
+      0,                                    /* tp_str */
       PyObject_GenericGetAttr,              /* tp_getattro */
       0,                                    /* tp_setattro */
       0,                                    /* tp_as_buffer */
@@ -2118,7 +2116,6 @@
   static int type_init = 0;
   if (!type_init) {
     const PyTypeObject tmp = {
-      /* PyObject header changed in Python 3 */
 #if PY_VERSION_HEX>=0x03000000
       PyVarObject_HEAD_INIT(NULL, 0)
 #else
@@ -3059,7 +3056,7 @@
 #endif
 #define SWIG_name    "_slapi"
 
-#define SWIGVERSION 0x030008 
+#define SWIGVERSION 0x030012 
 #define SWIG_VERSION SWIGVERSION
 
 
@@ -3152,6 +3149,7 @@
 #endif
 
 
+#include <typeinfo>
 #include <stdexcept>
 
 
@@ -3301,7 +3299,7 @@
     return SWIG_OK;
 #if PY_VERSION_HEX < 0x03000000
   } else if (PyInt_Check(obj)) {
-    if (val) *val = PyInt_AsLong(obj);
+    if (val) *val = (double) PyInt_AsLong(obj);
     return SWIG_OK;
 #endif
   } else if (PyLong_Check(obj)) {
@@ -3422,23 +3420,109 @@
 }
 
 
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+#   define LLONG_MAX __LONG_LONG_MAX__
+#   define LLONG_MIN (-LLONG_MAX - 1LL)
+#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+#if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE)
+#  define SWIG_LONG_LONG_AVAILABLE
+#endif
+
+
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERN int
+SWIG_AsVal_unsigned_SS_long_SS_long (PyObject *obj, unsigned long long *val)
+{
+  int res = SWIG_TypeError;
+  if (PyLong_Check(obj)) {
+    unsigned long long v = PyLong_AsUnsignedLongLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+      res = SWIG_OverflowError;
+    }
+  } else {
+    unsigned long v;
+    res = SWIG_AsVal_unsigned_SS_long (obj,&v);
+    if (SWIG_IsOK(res)) {
+      if (val) *val = v;
+      return res;
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    const double mant_max = 1LL << DBL_MANT_DIG;
+    double d;
+    res = SWIG_AsVal_double (obj,&d);
+    if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, 0, mant_max))
+      return SWIG_OverflowError;
+    if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) {
+      if (val) *val = (unsigned long long)(d);
+      return SWIG_AddCast(res);
+    }
+    res = SWIG_TypeError;
+  }
+#endif
+  return res;
+}
+#endif
+
+
 SWIGINTERNINLINE int
 SWIG_AsVal_size_t (PyObject * obj, size_t *val)
 {
-  unsigned long v;
-  int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0);
-  if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+  int res = SWIG_TypeError;
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(size_t) <= sizeof(unsigned long)) {
+#endif
+    unsigned long v;
+    res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else if (sizeof(size_t) <= sizeof(unsigned long long)) {
+    unsigned long long v;
+    res = SWIG_AsVal_unsigned_SS_long_SS_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+  }
+#endif
   return res;
 }
 
 
-  #define SWIG_From_long   PyLong_FromLong 
+  #define SWIG_From_long   PyInt_FromLong 
+
+
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERNINLINE PyObject* 
+SWIG_From_long_SS_long  (long long value)
+{
+  return ((value < LONG_MIN) || (value > LONG_MAX)) ?
+    PyLong_FromLongLong(value) : PyInt_FromLong(static_cast< long >(value));
+}
+#endif
 
 
 SWIGINTERNINLINE PyObject *
 SWIG_From_ptrdiff_t  (ptrdiff_t value)
 {    
-  return SWIG_From_long  (static_cast< long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(ptrdiff_t) <= sizeof(long)) {
+#endif
+    return SWIG_From_long  (static_cast< long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else {
+    /* assume sizeof(ptrdiff_t) <= sizeof(long long) */
+    return SWIG_From_long_SS_long  (static_cast< long long >(value));
+  }
+#endif
 }
 
 
@@ -3492,12 +3576,65 @@
 }
 
 
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERN int
+SWIG_AsVal_long_SS_long (PyObject *obj, long long *val)
+{
+  int res = SWIG_TypeError;
+  if (PyLong_Check(obj)) {
+    long long v = PyLong_AsLongLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+      res = SWIG_OverflowError;
+    }
+  } else {
+    long v;
+    res = SWIG_AsVal_long (obj,&v);
+    if (SWIG_IsOK(res)) {
+      if (val) *val = v;
+      return res;
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    const double mant_max = 1LL << DBL_MANT_DIG;
+    const double mant_min = -mant_max;
+    double d;
+    res = SWIG_AsVal_double (obj,&d);
+    if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, mant_min, mant_max))
+      return SWIG_OverflowError;
+    if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) {
+      if (val) *val = (long long)(d);
+      return SWIG_AddCast(res);
+    }
+    res = SWIG_TypeError;
+  }
+#endif
+  return res;
+}
+#endif
+
+
 SWIGINTERNINLINE int
 SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val)
 {
-  long v;
-  int res = SWIG_AsVal_long (obj, val ? &v : 0);
-  if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v);
+  int res = SWIG_TypeError;
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(ptrdiff_t) <= sizeof(long)) {
+#endif
+    long v;
+    res = SWIG_AsVal_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v);
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else if (sizeof(ptrdiff_t) <= sizeof(long long)) {
+    long long v;
+    res = SWIG_AsVal_long_SS_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v);
+  }
+#endif
   return res;
 }
 
@@ -3535,8 +3672,21 @@
     return traits<typename noconst_traits<Type >::noconst_type >::type_name();
   }
 
-  template <class Type>
-  struct traits_info {
+  template <class Type> struct traits_info {
+    static swig_type_info *type_query(std::string name) {
+      name += " *";
+      return SWIG_TypeQuery(name.c_str());
+    }
+    static swig_type_info *type_info() {
+      static swig_type_info *info = type_query(type_name<Type>());
+      return info;
+    }
+  };
+
+  /*
+    Partial specialization for pointers (traits_info)
+  */
+  template <class Type> struct traits_info<Type *> {
     static swig_type_info *type_query(std::string name) {
       name += " *";
       return SWIG_TypeQuery(name.c_str());
@@ -3553,7 +3703,7 @@
   }
 
   /*
-    Partial specialization for pointers
+    Partial specialization for pointers (traits)
   */
   template <class Type> struct traits <Type *> {
     typedef pointer_category category;
@@ -3623,7 +3773,8 @@
   struct traits_asptr {   
     static int asptr(PyObject *obj, Type **val) {
       Type *p;
-      int res = SWIG_ConvertPtr(obj, (void**)&p, type_info<Type>(), 0);
+      swig_type_info *descriptor = type_info<Type>();
+      int res = descriptor ? SWIG_ConvertPtr(obj, (void **)&p, descriptor, 0) : SWIG_ERROR;
       if (SWIG_IsOK(res)) {
 	if (val) *val = p;
       }
@@ -3771,7 +3922,7 @@
 
 namespace std {
   template <>
-  struct less <PyObject *>: public binary_function<PyObject *, PyObject *, bool>
+  struct less <PyObject *>
   {
     bool
     operator()(PyObject * v, PyObject *w) const
@@ -3796,7 +3947,7 @@
   };
 
   template <>
-  struct less <swig::SwigPtr_PyObject>: public binary_function<swig::SwigPtr_PyObject, swig::SwigPtr_PyObject, bool>
+  struct less <swig::SwigPtr_PyObject>
   {
     bool
     operator()(const swig::SwigPtr_PyObject& v, const swig::SwigPtr_PyObject& w) const
@@ -3806,7 +3957,7 @@
   };
 
   template <>
-  struct less <swig::SwigVar_PyObject>: public binary_function<swig::SwigVar_PyObject, swig::SwigVar_PyObject, bool>
+  struct less <swig::SwigVar_PyObject>
   {
     bool
     operator()(const swig::SwigVar_PyObject& v, const swig::SwigVar_PyObject& w) const
@@ -3869,7 +4020,7 @@
     if (step == 0) {
       throw std::invalid_argument("slice step cannot be zero");
     } else if (step > 0) {
-      // Required range: 0 <= i < size, 0 <= j < size
+      // Required range: 0 <= i < size, 0 <= j < size, i <= j
       if (i < 0) {
         ii = 0;
       } else if (i < (Difference)size) {
@@ -3877,13 +4028,15 @@
       } else if (insert && (i >= (Difference)size)) {
         ii = (Difference)size;
       }
-      if ( j < 0 ) {
+      if (j < 0) {
         jj = 0;
       } else {
         jj = (j < (Difference)size) ? j : (Difference)size;
       }
+      if (jj < ii)
+        jj = ii;
     } else {
-      // Required range: -1 <= i < size-1, -1 <= j < size-1
+      // Required range: -1 <= i < size-1, -1 <= j < size-1, i >= j
       if (i < -1) {
         ii = -1;
       } else if (i < (Difference) size) {
@@ -3896,6 +4049,8 @@
       } else {
         jj = (j < (Difference)size ) ? j : (Difference)(size-1);
       }
+      if (ii < jj)
+        ii = jj;
     }
   }
 
@@ -3921,6 +4076,13 @@
     seq->erase(position);
   }
 
+  template <class Sequence>
+  struct traits_reserve {
+    static void reserve(Sequence & /*seq*/, typename Sequence::size_type /*n*/) {
+      // This should be specialized for types that support reserve
+    }
+  };
+
   template <class Sequence, class Difference>
   inline Sequence*
   getslice(const Sequence* self, Difference i, Difference j, Py_ssize_t step) {
@@ -3938,6 +4100,7 @@
         return new Sequence(sb, se);
       } else {
         Sequence *sequence = new Sequence();
+        swig::traits_reserve<Sequence>::reserve(*sequence, (jj - ii + step - 1) / step);
         typename Sequence::const_iterator it = sb;
         while (it!=se) {
           sequence->push_back(*it);
@@ -3948,17 +4111,16 @@
       } 
     } else {
       Sequence *sequence = new Sequence();
-      if (ii > jj) {
-        typename Sequence::const_reverse_iterator sb = self->rbegin();
-        typename Sequence::const_reverse_iterator se = self->rbegin();
-        std::advance(sb,size-ii-1);
-        std::advance(se,size-jj-1);
-        typename Sequence::const_reverse_iterator it = sb;
-        while (it!=se) {
-          sequence->push_back(*it);
-          for (Py_ssize_t c=0; c<-step && it!=se; ++c)
-            it++;
-        }
+      swig::traits_reserve<Sequence>::reserve(*sequence, (ii - jj - step - 1) / -step);
+      typename Sequence::const_reverse_iterator sb = self->rbegin();
+      typename Sequence::const_reverse_iterator se = self->rbegin();
+      std::advance(sb,size-ii-1);
+      std::advance(se,size-jj-1);
+      typename Sequence::const_reverse_iterator it = sb;
+      while (it!=se) {
+        sequence->push_back(*it);
+        for (Py_ssize_t c=0; c<-step && it!=se; ++c)
+          it++;
       }
       return sequence;
     }
@@ -3972,12 +4134,11 @@
     Difference jj = 0;
     swig::slice_adjust(i, j, step, size, ii, jj, true);
     if (step > 0) {
-      if (jj < ii)
-        jj = ii;
       if (step == 1) {
         size_t ssize = jj - ii;
         if (ssize <= is.size()) {
           // expanding/staying the same size
+          swig::traits_reserve<Sequence>::reserve(*self, self->size() - ssize + is.size());
           typename Sequence::iterator sb = self->begin();
           typename InputSeq::const_iterator isit = is.begin();
           std::advance(sb,ii);
@@ -4011,8 +4172,6 @@
         }
       }
     } else {
-      if (jj > ii)
-        jj = ii;
       size_t replacecount = (ii - jj - step - 1) / -step;
       if (is.size() != replacecount) {
         char msg[1024];
@@ -4038,37 +4197,33 @@
     Difference jj = 0;
     swig::slice_adjust(i, j, step, size, ii, jj, true);
     if (step > 0) {
-      if (jj > ii) {
-        typename Sequence::iterator sb = self->begin();
-        std::advance(sb,ii);
-        if (step == 1) {
-          typename Sequence::iterator se = self->begin();
-          std::advance(se,jj);
-          self->erase(sb,se);
-        } else {
-          typename Sequence::iterator it = sb;
-          size_t delcount = (jj - ii + step - 1) / step;
-          while (delcount) {
-            it = self->erase(it);
-            for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
-              it++;
-            delcount--;
-          }
-        }
-      }
-    } else {
-      if (ii > jj) {
-        typename Sequence::reverse_iterator sb = self->rbegin();
-        std::advance(sb,size-ii-1);
-        typename Sequence::reverse_iterator it = sb;
-        size_t delcount = (ii - jj - step - 1) / -step;
+      typename Sequence::iterator sb = self->begin();
+      std::advance(sb,ii);
+      if (step == 1) {
+        typename Sequence::iterator se = self->begin();
+        std::advance(se,jj);
+        self->erase(sb,se);
+      } else {
+        typename Sequence::iterator it = sb;
+        size_t delcount = (jj - ii + step - 1) / step;
         while (delcount) {
-          it = typename Sequence::reverse_iterator(self->erase((++it).base()));
-          for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
+          it = self->erase(it);
+          for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
             it++;
           delcount--;
         }
       }
+    } else {
+      typename Sequence::reverse_iterator sb = self->rbegin();
+      std::advance(sb,size-ii-1);
+      typename Sequence::reverse_iterator it = sb;
+      size_t delcount = (ii - jj - step - 1) / -step;
+      while (delcount) {
+        it = typename Sequence::reverse_iterator(self->erase((++it).base()));
+        for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
+          it++;
+        delcount--;
+      }
     }
   }
 }
@@ -4524,16 +4679,6 @@
 }
 
 
-#include <limits.h>
-#if !defined(SWIG_NO_LLONG_MAX)
-# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
-#   define LLONG_MAX __LONG_LONG_MAX__
-#   define LLONG_MIN (-LLONG_MAX - 1LL)
-#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
-# endif
-#endif
-
-
 SWIGINTERN int
 SWIG_AsVal_unsigned_SS_int (PyObject * obj, unsigned int *val)
 {
@@ -4597,8 +4742,8 @@
     static int asptr(PyObject *obj, sequence **seq) {
       if (obj == Py_None || SWIG_Python_GetSwigThis(obj)) {
 	sequence *p;
-	if (::SWIG_ConvertPtr(obj,(void**)&p,
-			      swig::type_info<sequence>(),0) == SWIG_OK) {
+	swig_type_info *descriptor = swig::type_info<sequence>();
+	if (descriptor && SWIG_IsOK(::SWIG_ConvertPtr(obj, (void **)&p, descriptor, 0))) {
 	  if (seq) *seq = p;
 	  return SWIG_OLDOBJ;
 	}
@@ -4637,7 +4782,7 @@
 #ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS
       swig_type_info *desc = swig::type_info<sequence>();
       if (desc && desc->clientdata) {
-	return SWIG_NewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN);
+	return SWIG_InternalNewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN);
       }
 #endif
       size_type size = seq.size();
@@ -4659,6 +4804,13 @@
 
   namespace swig {
     template <class T>
+    struct traits_reserve<std::vector<T> > {
+      static void reserve(std::vector<T> &seq, typename std::vector<T>::size_type n) {
+        seq.reserve(n);
+      }
+    };
+
+    template <class T>
     struct traits_asptr<std::vector<T> >  {
       static int asptr(PyObject *obj, std::vector<T> **vec) {
 	return traits_asptr_stdseq<std::vector<T> >::asptr(obj, vec);
@@ -4700,14 +4852,33 @@
 SWIG_From_unsigned_SS_long  (unsigned long value)
 {
   return (value > LONG_MAX) ?
-    PyLong_FromUnsignedLong(value) : PyLong_FromLong(static_cast< long >(value)); 
+    PyLong_FromUnsignedLong(value) : PyInt_FromLong(static_cast< long >(value));
 }
 
 
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERNINLINE PyObject* 
+SWIG_From_unsigned_SS_long_SS_long  (unsigned long long value)
+{
+  return (value > LONG_MAX) ?
+    PyLong_FromUnsignedLongLong(value) : PyInt_FromLong(static_cast< long >(value));
+}
+#endif
+
+
 SWIGINTERNINLINE PyObject *
 SWIG_From_size_t  (size_t value)
 {    
-  return SWIG_From_unsigned_SS_long  (static_cast< unsigned long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(size_t) <= sizeof(unsigned long)) {
+#endif
+    return SWIG_From_unsigned_SS_long  (static_cast< unsigned long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else {
+    /* assume sizeof(size_t) <= sizeof(unsigned long long) */
+    return SWIG_From_unsigned_SS_long_SS_long  (static_cast< unsigned long long >(value));
+  }
+#endif
 }
 
 SWIGINTERN std::vector< unsigned int,std::allocator< unsigned int > > *std_vector_Sl_unsigned_SS_int_Sg____getslice__(std::vector< unsigned int > *self,std::vector< unsigned int >::difference_type i,std::vector< unsigned int >::difference_type j){
@@ -4807,13 +4978,18 @@
 SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
 {
 #if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+  if (PyBytes_Check(obj))
+#else
   if (PyUnicode_Check(obj))
+#endif
 #else  
   if (PyString_Check(obj))
 #endif
   {
     char *cstr; Py_ssize_t len;
 #if PY_VERSION_HEX>=0x03000000
+#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
     if (!alloc && cptr) {
         /* We can't allow converting without allocation, since the internal
            representation of string in Python 3 is UCS-2/UCS-4 but we require
@@ -4822,8 +4998,9 @@
         return SWIG_RuntimeError;
     }
     obj = PyUnicode_AsUTF8String(obj);
-    PyBytes_AsStringAndSize(obj, &cstr, &len);
     if(alloc) *alloc = SWIG_NEWOBJ;
+#endif
+    PyBytes_AsStringAndSize(obj, &cstr, &len);
 #else
     PyString_AsStringAndSize(obj, &cstr, &len);
 #endif
@@ -4844,26 +5021,34 @@
 	if (*alloc == SWIG_NEWOBJ) 
 #endif
 	{
-	  *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+	  *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
 	  *alloc = SWIG_NEWOBJ;
 	} else {
 	  *cptr = cstr;
 	  *alloc = SWIG_OLDOBJ;
 	}
       } else {
-	#if PY_VERSION_HEX>=0x03000000
-	assert(0); /* Should never reach here in Python 3 */
-	#endif
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+	*cptr = PyBytes_AsString(obj);
+#else
+	assert(0); /* Should never reach here with Unicode strings in Python 3 */
+#endif
+#else
 	*cptr = SWIG_Python_str_AsChar(obj);
+#endif
       }
     }
     if (psize) *psize = len + 1;
-#if PY_VERSION_HEX>=0x03000000
+#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
     Py_XDECREF(obj);
 #endif
     return SWIG_OK;
   } else {
 #if defined(SWIG_PYTHON_2_UNICODE)
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once"
+#endif
 #if PY_VERSION_HEX<0x03000000
     if (PyUnicode_Check(obj)) {
       char *cstr; Py_ssize_t len;
@@ -4874,7 +5059,7 @@
       if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
         if (cptr) {
           if (alloc) *alloc = SWIG_NEWOBJ;
-          *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+          *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
         }
         if (psize) *psize = len + 1;
 
@@ -4929,11 +5114,15 @@
 	SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
     } else {
 #if PY_VERSION_HEX >= 0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+      return PyBytes_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#else
 #if PY_VERSION_HEX >= 0x03010000
       return PyUnicode_DecodeUTF8(carray, static_cast< Py_ssize_t >(size), "surrogateescape");
 #else
       return PyUnicode_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
 #endif
+#endif
 #else
       return PyString_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
 #endif
@@ -5805,7 +5994,7 @@
 
 SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -7723,7 +7912,7 @@
 
 SWIGINTERN PyObject *UIntVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -11595,7 +11784,6 @@
     static int type_init = 0;
     if (!type_init) {
       const PyTypeObject tmp = {
-        /* PyObject header changed in Python 3 */
 #if PY_VERSION_HEX >= 0x03000000
         PyVarObject_HEAD_INIT(NULL, 0)
 #else
@@ -11827,13 +12015,13 @@
   static PyGetSetDef thisown_getset_def = {
     (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure
   };
-  PyObject *metatype_args;
   PyTypeObject *builtin_pytype;
   int builtin_base_count;
   swig_type_info *builtin_basetype;
   PyObject *tuple;
   PyGetSetDescrObject *static_getset;
   PyTypeObject *metatype;
+  PyTypeObject *swigpyobject;
   SwigPyClientData *cd;
   PyObject *public_interface, *public_symbol;
   PyObject *this_descr;
@@ -11848,14 +12036,9 @@
   (void)static_getset;
   (void)self;
   
-  /* metatype is used to implement static member variables. */
-  metatype_args = Py_BuildValue("(s(O){})", "SwigPyObjectType", &PyType_Type);
-  assert(metatype_args);
-  metatype = (PyTypeObject *) PyType_Type.tp_call((PyObject *) &PyType_Type, metatype_args, NULL);
+  /* Metaclass is used to implement static member variables */
+  metatype = SwigPyObjectType();
   assert(metatype);
-  Py_DECREF(metatype_args);
-  metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro;
-  assert(PyType_Ready(metatype) >= 0);
 #endif
   
   /* Fix SwigMethods to carry the callback ptrs when needed */
@@ -11873,13 +12056,15 @@
   SWIG_InitializeModule(0);
   
 #ifdef SWIGPYTHON_BUILTIN
+  swigpyobject = SwigPyObject_TypeOnce();
+  
   SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject");
   assert(SwigPyObject_stype);
   cd = (SwigPyClientData*) SwigPyObject_stype->clientdata;
   if (!cd) {
     SwigPyObject_stype->clientdata = &SwigPyObject_clientdata;
-    SwigPyObject_clientdata.pytype = SwigPyObject_TypeOnce();
-  } else if (SwigPyObject_TypeOnce()->tp_basicsize != cd->pytype->tp_basicsize) {
+    SwigPyObject_clientdata.pytype = swigpyobject;
+  } else if (swigpyobject->tp_basicsize != cd->pytype->tp_basicsize) {
     PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules.");
 # if PY_VERSION_HEX >= 0x03000000
     return NULL;
diff --git a/src/API/user.h b/src/API/user.h
index 4e023a1..2f366ba 100644
--- a/src/API/user.h
+++ b/src/API/user.h
@@ -856,7 +856,7 @@
 /**************************** FUNCTION DECLARATIONS ***************************/
 
 /* Include compatibility mode macro definitions. */
-//#include "vpi_compatibility.h"
+//#include "API/vpi_compatibility.h"
 
 /* callback related */
 
diff --git a/src/API/vpi_user.h b/src/API/vpi_user.h
index 4e023a1..2f366ba 100644
--- a/src/API/vpi_user.h
+++ b/src/API/vpi_user.h
@@ -856,7 +856,7 @@
 /**************************** FUNCTION DECLARATIONS ***************************/
 
 /* Include compatibility mode macro definitions. */
-//#include "vpi_compatibility.h"
+//#include "API/vpi_compatibility.h"
 
 /* callback related */
 
diff --git a/src/Cache/Cache.cpp b/src/Cache/Cache.cpp
index eec5dbc..0b3fb5f 100644
--- a/src/Cache/Cache.cpp
+++ b/src/Cache/Cache.cpp
@@ -26,10 +26,10 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <iostream>
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "Cache.h"
-#include "../CommandLine/CommandLineParser.hpp"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Cache/Cache.h"
+#include "CommandLine/CommandLineParser.h"
 #include "flatbuffers/util.h"
 
 using namespace SURELOG;
diff --git a/src/Cache/Cache.h b/src/Cache/Cache.h
index e8535b9..2ee73a4 100644
--- a/src/Cache/Cache.h
+++ b/src/Cache/Cache.h
@@ -25,7 +25,7 @@
 #define CACHE_H
 
 #include "flatbuffers/flatbuffers.h"
-#include "header_generated.h"
+#include "Cache/header_generated.h"
 #include <cstdio>  // For printing and file access.
 
 namespace SURELOG {
diff --git a/src/Cache/PPCache.cpp b/src/Cache/PPCache.cpp
index 7e8eab3..7bfbfe8 100644
--- a/src/Cache/PPCache.cpp
+++ b/src/Cache/PPCache.cpp
@@ -20,24 +20,24 @@
  *
  * Created on April 23, 2017, 8:49 PM
  */
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/FileUtils.h"
-#include "Cache.h"
-#include "PPCache.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Utils/StringUtils.h"
+#include "Utils/FileUtils.h"
+#include "Cache/Cache.h"
+#include "Cache/PPCache.h"
 #include "flatbuffers/util.h"
 #include <cstdio>
 #include <ctime>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <algorithm>
-#include "../Package/Precompiled.h"
+#include "Package/Precompiled.h"
 using namespace SURELOG;
 
 PPCache::PPCache(PreprocessFile* pp) : m_pp(pp), m_isPrecompiled(false) {}
diff --git a/src/Cache/PPCache.h b/src/Cache/PPCache.h
index 491ea5e..3060f5d 100644
--- a/src/Cache/PPCache.h
+++ b/src/Cache/PPCache.h
@@ -25,9 +25,9 @@
 #define PPCACHE_H
 
 #include "flatbuffers/flatbuffers.h"
-#include "preproc_generated.h"
+#include "Cache/preproc_generated.h"
 #include <cstdio>  // For printing and file access.
-#include "Cache.h"
+#include "Cache/Cache.h"
 
 namespace SURELOG {
 
diff --git a/src/Cache/ParseCache.cpp b/src/Cache/ParseCache.cpp
index 6fbe613..ac51f70 100644
--- a/src/Cache/ParseCache.cpp
+++ b/src/Cache/ParseCache.cpp
@@ -20,25 +20,25 @@
  *
  * Created on April 29, 2017, 4:20 PM
  */
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/FileUtils.h"
-#include "Cache.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Utils/StringUtils.h"
+#include "Utils/FileUtils.h"
+#include "Cache/Cache.h"
 #include "flatbuffers/util.h"
 #include <cstdio>
 #include <ctime>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include "ParseCache.h"
-#include "../Design/FileContent.h"
-#include "../Package/Precompiled.h"
+#include "Cache/ParseCache.h"
+#include "Design/FileContent.h"
+#include "Package/Precompiled.h"
 using namespace SURELOG;
 
 ParseCache::ParseCache(ParseFile* parser)
diff --git a/src/Cache/ParseCache.h b/src/Cache/ParseCache.h
index 6d8b714..d7c80c8 100644
--- a/src/Cache/ParseCache.h
+++ b/src/Cache/ParseCache.h
@@ -25,9 +25,9 @@
 #define PARSECACHE_H
 
 #include "flatbuffers/flatbuffers.h"
-#include "parser_generated.h"
+#include "Cache/parser_generated.h"
 #include <cstdio>  // For printing and file access.
-#include "Cache.h"
+#include "Cache/Cache.h"
 
 namespace SURELOG {
 
diff --git a/src/Cache/PythonAPICache.cpp b/src/Cache/PythonAPICache.cpp
index 6437d5c..a12148c 100644
--- a/src/Cache/PythonAPICache.cpp
+++ b/src/Cache/PythonAPICache.cpp
@@ -21,17 +21,17 @@
  * Created on May 28, 2017, 10:49 PM
  */
 
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/FileUtils.h"
-#include "Cache.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Utils/StringUtils.h"
+#include "Utils/FileUtils.h"
+#include "Cache/Cache.h"
 #include "flatbuffers/util.h"
 #include <cstdio>
 #include <ctime>
@@ -41,9 +41,9 @@
 #include "antlr4-runtime.h"
 using namespace antlr4;
 
-#include "../API/PythonAPI.h"
-#include "PythonAPICache.h"
-#include "../SourceCompile/PythonListen.h"
+#include "API/PythonAPI.h"
+#include "Cache/PythonAPICache.h"
+#include "SourceCompile/PythonListen.h"
 
 using namespace SURELOG;
 
diff --git a/src/Cache/PythonAPICache.h b/src/Cache/PythonAPICache.h
index c377582..60197a5 100644
--- a/src/Cache/PythonAPICache.h
+++ b/src/Cache/PythonAPICache.h
@@ -25,9 +25,9 @@
 #define PYTHONAPICACHE_H
 
 #include "flatbuffers/flatbuffers.h"
-#include "python_api_generated.h"
+#include "Cache/python_api_generated.h"
 #include <cstdio>
-#include "Cache.h"
+#include "Cache/Cache.h"
 
 namespace SURELOG {
 
diff --git a/src/CommandLine/CommandLineParser.cpp b/src/CommandLine/CommandLineParser.cpp
index 9b7e855..7ba34ca 100644
--- a/src/CommandLine/CommandLineParser.cpp
+++ b/src/CommandLine/CommandLineParser.cpp
@@ -27,14 +27,14 @@
 #include <sstream>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include "CommandLineParser.hpp"
-#include "../Utils/StringUtils.h"
-#include "../Utils/FileUtils.h"
+#include "CommandLine/CommandLineParser.h"
+#include "Utils/StringUtils.h"
+#include "Utils/FileUtils.h"
 
 #include "antlr4-runtime.h"
 using namespace antlr4;
 
-#include "../API/PythonAPI.h"
+#include "API/PythonAPI.h"
 
 #include <ctime>
 #include <thread>
diff --git a/src/CommandLine/CommandLineParser.hpp b/src/CommandLine/CommandLineParser.h
similarity index 98%
rename from src/CommandLine/CommandLineParser.hpp
rename to src/CommandLine/CommandLineParser.h
index 7ebe7bd..cec2ed5 100644
--- a/src/CommandLine/CommandLineParser.hpp
+++ b/src/CommandLine/CommandLineParser.h
@@ -26,8 +26,8 @@
 #include <string>
 #include <vector>
 #include <map>
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/ErrorContainer.h"
 
 namespace SURELOG {
 
diff --git a/src/Common/ClockingBlockHolder.cpp b/src/Common/ClockingBlockHolder.cpp
index 99b33ef..70b6c2b 100644
--- a/src/Common/ClockingBlockHolder.cpp
+++ b/src/Common/ClockingBlockHolder.cpp
@@ -21,7 +21,7 @@
  * Created on June 1, 2018, 9:08 PM
  */
 
-#include "ClockingBlockHolder.h"
+#include "Common/ClockingBlockHolder.h"
 
 using namespace SURELOG;
 
diff --git a/src/Common/ClockingBlockHolder.h b/src/Common/ClockingBlockHolder.h
index ee6fc73..24d1d6d 100644
--- a/src/Common/ClockingBlockHolder.h
+++ b/src/Common/ClockingBlockHolder.h
@@ -24,9 +24,9 @@
 #ifndef CLOCKINGBLOCKHOLDER_H
 #define CLOCKINGBLOCKHOLDER_H
 #include <map>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/Signal.h"
-#include "../Design/ClockingBlock.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/Signal.h"
+#include "Design/ClockingBlock.h"
 
 namespace SURELOG {
 
diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp
index be559f4..c7376ce 100644
--- a/src/Config/Config.cpp
+++ b/src/Config/Config.cpp
@@ -20,9 +20,9 @@
  *
  * Created on February 10, 2018, 11:09 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "Config.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Config/Config.h"
 using namespace SURELOG;
 
 Config::~Config() {}
diff --git a/src/Config/ConfigSet.cpp b/src/Config/ConfigSet.cpp
index c88e02b..8439cc0 100644
--- a/src/Config/ConfigSet.cpp
+++ b/src/Config/ConfigSet.cpp
@@ -20,9 +20,9 @@
  *
  * Created on February 10, 2018, 11:14 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "ConfigSet.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Config/ConfigSet.h"
 using namespace SURELOG;
 
 ConfigSet::~ConfigSet() {}
diff --git a/src/Config/ConfigSet.h b/src/Config/ConfigSet.h
index e999c49..5eabd78 100644
--- a/src/Config/ConfigSet.h
+++ b/src/Config/ConfigSet.h
@@ -23,7 +23,7 @@
 
 #ifndef CONFIGSET_H
 #define CONFIGSET_H
-#include "Config.h"
+#include "Config/Config.h"
 #include <vector>
 
 namespace SURELOG {
diff --git a/src/Design/ClockingBlock.cpp b/src/Design/ClockingBlock.cpp
index 5e012fc..ef42526 100644
--- a/src/Design/ClockingBlock.cpp
+++ b/src/Design/ClockingBlock.cpp
@@ -20,10 +20,10 @@
  *
  * Created on May 26, 2018, 11:07 AM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "FileContent.h"
-#include "Signal.h"
-#include "ClockingBlock.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/Signal.h"
+#include "Design/ClockingBlock.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/DataType.cpp b/src/Design/DataType.cpp
index b8d931e..326ddb8 100644
--- a/src/Design/DataType.cpp
+++ b/src/Design/DataType.cpp
@@ -20,10 +20,10 @@
  *
  * Created on June 14, 2018, 10:07 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "FileContent.h"
-#include "../Expression/Value.h"
-#include "DataType.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Expression/Value.h"
+#include "Design/DataType.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/DefParam.cpp b/src/Design/DefParam.cpp
index 3f3dbc1..2e8f718 100644
--- a/src/Design/DefParam.cpp
+++ b/src/Design/DefParam.cpp
@@ -21,10 +21,10 @@
  * Created on January 7, 2018, 8:55 PM
  */
 
-#include "../SourceCompile/SymbolTable.h"
-#include "../Library/Library.h"
-#include "FileContent.h"
-#include "DefParam.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "Design/DefParam.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/DefParam.h b/src/Design/DefParam.h
index 6be1311..8af25d9 100644
--- a/src/Design/DefParam.h
+++ b/src/Design/DefParam.h
@@ -23,7 +23,7 @@
 
 #ifndef DEFPARAM_H
 #define DEFPARAM_H
-#include "../Expression/Value.h"
+#include "Expression/Value.h"
 #include <map>
 
 namespace SURELOG {
diff --git a/src/Design/Design.cpp b/src/Design/Design.cpp
index 40b4867..e7f32b5 100644
--- a/src/Design/Design.cpp
+++ b/src/Design/Design.cpp
@@ -22,23 +22,23 @@
  */
 #include <queue>
 #include <set>
-#include "../Utils/StringUtils.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../Utils/FileUtils.h"
-#include "Design.h"
-#include "../Testbench/ClassDefinition.h"
+#include "Utils/StringUtils.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Utils/FileUtils.h"
+#include "Design/Design.h"
+#include "Testbench/ClassDefinition.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Design.h b/src/Design/Design.h
index 1fbd958..d22dba4 100644
--- a/src/Design/Design.h
+++ b/src/Design/Design.h
@@ -23,13 +23,13 @@
 
 #ifndef DESIGN_H
 #define DESIGN_H
-#include "ModuleDefinition.h"
-#include "ModuleInstance.h"
-#include "DefParam.h"
-#include "../Library/LibrarySet.h"
-#include "../Config/ConfigSet.h"
-#include "../Package/Package.h"
-#include "../Testbench/Program.h"
+#include "Design/ModuleDefinition.h"
+#include "Design/ModuleInstance.h"
+#include "Design/DefParam.h"
+#include "Library/LibrarySet.h"
+#include "Config/ConfigSet.h"
+#include "Package/Package.h"
+#include "Testbench/Program.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/DesignComponent.cpp b/src/Design/DesignComponent.cpp
index 32e4117..148fbb6 100644
--- a/src/Design/DesignComponent.cpp
+++ b/src/Design/DesignComponent.cpp
@@ -21,12 +21,12 @@
  * Created on March 25, 2018, 10:27 PM
  */
 #include <vector>
-#include "../SourceCompile/SymbolTable.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "FileContent.h"
-#include "DesignComponent.h"
-#include "Function.h"
-#include "../Testbench/Variable.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/FileContent.h"
+#include "Design/DesignComponent.h"
+#include "Design/Function.h"
+#include "Testbench/Variable.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/DesignComponent.h b/src/Design/DesignComponent.h
index 31625dc..fcfd01a 100644
--- a/src/Design/DesignComponent.h
+++ b/src/Design/DesignComponent.h
@@ -25,11 +25,11 @@
 #define DESIGNCOMPONENT_H
 #include <vector>
 #include <map>
-#include "../SourceCompile/VObjectTypes.h"
-#include "FileCNodeId.h"
-#include "DataType.h"
-#include "../Testbench/TypeDef.h"
-#include "ValuedComponentI.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/FileCNodeId.h"
+#include "Design/DataType.h"
+#include "Testbench/TypeDef.h"
+#include "Design/ValuedComponentI.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/DesignElement.cpp b/src/Design/DesignElement.cpp
index c25bc10..9a975bf 100644
--- a/src/Design/DesignElement.cpp
+++ b/src/Design/DesignElement.cpp
@@ -20,9 +20,9 @@
  *
  * Created on June 8, 2017, 8:05 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "TimeInfo.h"
-#include "DesignElement.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/TimeInfo.h"
+#include "Design/DesignElement.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Enum.cpp b/src/Design/Enum.cpp
index 75d533e..1d9ccd6 100644
--- a/src/Design/Enum.cpp
+++ b/src/Design/Enum.cpp
@@ -20,9 +20,9 @@
  *
  * Created on May 19, 2019, 11:55 AM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "Enum.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/Enum.h"
 using namespace SURELOG;
 
 Enum::Enum(std::string name, FileContent* fC, NodeId nodeId,
diff --git a/src/Design/Enum.h b/src/Design/Enum.h
index 83e0814..2ab5256 100644
--- a/src/Design/Enum.h
+++ b/src/Design/Enum.h
@@ -25,7 +25,7 @@
 #define ENUM_H
 #include <string>
 #include <map>
-#include "DataType.h"
+#include "Design/DataType.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/FileCNodeId.h b/src/Design/FileCNodeId.h
index 05a5562..cc286ee 100644
--- a/src/Design/FileCNodeId.h
+++ b/src/Design/FileCNodeId.h
@@ -24,7 +24,7 @@
 #ifndef FILECNODEID_H
 #define FILECNODEID_H
 
-#include "../SourceCompile/SymbolTable.h"
+#include "SourceCompile/SymbolTable.h"
 
 namespace SURELOG {
 class FileContent;
diff --git a/src/Design/FileContent.cpp b/src/Design/FileContent.cpp
index 30c6f88..5eb50ec 100644
--- a/src/Design/FileContent.cpp
+++ b/src/Design/FileContent.cpp
@@ -21,12 +21,12 @@
  * Created on June 8, 2017, 8:22 PM
  */
 
-#include "../SourceCompile/SymbolTable.h"
-#include "TimeInfo.h"
-#include "DesignElement.h"
-#include "../Library/Library.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/TimeInfo.h"
+#include "Design/DesignElement.h"
+#include "Library/Library.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Design/FileContent.h"
 #include <queue>
 #include <iostream>
 #include <stack>
diff --git a/src/Design/FileContent.h b/src/Design/FileContent.h
index 06378e1..a0c0136 100644
--- a/src/Design/FileContent.h
+++ b/src/Design/FileContent.h
@@ -26,12 +26,12 @@
 #include <vector>
 #include <map>
 #include <unordered_set>
-#include "TimeInfo.h"
-#include "DesignElement.h"
-#include "DesignComponent.h"
-#include "ValuedComponentI.h"
-#include "VObject.h"
-#include "../SourceCompile/VObjectTypes.h"
+#include "Design/TimeInfo.h"
+#include "Design/DesignElement.h"
+#include "Design/DesignComponent.h"
+#include "Design/ValuedComponentI.h"
+#include "Design/VObject.h"
+#include "SourceCompile/VObjectTypes.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Function.cpp b/src/Design/Function.cpp
index 69bc44b..df957d1 100644
--- a/src/Design/Function.cpp
+++ b/src/Design/Function.cpp
@@ -21,7 +21,7 @@
  * Created on February 21, 2019, 8:19 PM
  */
 
-#include "Function.h"
+#include "Design/Function.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Function.h b/src/Design/Function.h
index abdeceb..007391f 100644
--- a/src/Design/Function.h
+++ b/src/Design/Function.h
@@ -24,15 +24,15 @@
 #ifndef FUNCTION_H
 #define FUNCTION_H
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "FileContent.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "DataType.h"
-#include "Scope.h"
-#include "TfPortItem.h"
-#include "Statement.h"
-#include "../Testbench/Variable.h"
-#include "../DesignCompile/CompileHelper.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/DataType.h"
+#include "Design/Scope.h"
+#include "Design/TfPortItem.h"
+#include "Design/Statement.h"
+#include "Testbench/Variable.h"
+#include "DesignCompile/CompileHelper.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Instance.cpp b/src/Design/Instance.cpp
index 405fec5..948bcbb 100644
--- a/src/Design/Instance.cpp
+++ b/src/Design/Instance.cpp
@@ -21,7 +21,7 @@
  * Created on September 6, 2017, 10:57 PM
  */
 
-#include "Instance.h"
+#include "Design/Instance.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/ModuleDefinition.cpp b/src/Design/ModuleDefinition.cpp
index 8c4747d..89da227 100644
--- a/src/Design/ModuleDefinition.cpp
+++ b/src/Design/ModuleDefinition.cpp
@@ -21,10 +21,10 @@
  * Created on October 20, 2017, 10:29 PM
  */
 
-#include "../SourceCompile/SymbolTable.h"
-#include "../Library/Library.h"
-#include "FileContent.h"
-#include "ModuleDefinition.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "Design/ModuleDefinition.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/ModuleDefinition.h b/src/Design/ModuleDefinition.h
index bd6dacf..9cd7d3b 100644
--- a/src/Design/ModuleDefinition.h
+++ b/src/Design/ModuleDefinition.h
@@ -24,12 +24,12 @@
 #ifndef MODULEDEFINITION_H
 #define MODULEDEFINITION_H
 #include <vector>
-#include "DesignComponent.h"
-#include "ValuedComponentI.h"
-#include "Signal.h"
-#include "ClockingBlock.h"
-#include "DataType.h"
-#include "../Common/ClockingBlockHolder.h"
+#include "Design/DesignComponent.h"
+#include "Design/ValuedComponentI.h"
+#include "Design/Signal.h"
+#include "Design/ClockingBlock.h"
+#include "Design/DataType.h"
+#include "Common/ClockingBlockHolder.h"
 
 namespace SURELOG {
 class CompileModule;
diff --git a/src/Design/ModuleInstance.cpp b/src/Design/ModuleInstance.cpp
index b86f778..ab5cb61 100644
--- a/src/Design/ModuleInstance.cpp
+++ b/src/Design/ModuleInstance.cpp
@@ -22,11 +22,11 @@
  */
 #include <string>
 #include <iostream>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Library/Library.h"
-#include "FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
 
-#include "ModuleInstance.h"
+#include "Design/ModuleInstance.h"
 using namespace SURELOG;
 
 ModuleInstance::ModuleInstance(DesignComponent* moduleDefinition,
diff --git a/src/Design/ModuleInstance.h b/src/Design/ModuleInstance.h
index 6675912..a0cce68 100644
--- a/src/Design/ModuleInstance.h
+++ b/src/Design/ModuleInstance.h
@@ -24,10 +24,10 @@
 #ifndef MODULEINSTANCE_H
 #define MODULEINSTANCE_H
 
-#include "ModuleDefinition.h"
-#include "../Expression/Value.h"
-#include "../Expression/ExprBuilder.h"
-#include "ValuedComponentI.h"
+#include "Design/ModuleDefinition.h"
+#include "Expression/Value.h"
+#include "Expression/ExprBuilder.h"
+#include "Design/ValuedComponentI.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Parameter.cpp b/src/Design/Parameter.cpp
index 7b22915..c81a6e7 100644
--- a/src/Design/Parameter.cpp
+++ b/src/Design/Parameter.cpp
@@ -21,7 +21,7 @@
  * Created on April 15, 2019, 8:03 PM
  */
 
-#include "Parameter.h"
+#include "Design/Parameter.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Parameter.h b/src/Design/Parameter.h
index d58338b..2b8ab5e 100644
--- a/src/Design/Parameter.h
+++ b/src/Design/Parameter.h
@@ -24,8 +24,8 @@
 #ifndef PARAMETER_H
 #define PARAMETER_H
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Scope.cpp b/src/Design/Scope.cpp
index 671079c..3f16017 100644
--- a/src/Design/Scope.cpp
+++ b/src/Design/Scope.cpp
@@ -21,7 +21,7 @@
  * Created on August 31, 2019, 11:24 AM
  */
 
-#include "Scope.h"
+#include "Design/Scope.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Scope.h b/src/Design/Scope.h
index bd6757b..34d9431 100644
--- a/src/Design/Scope.h
+++ b/src/Design/Scope.h
@@ -24,13 +24,13 @@
 #ifndef SCOPE_H
 #define SCOPE_H
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "FileContent.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "DataType.h"
-#include "TfPortItem.h"
-#include "../Testbench/Variable.h"
-#include "../DesignCompile/CompileHelper.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/DataType.h"
+#include "Design/TfPortItem.h"
+#include "Testbench/Variable.h"
+#include "DesignCompile/CompileHelper.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Signal.cpp b/src/Design/Signal.cpp
index 144ed8c..6834dc5 100644
--- a/src/Design/Signal.cpp
+++ b/src/Design/Signal.cpp
@@ -20,9 +20,9 @@
  *
  * Created on May 6, 2018, 5:32 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "FileContent.h"
-#include "Signal.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/Signal.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Signal.h b/src/Design/Signal.h
index 9bdd403..e6821ca 100644
--- a/src/Design/Signal.h
+++ b/src/Design/Signal.h
@@ -24,7 +24,7 @@
 #ifndef SIGNAL_H
 #define SIGNAL_H
 
-#include "FileContent.h"
+#include "Design/FileContent.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Statement.cpp b/src/Design/Statement.cpp
index b057995..1b95299 100644
--- a/src/Design/Statement.cpp
+++ b/src/Design/Statement.cpp
@@ -21,7 +21,7 @@
  * Created on May 25, 2019, 11:34 AM
  */
 
-#include "Statement.h"
+#include "Design/Statement.h"
 using namespace SURELOG;
 
 Statement::~Statement() {}
diff --git a/src/Design/Statement.h b/src/Design/Statement.h
index 35a036c..d200355 100644
--- a/src/Design/Statement.h
+++ b/src/Design/Statement.h
@@ -24,11 +24,11 @@
 #ifndef STATEMENT_H
 #define STATEMENT_H
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "FileContent.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "DataType.h"
-#include "Scope.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/DataType.h"
+#include "Design/Scope.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/Task.cpp b/src/Design/Task.cpp
index c4bcf63..92be2f1 100644
--- a/src/Design/Task.cpp
+++ b/src/Design/Task.cpp
@@ -21,7 +21,7 @@
  * Created on February 21, 2019, 8:19 PM
  */
 
-#include "Task.h"
+#include "Design/Task.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/Task.h b/src/Design/Task.h
index fa4bfe4..67d3345 100644
--- a/src/Design/Task.h
+++ b/src/Design/Task.h
@@ -24,9 +24,9 @@
 #ifndef TASK_H
 #define TASK_H
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "Function.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/Function.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/TfPortItem.cpp b/src/Design/TfPortItem.cpp
index 97f453e..2255eb0 100644
--- a/src/Design/TfPortItem.cpp
+++ b/src/Design/TfPortItem.cpp
@@ -22,11 +22,11 @@
  */
 
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Expression/Value.h"
-#include "DesignComponent.h"
-#include "FileContent.h"
-#include "TfPortItem.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Expression/Value.h"
+#include "Design/DesignComponent.h"
+#include "Design/FileContent.h"
+#include "Design/TfPortItem.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/TfPortItem.h b/src/Design/TfPortItem.h
index bcb3f99..96927d2 100644
--- a/src/Design/TfPortItem.h
+++ b/src/Design/TfPortItem.h
@@ -24,7 +24,7 @@
 #ifndef TFPORTITEM_H
 #define TFPORTITEM_H
 
-#include "../Testbench/Variable.h"
+#include "Testbench/Variable.h"
 
 namespace SURELOG {
 class Procedure;
diff --git a/src/Design/TimeInfo.cpp b/src/Design/TimeInfo.cpp
index 1efb73a..e30834d 100644
--- a/src/Design/TimeInfo.cpp
+++ b/src/Design/TimeInfo.cpp
@@ -21,8 +21,8 @@
  * Created on June 8, 2017, 8:27 PM
  */
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "TimeInfo.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/TimeInfo.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/VObject.cpp b/src/Design/VObject.cpp
index 79c595a..5089762 100644
--- a/src/Design/VObject.cpp
+++ b/src/Design/VObject.cpp
@@ -21,8 +21,8 @@
  * Created on June 14, 2017, 10:58 PM
  */
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "VObject.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/VObject.h"
 
 using namespace SURELOG;
 
diff --git a/src/Design/VObject.h b/src/Design/VObject.h
index b7a645b..ebdc016 100644
--- a/src/Design/VObject.h
+++ b/src/Design/VObject.h
@@ -24,8 +24,8 @@
 #ifndef VOBJECT_H
 #define VOBJECT_H
 
-#include "../SourceCompile/SymbolTable.h"
-#include "../SourceCompile/VObjectTypes.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/VObjectTypes.h"
 
 namespace SURELOG {
 
diff --git a/src/Design/ValuedComponentI.cpp b/src/Design/ValuedComponentI.cpp
index a49d58b..e95e366 100644
--- a/src/Design/ValuedComponentI.cpp
+++ b/src/Design/ValuedComponentI.cpp
@@ -22,8 +22,8 @@
  */
 
 #include <string>
-#include "../Expression/ExprBuilder.h"
-#include "ValuedComponentI.h"
+#include "Expression/ExprBuilder.h"
+#include "Design/ValuedComponentI.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/Builtin.cpp b/src/DesignCompile/Builtin.cpp
index 7d578a2..af15f1b 100644
--- a/src/DesignCompile/Builtin.cpp
+++ b/src/DesignCompile/Builtin.cpp
@@ -20,28 +20,28 @@
  *
  * Created on May 30, 2019, 6:36 PM
  */
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/Signal.h"
-#include "../Design/FileContent.h"
-#include "../Design/ClockingBlock.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../DesignCompile/CompileDesign.h"
-#include "../Testbench/ClassDefinition.h"
-#include "CompileClass.h"
-#include "Builtin.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/Signal.h"
+#include "Design/FileContent.h"
+#include "Design/ClockingBlock.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/CompileClass.h"
+#include "DesignCompile/Builtin.h"
 using namespace SURELOG;
 
 Builtin::~Builtin() {}
diff --git a/src/DesignCompile/CompileClass.cpp b/src/DesignCompile/CompileClass.cpp
index 79c807e..fc96c3e 100644
--- a/src/DesignCompile/CompileClass.cpp
+++ b/src/DesignCompile/CompileClass.cpp
@@ -20,27 +20,27 @@
  *
  * Created on June 7, 2018, 10:26 PM
  */
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/Signal.h"
-#include "../Design/FileContent.h"
-#include "../Design/ClockingBlock.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../DesignCompile/CompileDesign.h"
-#include "../Testbench/ClassDefinition.h"
-#include "CompileClass.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/Signal.h"
+#include "Design/FileContent.h"
+#include "Design/ClockingBlock.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/CompileClass.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileClass.h b/src/DesignCompile/CompileClass.h
index ec1ad44..938242e 100644
--- a/src/DesignCompile/CompileClass.h
+++ b/src/DesignCompile/CompileClass.h
@@ -24,7 +24,7 @@
 #ifndef COMPILECLASS_H
 #define COMPILECLASS_H
 
-#include "CompileHelper.h"
+#include "DesignCompile/CompileHelper.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/CompileDesign.cpp b/src/DesignCompile/CompileDesign.cpp
index e4adaed..bfbf170 100644
--- a/src/DesignCompile/CompileDesign.cpp
+++ b/src/DesignCompile/CompileDesign.cpp
@@ -20,32 +20,32 @@
  *
  * Created on July 1, 2017, 1:11 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../SourceCompile/ParseFile.h"
-#include "../Testbench/ClassDefinition.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "ResolveSymbols.h"
-#include "DesignElaboration.h"
-#include "UVMElaboration.h"
-#include "CompilePackage.h"
-#include "CompileModule.h"
-#include "CompileFileContent.h"
-#include "CompileProgram.h"
-#include "CompileClass.h"
-#include "Builtin.h"
-#include "PackageAndRootElaboration.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/ParseFile.h"
+#include "Testbench/ClassDefinition.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/ResolveSymbols.h"
+#include "DesignCompile/DesignElaboration.h"
+#include "DesignCompile/UVMElaboration.h"
+#include "DesignCompile/CompilePackage.h"
+#include "DesignCompile/CompileModule.h"
+#include "DesignCompile/CompileFileContent.h"
+#include "DesignCompile/CompileProgram.h"
+#include "DesignCompile/CompileClass.h"
+#include "DesignCompile/Builtin.h"
+#include "DesignCompile/PackageAndRootElaboration.h"
 
 #ifdef USETBB
 #include <tbb/task.h>
diff --git a/src/DesignCompile/CompileFileContent.cpp b/src/DesignCompile/CompileFileContent.cpp
index 7fb4e7e..4aff41c 100644
--- a/src/DesignCompile/CompileFileContent.cpp
+++ b/src/DesignCompile/CompileFileContent.cpp
@@ -20,25 +20,25 @@
  *
  * Created on March 28, 2018, 10:16 PM
  */
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "CompileFileContent.h"
-#include "CompileHelper.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/CompileFileContent.h"
+#include "DesignCompile/CompileHelper.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileFileContent.h b/src/DesignCompile/CompileFileContent.h
index 6823b40..c9f235e 100644
--- a/src/DesignCompile/CompileFileContent.h
+++ b/src/DesignCompile/CompileFileContent.h
@@ -24,7 +24,7 @@
 #ifndef COMPILEFILECONTENT_H
 #define COMPILEFILECONTENT_H
 
-#include "CompileHelper.h"
+#include "DesignCompile/CompileHelper.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/CompileHelper.cpp b/src/DesignCompile/CompileHelper.cpp
index 08c3ad0..20d1b51 100644
--- a/src/DesignCompile/CompileHelper.cpp
+++ b/src/DesignCompile/CompileHelper.cpp
@@ -21,18 +21,18 @@
  * Created on May 14, 2019, 8:03 PM
  */
 
-#include "../Expression/Value.h"
-#include "../Expression/ExprBuilder.h"
-#include "../Design/Enum.h"
-#include "../Design/Function.h"
-#include "../Testbench/Property.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../Design/Design.h"
-#include "CompileHelper.h"
+#include "Expression/Value.h"
+#include "Expression/ExprBuilder.h"
+#include "Design/Enum.h"
+#include "Design/Function.h"
+#include "Testbench/Property.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Design/Design.h"
+#include "DesignCompile/CompileHelper.h"
 #include <iostream>
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileHelper.h b/src/DesignCompile/CompileHelper.h
index 368a909..b1d0252 100644
--- a/src/DesignCompile/CompileHelper.h
+++ b/src/DesignCompile/CompileHelper.h
@@ -24,13 +24,13 @@
 #ifndef COMPILEHELPER_H
 #define COMPILEHELPER_H
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/DataType.h"
-#include "../Design/TfPortItem.h"
-#include "../Expression/ExprBuilder.h"
-#include "../ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/DataType.h"
+#include "Design/TfPortItem.h"
+#include "Expression/ExprBuilder.h"
+#include "ErrorReporting/ErrorContainer.h"
 
 namespace SURELOG {
 class Scope;
diff --git a/src/DesignCompile/CompileModule.cpp b/src/DesignCompile/CompileModule.cpp
index 0802487..9c6e525 100644
--- a/src/DesignCompile/CompileModule.cpp
+++ b/src/DesignCompile/CompileModule.cpp
@@ -21,28 +21,28 @@
  * Created on March 22, 2018, 9:43 PM
  */
 
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/Signal.h"
-#include "../Design/FileContent.h"
-#include "../Design/ClockingBlock.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../Testbench/ClassDefinition.h"
-#include "CompileHelper.h"
-#include "CompileDesign.h"
-#include "CompileModule.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/Signal.h"
+#include "Design/FileContent.h"
+#include "Design/ClockingBlock.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/CompileHelper.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/CompileModule.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileModule.h b/src/DesignCompile/CompileModule.h
index af912ea..ae3ab4d 100644
--- a/src/DesignCompile/CompileModule.h
+++ b/src/DesignCompile/CompileModule.h
@@ -24,7 +24,7 @@
 #ifndef COMPILEMODULE_H
 #define COMPILEMODULE_H
 
-#include "CompileHelper.h"
+#include "DesignCompile/CompileHelper.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/CompilePackage.cpp b/src/DesignCompile/CompilePackage.cpp
index 9a9cdd7..6591337 100644
--- a/src/DesignCompile/CompilePackage.cpp
+++ b/src/DesignCompile/CompilePackage.cpp
@@ -21,26 +21,26 @@
  * Created on March 22, 2018, 9:57 PM
  */
 
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../Design/Statement.h"
-#include "CompileDesign.h"
-#include "CompileHelper.h"
-#include "CompilePackage.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Design/Statement.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/CompileHelper.h"
+#include "DesignCompile/CompilePackage.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileProgram.cpp b/src/DesignCompile/CompileProgram.cpp
index f9aa3ef..1a5a158 100644
--- a/src/DesignCompile/CompileProgram.cpp
+++ b/src/DesignCompile/CompileProgram.cpp
@@ -20,28 +20,28 @@
  *
  * Created on June 6, 2018, 10:43 PM
  */
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/Signal.h"
-#include "../Design/FileContent.h"
-#include "../Design/ClockingBlock.h"
-#include "../Testbench/ClassDefinition.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileHelper.h"
-#include "CompileDesign.h"
-#include "CompileProgram.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/Signal.h"
+#include "Design/FileContent.h"
+#include "Design/ClockingBlock.h"
+#include "Testbench/ClassDefinition.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileHelper.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/CompileProgram.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileProgram.h b/src/DesignCompile/CompileProgram.h
index aac270c..980b056 100644
--- a/src/DesignCompile/CompileProgram.h
+++ b/src/DesignCompile/CompileProgram.h
@@ -24,8 +24,8 @@
 #ifndef COMPILEPROGRAM_H
 #define COMPILEPROGRAM_H
 
-#include "CompileToolbox.h"
-#include "CompileHelper.h"
+#include "DesignCompile/CompileToolbox.h"
+#include "DesignCompile/CompileHelper.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/CompileStep.cpp b/src/DesignCompile/CompileStep.cpp
index d176beb..1d6a3fb 100644
--- a/src/DesignCompile/CompileStep.cpp
+++ b/src/DesignCompile/CompileStep.cpp
@@ -21,7 +21,7 @@
  * Created on July 5, 2017, 10:44 PM
  */
 
-#include "CompileStep.h"
+#include "DesignCompile/CompileStep.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/CompileStep.h b/src/DesignCompile/CompileStep.h
index e675a63..ae34f22 100644
--- a/src/DesignCompile/CompileStep.h
+++ b/src/DesignCompile/CompileStep.h
@@ -23,7 +23,7 @@
 
 #ifndef COMPILESTEP_H
 #define COMPILESTEP_H
-#include "../Design/VObject.h"
+#include "Design/VObject.h"
 namespace SURELOG {
 
 class CompileStep {
diff --git a/src/DesignCompile/CompileToolbox.cpp b/src/DesignCompile/CompileToolbox.cpp
index 195b9d8..aea9b6f 100644
--- a/src/DesignCompile/CompileToolbox.cpp
+++ b/src/DesignCompile/CompileToolbox.cpp
@@ -20,26 +20,26 @@
  *
  * Created on June 13, 2018, 9:36 PM
  */
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/Signal.h"
-#include "../Design/FileContent.h"
-#include "../Design/ClockingBlock.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "CompileToolbox.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/Signal.h"
+#include "Design/FileContent.h"
+#include "Design/ClockingBlock.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/CompileToolbox.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/DesignElaboration.cpp b/src/DesignCompile/DesignElaboration.cpp
index 1615d6d..5862de4 100644
--- a/src/DesignCompile/DesignElaboration.cpp
+++ b/src/DesignCompile/DesignElaboration.cpp
@@ -20,29 +20,29 @@
  *
  * Created on July 12, 2017, 8:55 PM
  */
-#include "../Utils/StringUtils.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../Config/ConfigSet.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "../Testbench/Property.h"
-#include "../Design/Function.h"
-#include "../Testbench/ClassDefinition.h"
-#include "DesignElaboration.h"
+#include "Utils/StringUtils.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Config/ConfigSet.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/Property.h"
+#include "Design/Function.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/DesignElaboration.h"
 #include <queue>
 
 using namespace SURELOG;
diff --git a/src/DesignCompile/DesignElaboration.h b/src/DesignCompile/DesignElaboration.h
index fe26346..515220d 100644
--- a/src/DesignCompile/DesignElaboration.h
+++ b/src/DesignCompile/DesignElaboration.h
@@ -24,8 +24,8 @@
 #ifndef DESIGNELABORATION_H
 #define DESIGNELABORATION_H
 
-#include "ElaborationStep.h"
-#include "../Expression/ExprBuilder.h"
+#include "DesignCompile/ElaborationStep.h"
+#include "Expression/ExprBuilder.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/ElaborationStep.cpp b/src/DesignCompile/ElaborationStep.cpp
index 743732e..bb97224 100644
--- a/src/DesignCompile/ElaborationStep.cpp
+++ b/src/DesignCompile/ElaborationStep.cpp
@@ -21,25 +21,25 @@
  * Created on July 12, 2017, 8:55 PM
  */
 
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Utils/StringUtils.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "../Testbench/ClassDefinition.h"
-#include "ElaborationStep.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Utils/StringUtils.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/ElaborationStep.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/ElaborationStep.h b/src/DesignCompile/ElaborationStep.h
index 33bcd57..ed816b4 100644
--- a/src/DesignCompile/ElaborationStep.h
+++ b/src/DesignCompile/ElaborationStep.h
@@ -24,7 +24,7 @@
 #ifndef ELABORATIONSTEP_H
 #define ELABORATIONSTEP_H
 
-#include "CompileDesign.h"
+#include "DesignCompile/CompileDesign.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/PackageAndRootElaboration.cpp b/src/DesignCompile/PackageAndRootElaboration.cpp
index 014bd5c..3f3e7ff 100644
--- a/src/DesignCompile/PackageAndRootElaboration.cpp
+++ b/src/DesignCompile/PackageAndRootElaboration.cpp
@@ -21,26 +21,26 @@
  * Created on June 3, 2019, 10:02 PM
  */
 
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "../Testbench/Property.h"
-#include "../Design/Function.h"
-#include "../Testbench/ClassDefinition.h"
-#include "PackageAndRootElaboration.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/Property.h"
+#include "Design/Function.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/PackageAndRootElaboration.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/PackageAndRootElaboration.h b/src/DesignCompile/PackageAndRootElaboration.h
index 9bcefa1..f1d3137 100644
--- a/src/DesignCompile/PackageAndRootElaboration.h
+++ b/src/DesignCompile/PackageAndRootElaboration.h
@@ -24,7 +24,7 @@
 #ifndef PACKAGEANDROOTELABORATION_H
 #define PACKAGEANDROOTELABORATION_H
 
-#include "ElaborationStep.h"
+#include "DesignCompile/ElaborationStep.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/ResolveSymbols.cpp b/src/DesignCompile/ResolveSymbols.cpp
index 968b79e..7a87690 100644
--- a/src/DesignCompile/ResolveSymbols.cpp
+++ b/src/DesignCompile/ResolveSymbols.cpp
@@ -20,25 +20,25 @@
  *
  * Created on July 1, 2017, 12:38 PM
  */
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../Testbench/Program.h"
-#include "../Testbench/ClassDefinition.h"
-#include "CompileDesign.h"
-#include "ResolveSymbols.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Testbench/Program.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/CompileDesign.h"
+#include "DesignCompile/ResolveSymbols.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/ResolveSymbols.h b/src/DesignCompile/ResolveSymbols.h
index 60607d4..8dd08ba 100644
--- a/src/DesignCompile/ResolveSymbols.h
+++ b/src/DesignCompile/ResolveSymbols.h
@@ -23,9 +23,9 @@
 
 #ifndef RESOLVESYMBOLS_H
 #define RESOLVESYMBOLS_H
-#include "../Design/TimeInfo.h"
-#include "../Design/FileContent.h"
-#include "CompileStep.h"
+#include "Design/TimeInfo.h"
+#include "Design/FileContent.h"
+#include "DesignCompile/CompileStep.h"
 
 namespace SURELOG {
 
diff --git a/src/DesignCompile/TestbenchElaboration.cpp b/src/DesignCompile/TestbenchElaboration.cpp
index e06430e..ac088b5 100644
--- a/src/DesignCompile/TestbenchElaboration.cpp
+++ b/src/DesignCompile/TestbenchElaboration.cpp
@@ -23,26 +23,26 @@
 
 #include <queue>
 
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "../Testbench/Property.h"
-#include "../Design/Function.h"
-#include "../Testbench/ClassDefinition.h"
-#include "TestbenchElaboration.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/Property.h"
+#include "Design/Function.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/TestbenchElaboration.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/TestbenchElaboration.h b/src/DesignCompile/TestbenchElaboration.h
index b510ff0..0972ced 100644
--- a/src/DesignCompile/TestbenchElaboration.h
+++ b/src/DesignCompile/TestbenchElaboration.h
@@ -24,7 +24,7 @@
 #ifndef TESTBENCHELABORATION_H
 #define TESTBENCHELABORATION_H
 
-#include "ElaborationStep.h"
+#include "DesignCompile/ElaborationStep.h"
 
 namespace SURELOG {
 class Variable;
diff --git a/src/DesignCompile/UVMElaboration.cpp b/src/DesignCompile/UVMElaboration.cpp
index ccb9ae2..d0d2526 100644
--- a/src/DesignCompile/UVMElaboration.cpp
+++ b/src/DesignCompile/UVMElaboration.cpp
@@ -21,26 +21,26 @@
  * Created on July 12, 2017, 8:56 PM
  */
 
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/VObject.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/ParseFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "CompileDesign.h"
-#include "../Testbench/Property.h"
-#include "../Design/Function.h"
-#include "../Testbench/ClassDefinition.h"
-#include "UVMElaboration.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/VObject.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/Compiler.h"
+#include "DesignCompile/CompileDesign.h"
+#include "Testbench/Property.h"
+#include "Design/Function.h"
+#include "Testbench/ClassDefinition.h"
+#include "DesignCompile/UVMElaboration.h"
 
 using namespace SURELOG;
 
diff --git a/src/DesignCompile/UVMElaboration.h b/src/DesignCompile/UVMElaboration.h
index bffa87f..1a982c0 100644
--- a/src/DesignCompile/UVMElaboration.h
+++ b/src/DesignCompile/UVMElaboration.h
@@ -24,7 +24,7 @@
 #ifndef UVMELABORATION_H
 #define UVMELABORATION_H
 
-#include "TestbenchElaboration.h"
+#include "DesignCompile/TestbenchElaboration.h"
 
 namespace SURELOG {
 
diff --git a/src/ErrorReporting/Error.cpp b/src/ErrorReporting/Error.cpp
index 4f73ccc..cf339fc 100644
--- a/src/ErrorReporting/Error.cpp
+++ b/src/ErrorReporting/Error.cpp
@@ -21,7 +21,7 @@
  * Created on March 5, 2017, 11:30 PM
  */
 
-#include "Error.h"
+#include "ErrorReporting/Error.h"
 
 using namespace SURELOG;
 
diff --git a/src/ErrorReporting/Error.h b/src/ErrorReporting/Error.h
index 87d0ada..426e6bd 100644
--- a/src/ErrorReporting/Error.h
+++ b/src/ErrorReporting/Error.h
@@ -23,10 +23,10 @@
 
 #ifndef ERROR_H
 #define ERROR_H
-#include "ErrorDefinition.h"
+#include "ErrorReporting/ErrorDefinition.h"
 #include <string>
 #include <vector>
-#include "Location.h"
+#include "ErrorReporting/Location.h"
 
 namespace SURELOG {
 
diff --git a/src/ErrorReporting/ErrorContainer.cpp b/src/ErrorReporting/ErrorContainer.cpp
index c42c802..5d28770 100644
--- a/src/ErrorReporting/ErrorContainer.cpp
+++ b/src/ErrorReporting/ErrorContainer.cpp
@@ -21,17 +21,17 @@
  * Created on March 5, 2017, 11:12 PM
  */
 
-#include "ErrorContainer.h"
+#include "ErrorReporting/ErrorContainer.h"
 #include <mutex>
 #include <iostream>
 #include <fstream>
-#include "../CommandLine/CommandLineParser.hpp"
-#include "Waiver.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/Waiver.h"
 
 #include "antlr4-runtime.h"
 using namespace antlr4;
 
-#include "../API/PythonAPI.h"
+#include "API/PythonAPI.h"
 
 using namespace SURELOG;
 
diff --git a/src/ErrorReporting/ErrorContainer.h b/src/ErrorReporting/ErrorContainer.h
index 857f01d..072f626 100644
--- a/src/ErrorReporting/ErrorContainer.h
+++ b/src/ErrorReporting/ErrorContainer.h
@@ -26,8 +26,8 @@
 #include <string>
 #include <vector>
 #include <set>
-#include "ErrorDefinition.h"
-#include "Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/Error.h"
 #include "Python.h"
 
 namespace SURELOG {
diff --git a/src/ErrorReporting/ErrorDefinition.cpp b/src/ErrorReporting/ErrorDefinition.cpp
index a4dac29..54fde66 100644
--- a/src/ErrorReporting/ErrorDefinition.cpp
+++ b/src/ErrorReporting/ErrorDefinition.cpp
@@ -20,8 +20,8 @@
  *
  * Created on March 5, 2017, 11:25 PM
  */
-#include "../Utils/StringUtils.h"
-#include "ErrorDefinition.h"
+#include "Utils/StringUtils.h"
+#include "ErrorReporting/ErrorDefinition.h"
 
 using namespace SURELOG;
 
diff --git a/src/ErrorReporting/Location.cpp b/src/ErrorReporting/Location.cpp
index c884a33..795e15c 100644
--- a/src/ErrorReporting/Location.cpp
+++ b/src/ErrorReporting/Location.cpp
@@ -21,7 +21,7 @@
  * Created on March 6, 2017, 6:48 PM
  */
 #include <string>
-#include "Location.h"
+#include "ErrorReporting/Location.h"
 
 using namespace SURELOG;
 
diff --git a/src/ErrorReporting/Location.h b/src/ErrorReporting/Location.h
index 8981136..747158e 100644
--- a/src/ErrorReporting/Location.h
+++ b/src/ErrorReporting/Location.h
@@ -24,7 +24,7 @@
 #ifndef LOCATION_H
 #define LOCATION_H
 
-#include "../SourceCompile/SymbolTable.h"
+#include "SourceCompile/SymbolTable.h"
 
 namespace SURELOG {
 
diff --git a/src/ErrorReporting/Report.cpp b/src/ErrorReporting/Report.cpp
index 6470ddf..20ac746 100644
--- a/src/ErrorReporting/Report.cpp
+++ b/src/ErrorReporting/Report.cpp
@@ -21,10 +21,10 @@
  * Created on April 10, 2017, 8:56 PM
  */
 
-#include "../SourceCompile/SymbolTable.h"
-#include "ErrorContainer.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "Report.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/Report.h"
 #include <iostream>
 #include <fstream>
 #include <unistd.h>
diff --git a/src/ErrorReporting/Waiver.cpp b/src/ErrorReporting/Waiver.cpp
index e421225..76874eb 100644
--- a/src/ErrorReporting/Waiver.cpp
+++ b/src/ErrorReporting/Waiver.cpp
@@ -20,8 +20,8 @@
  *
  * Created on May 7, 2017, 11:11 PM
  */
-#include "ErrorDefinition.h"
-#include "Waiver.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/Waiver.h"
 #include <sstream>
 #include <string>
 #include <fstream>
diff --git a/src/ErrorReporting/Waiver.h b/src/ErrorReporting/Waiver.h
index 66a1b7e..df3a7b4 100644
--- a/src/ErrorReporting/Waiver.h
+++ b/src/ErrorReporting/Waiver.h
@@ -28,7 +28,7 @@
 #include <set>
 #include <vector>
 #include <map>
-#include "ErrorDefinition.h"
+#include "ErrorReporting/ErrorDefinition.h"
 
 namespace SURELOG {
 
diff --git a/src/Expression/Expr.cpp b/src/Expression/Expr.cpp
index 80d5184..56860ab 100644
--- a/src/Expression/Expr.cpp
+++ b/src/Expression/Expr.cpp
@@ -21,7 +21,7 @@
  * Created on October 29, 2017, 10:21 PM
  */
 
-#include "Expr.h"
+#include "Expression/Expr.h"
 
 using namespace SURELOG;
 
diff --git a/src/Expression/Expr.h b/src/Expression/Expr.h
index 66cb123..0d78cb9 100644
--- a/src/Expression/Expr.h
+++ b/src/Expression/Expr.h
@@ -24,7 +24,7 @@
 #ifndef EXPR_H
 #define EXPR_H
 #include <string>
-#include "Value.h"
+#include "Expression/Value.h"
 
 namespace SURELOG {
 
diff --git a/src/Expression/ExprBuilder.cpp b/src/Expression/ExprBuilder.cpp
index 8e73877..0f18205 100644
--- a/src/Expression/ExprBuilder.cpp
+++ b/src/Expression/ExprBuilder.cpp
@@ -20,9 +20,9 @@
  *
  * Created on November 2, 2017, 9:45 PM
  */
-#include "../ErrorReporting/ErrorContainer.h"
-#include "ExprBuilder.h"
-#include "../SourceCompile/VObjectTypes.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Expression/ExprBuilder.h"
+#include "SourceCompile/VObjectTypes.h"
 #include <iostream>
 #include <sstream>
 
diff --git a/src/Expression/ExprBuilder.h b/src/Expression/ExprBuilder.h
index 67647c0..d9ccb0c 100644
--- a/src/Expression/ExprBuilder.h
+++ b/src/Expression/ExprBuilder.h
@@ -23,12 +23,12 @@
 
 #ifndef EXPRBUILDER_H
 #define EXPRBUILDER_H
-#include "../SourceCompile/SymbolTable.h"
+#include "SourceCompile/SymbolTable.h"
 
-#include "Expr.h"
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../Design/ValuedComponentI.h"
+#include "Expression/Expr.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "Design/ValuedComponentI.h"
 
 namespace SURELOG {
 
diff --git a/src/Expression/Value.cpp b/src/Expression/Value.cpp
index a14790d..d790f04 100644
--- a/src/Expression/Value.cpp
+++ b/src/Expression/Value.cpp
@@ -24,7 +24,7 @@
 #include <cmath>
 #include <cstdint>
 #include <cstring>
-#include "Value.h"
+#include "Expression/Value.h"
 
 using namespace SURELOG;
 
diff --git a/src/Library/AntlrLibParserErrorListener.cpp b/src/Library/AntlrLibParserErrorListener.cpp
index f7d09f9..145f1d4 100644
--- a/src/Library/AntlrLibParserErrorListener.cpp
+++ b/src/Library/AntlrLibParserErrorListener.cpp
@@ -24,12 +24,12 @@
 #include "atn/ParserATNSimulator.h"
 using namespace std;
 using namespace antlr4;
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "ParseLibraryDef.h"
-#include "AntlrLibParserErrorListener.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Library/ParseLibraryDef.h"
+#include "Library/AntlrLibParserErrorListener.h"
 using namespace SURELOG;
 
 void AntlrLibParserErrorListener::syntaxError(
diff --git a/src/Library/Library.cpp b/src/Library/Library.cpp
index 5f0fba3..2674c39 100644
--- a/src/Library/Library.cpp
+++ b/src/Library/Library.cpp
@@ -20,10 +20,10 @@
  *
  * Created on January 27, 2018, 5:25 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../Design/ModuleDefinition.h"
-#include "Library.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/ModuleDefinition.h"
+#include "Library/Library.h"
 
 using namespace SURELOG;
 
diff --git a/src/Library/LibrarySet.cpp b/src/Library/LibrarySet.cpp
index 77285f7..c8781dd 100644
--- a/src/Library/LibrarySet.cpp
+++ b/src/Library/LibrarySet.cpp
@@ -23,9 +23,9 @@
 #include <vector>
 #include <set>
 #include <iostream>
-#include "../SourceCompile/SymbolTable.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "LibrarySet.h"
+#include "SourceCompile/SymbolTable.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "Library/LibrarySet.h"
 
 using namespace SURELOG;
 
diff --git a/src/Library/LibrarySet.h b/src/Library/LibrarySet.h
index b1e597f..7a0b6b4 100644
--- a/src/Library/LibrarySet.h
+++ b/src/Library/LibrarySet.h
@@ -23,7 +23,7 @@
 
 #ifndef LIBRARYSET_H
 #define LIBRARYSET_H
-#include "Library.h"
+#include "Library/Library.h"
 #include <vector>
 
 namespace SURELOG {
diff --git a/src/Library/ParseLibraryDef.cpp b/src/Library/ParseLibraryDef.cpp
index ace4e5b..a4791e0 100644
--- a/src/Library/ParseLibraryDef.cpp
+++ b/src/Library/ParseLibraryDef.cpp
@@ -20,23 +20,23 @@
  *
  * Created on January 27, 2018, 5:05 PM
  */
-#include "../Utils/StringUtils.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "ParseLibraryDef.h"
-#include "../Utils/FileUtils.h"
+#include "Utils/StringUtils.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Library/ParseLibraryDef.h"
+#include "Utils/FileUtils.h"
 #include "antlr4-runtime.h"
 #include "atn/ParserATNSimulator.h"
 using namespace antlr4;
 using namespace SURELOG;
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "SVLibShapeListener.h"
-#include "AntlrLibParserErrorListener.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "Library/SVLibShapeListener.h"
+#include "Library/AntlrLibParserErrorListener.h"
 
 ParseLibraryDef::ParseLibraryDef(CommandLineParser* commandLineParser,
                                  ErrorContainer* errors,
diff --git a/src/Library/ParseLibraryDef.h b/src/Library/ParseLibraryDef.h
index a0787fb..fc3cf09 100644
--- a/src/Library/ParseLibraryDef.h
+++ b/src/Library/ParseLibraryDef.h
@@ -23,9 +23,9 @@
 
 #ifndef PARSELIBRARYDEF_H
 #define PARSELIBRARYDEF_H
-#include "LibrarySet.h"
-#include "../Config/ConfigSet.h"
-#include "../Design/FileContent.h"
+#include "Library/LibrarySet.h"
+#include "Config/ConfigSet.h"
+#include "Design/FileContent.h"
 
 namespace SURELOG {
 
diff --git a/src/Library/SVLibShapeListener.cpp b/src/Library/SVLibShapeListener.cpp
index c964143..e50cfa7 100644
--- a/src/Library/SVLibShapeListener.cpp
+++ b/src/Library/SVLibShapeListener.cpp
@@ -20,21 +20,21 @@
  *
  * Created on January 28, 2018, 10:17 PM
  */
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../SourceCompile/CompilationUnit.h"
-#include "../SourceCompile/PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../SourceCompile/ParseFile.h"
-#include "ParseLibraryDef.h"
-#include "../Utils/FileUtils.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Library/ParseLibraryDef.h"
+#include "Utils/FileUtils.h"
 #include "antlr4-runtime.h"
 #include "atn/ParserATNSimulator.h"
 using namespace antlr4;
-#include "ParseLibraryDef.h"
-#include "SVLibShapeListener.h"
-#include "../Utils/FileUtils.h"
-#include "../Utils/ParseUtils.h"
+#include "Library/ParseLibraryDef.h"
+#include "Library/SVLibShapeListener.h"
+#include "Utils/FileUtils.h"
+#include "Utils/ParseUtils.h"
 using namespace SURELOG;
 
 SVLibShapeListener::SVLibShapeListener(ParseLibraryDef *parser,
diff --git a/src/Library/SVLibShapeListener.h b/src/Library/SVLibShapeListener.h
index 69bda6f..e1640ba 100644
--- a/src/Library/SVLibShapeListener.h
+++ b/src/Library/SVLibShapeListener.h
@@ -23,8 +23,8 @@
 
 #ifndef SVLIBSHAPELISTENER_H
 #define SVLIBSHAPELISTENER_H
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "../SourceCompile/SV3_1aTreeShapeListener.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "SourceCompile/SV3_1aTreeShapeListener.h"
 
 namespace SURELOG {
 
diff --git a/src/Package/Package.cpp b/src/Package/Package.cpp
index 9b8e9a2..756a47b 100644
--- a/src/Package/Package.cpp
+++ b/src/Package/Package.cpp
@@ -20,10 +20,10 @@
  *
  * Created on March 18, 2018, 7:58 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Expression/ExprBuilder.h"
-#include "Package.h"
-#include "../Testbench/ClassDefinition.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Expression/ExprBuilder.h"
+#include "Package/Package.h"
+#include "Testbench/ClassDefinition.h"
 
 using namespace SURELOG;
 
diff --git a/src/Package/Package.h b/src/Package/Package.h
index 0328b82..308b7df 100644
--- a/src/Package/Package.h
+++ b/src/Package/Package.h
@@ -24,11 +24,11 @@
 #ifndef PACKAGE_H
 #define PACKAGE_H
 
-#include "../Library/Library.h"
-#include "../Design/FileContent.h"
-#include "../Design/DesignComponent.h"
-#include "../Design/ValuedComponentI.h"
-#include "../Design/DataType.h"
+#include "Library/Library.h"
+#include "Design/FileContent.h"
+#include "Design/DesignComponent.h"
+#include "Design/ValuedComponentI.h"
+#include "Design/DataType.h"
 
 namespace SURELOG {
 class CompilePackage;
diff --git a/src/Package/Precompiled.cpp b/src/Package/Precompiled.cpp
index 6799160..588180c 100644
--- a/src/Package/Precompiled.cpp
+++ b/src/Package/Precompiled.cpp
@@ -21,7 +21,7 @@
  * Created on April 28, 2018, 10:27 AM
  */
 
-#include "Precompiled.h"
+#include "Package/Precompiled.h"
 
 Precompiled* Precompiled::m_singleton = NULL;
 
diff --git a/src/README.md b/src/README.md
index cb23143..5ce0a60 100644
--- a/src/README.md
+++ b/src/README.md
@@ -9,19 +9,28 @@
 Please see [`INSTALL`](../INSTALL.md)
 
 ### Build
- cd Surelog
- make
+ * cd Surelog
+```bash
+make
+```
+```bash
+make install (/usr/local/bin and /usr/local/lib/surelog by default, use DESTDIR= for alternative locations)
+```
 
 ### Run a test
 
-* dist/Release/GNU-Linux/surelog -help
-* dist/Release/GNU-Linux/surelog -writepp -parse tests/UnitTest/top.v
+* dist/Release/surelog -help
+* dist/Release/surelog -writepp -parse tests/UnitTest/top.v
 
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ## Modus operanti for grammar development:
 
 * Edit the grammar file in the G4 directory, test the grammar locally with the java targets: 
-  * cd Surelog/grammar; ant compile_java; ant javac; ant test_pp_tokens
+  * cd Surelog/grammar;
+  * ant compile_java;
+  * ant javac;
+  * ant test_pp_tokens or
+  * ant test_tree ... (There are several debug targets in the build.xml)
 
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ## TESTS and REGRESSIONS
@@ -43,22 +52,12 @@
 * regression.tcl update (Updates the diffs)  
 
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-## RELEASES
-
-* cd build
-* ../src/release.tcl <release, debug> Releases the following:
-
-  * Created  dist/surelog_release.tar.gz
-
-Run this script at least once to create symbolic links for the Python Listener
-
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ## PROFILING
 
 * Either
-   * env CPUPROFILE=./prof env LD_PRELOAD="/usr/lib/libprofiler.so"  ../../dist/Debug/GNU-Linux/surelog <test>
+   * env CPUPROFILE=./prof env LD_PRELOAD="/usr/lib/libprofiler.so"  build/dist/Debug/surelog <test>
 * Or 
-   * google-pprof --callgrind  ../../dist/Debug/GNU-Linux/surelog prof >> call
+   * google-pprof --callgrind  build/dist/Debug/surelog prof >> call
    * kcachegrind call 
 
 * Get Google tools: 
diff --git a/src/SourceCompile/AnalyzeFile.cpp b/src/SourceCompile/AnalyzeFile.cpp
index 7dc96cc..1330d39 100644
--- a/src/SourceCompile/AnalyzeFile.cpp
+++ b/src/SourceCompile/AnalyzeFile.cpp
@@ -20,22 +20,22 @@
  *
  * Created on July 23, 2017, 11:05 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/TimeInfo.h"
-#include "../Design/DesignElement.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "IncludeFileInfo.h"
-#include "../Utils/StringUtils.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "../SourceCompile/CompileSourceFile.h"
-#include "../SourceCompile/Compiler.h"
-#include "../Design/Design.h"
-#include "AnalyzeFile.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/TimeInfo.h"
+#include "Design/DesignElement.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/IncludeFileInfo.h"
+#include "Utils/StringUtils.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Design/Design.h"
+#include "SourceCompile/AnalyzeFile.h"
 #include <fstream>
 #include <stdio.h>
 #include <ctype.h>
diff --git a/src/SourceCompile/AnalyzeFile.h b/src/SourceCompile/AnalyzeFile.h
index f964a63..b110ee5 100644
--- a/src/SourceCompile/AnalyzeFile.h
+++ b/src/SourceCompile/AnalyzeFile.h
@@ -24,7 +24,7 @@
 #ifndef ANALYZEFILE_H
 #define ANALYZEFILE_H
 #include <stack>
-#include "IncludeFileInfo.h"
+#include "SourceCompile/IncludeFileInfo.h"
 
 namespace SURELOG {
 class Design;
diff --git a/src/SourceCompile/AntlrParserErrorListener.cpp b/src/SourceCompile/AntlrParserErrorListener.cpp
index 5ebb124..99e0fb3 100644
--- a/src/SourceCompile/AntlrParserErrorListener.cpp
+++ b/src/SourceCompile/AntlrParserErrorListener.cpp
@@ -24,17 +24,17 @@
 #include "atn/ParserATNSimulator.h"
 using namespace std;
 using namespace antlr4;
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "ParseFile.h"
-#include "../Utils/FileUtils.h"
-#include "../Utils/StringUtils.h"
-#include "AntlrParserErrorListener.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Utils/FileUtils.h"
+#include "Utils/StringUtils.h"
+#include "SourceCompile/AntlrParserErrorListener.h"
 using namespace SURELOG;
 
 void AntlrParserErrorListener::syntaxError(Recognizer *recognizer,
diff --git a/src/SourceCompile/AntlrParserHandler.cpp b/src/SourceCompile/AntlrParserHandler.cpp
index 798ac3f..ed2d3e4 100644
--- a/src/SourceCompile/AntlrParserHandler.cpp
+++ b/src/SourceCompile/AntlrParserHandler.cpp
@@ -24,10 +24,10 @@
 #include "antlr4-runtime.h"
 using namespace std;
 using namespace antlr4;
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
 
-#include "AntlrParserHandler.h"
+#include "SourceCompile/AntlrParserHandler.h"
 
 using namespace SURELOG;
 
diff --git a/src/SourceCompile/CheckCompile.cpp b/src/SourceCompile/CheckCompile.cpp
index 8feed0a..43dd3e7 100644
--- a/src/SourceCompile/CheckCompile.cpp
+++ b/src/SourceCompile/CheckCompile.cpp
@@ -22,21 +22,21 @@
  */
 #include <iostream>
 #include <set>
-#include "SymbolTable.h"
-#include "../Design/TimeInfo.h"
-#include "../Design/DesignElement.h"
-#include "../Design/FileContent.h"
-#include "../ErrorReporting/Location.h"
-#include "../ErrorReporting/Error.h"
-#include "../ErrorReporting/ErrorDefinition.h"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "ParseFile.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "CheckCompile.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/TimeInfo.h"
+#include "Design/DesignElement.h"
+#include "Design/FileContent.h"
+#include "ErrorReporting/Location.h"
+#include "ErrorReporting/Error.h"
+#include "ErrorReporting/ErrorDefinition.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "CommandLine/CommandLineParser.h"
+#include "SourceCompile/CheckCompile.h"
 
 using namespace SURELOG;
 
diff --git a/src/SourceCompile/CompilationUnit.cpp b/src/SourceCompile/CompilationUnit.cpp
index 7629850..b2ba799 100644
--- a/src/SourceCompile/CompilationUnit.cpp
+++ b/src/SourceCompile/CompilationUnit.cpp
@@ -20,8 +20,8 @@
  *
  * Created on April 5, 2017, 9:16 PM
  */
-#include "SymbolTable.h"
-#include "CompilationUnit.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
 
 using namespace SURELOG;
 
diff --git a/src/SourceCompile/CompilationUnit.h b/src/SourceCompile/CompilationUnit.h
index 9acd0a8..995e8a9 100644
--- a/src/SourceCompile/CompilationUnit.h
+++ b/src/SourceCompile/CompilationUnit.h
@@ -23,8 +23,8 @@
 
 #ifndef COMPILATIONUNIT_H
 #define COMPILATIONUNIT_H
-#include "MacroInfo.h"
-#include "../Design/TimeInfo.h"
+#include "SourceCompile/MacroInfo.h"
+#include "Design/TimeInfo.h"
 
 namespace SURELOG {
 
diff --git a/src/SourceCompile/CompileSourceFile.cpp b/src/SourceCompile/CompileSourceFile.cpp
index 037313b..8fb32f1 100644
--- a/src/SourceCompile/CompileSourceFile.cpp
+++ b/src/SourceCompile/CompileSourceFile.cpp
@@ -20,35 +20,35 @@
  *
  * Created on February 20, 2017, 9:54 PM
  */
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "SymbolTable.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompilationUnit.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompilationUnit.h"
 
 #include "antlr4-runtime.h"
 using namespace antlr4;
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
 
-#include "AntlrParserHandler.h"
+#include "SourceCompile/AntlrParserHandler.h"
 
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/FileUtils.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Utils/StringUtils.h"
+#include "Utils/FileUtils.h"
 #include <cstdlib>
 #include <iostream>
 #include <fstream>
 #include <sys/types.h>
 #include <sys/stat.h>
 using namespace std;
-#include "PreprocessFile.h"
-#include "ParseFile.h"
-#include "../API/PythonAPI.h"
-#include "PythonListen.h"
-#include "../Package/Precompiled.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "API/PythonAPI.h"
+#include "SourceCompile/PythonListen.h"
+#include "Package/Precompiled.h"
 
 using namespace SURELOG;
 
diff --git a/src/SourceCompile/CompileSourceFile.h b/src/SourceCompile/CompileSourceFile.h
index a76d7bb..34f188c 100644
--- a/src/SourceCompile/CompileSourceFile.h
+++ b/src/SourceCompile/CompileSourceFile.h
@@ -26,8 +26,8 @@
 #include <string>
 #include <vector>
 
-#include "ParseFile.h"
-#include "AnalyzeFile.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/AnalyzeFile.h"
 
 namespace SURELOG {
 
diff --git a/src/SourceCompile/Compiler.cpp b/src/SourceCompile/Compiler.cpp
index c3823f8..be1a481 100644
--- a/src/SourceCompile/Compiler.cpp
+++ b/src/SourceCompile/Compiler.cpp
@@ -20,28 +20,28 @@
  *
  * Created on March 4, 2017, 5:16 PM
  */
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "SymbolTable.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompilationUnit.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "CheckCompile.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/CheckCompile.h"
 #include "antlr4-runtime.h"
-#include "../DesignCompile/CompileDesign.h"
-#include "AnalyzeFile.h"
-#include "../Library/ParseLibraryDef.h"
-#include "../Utils/FileUtils.h"
-#include "../Package/Precompiled.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/Timer.h"
-#include "math.h"
+#include "DesignCompile/CompileDesign.h"
+#include "SourceCompile/AnalyzeFile.h"
+#include "Library/ParseLibraryDef.h"
+#include "Utils/FileUtils.h"
+#include "Package/Precompiled.h"
+#include "Utils/StringUtils.h"
+#include "Utils/Timer.h"
+#include <math.h>
 using namespace antlr4;
 
-#include "../API/PythonAPI.h"
-#include "CheckCompile.h"
+#include "API/PythonAPI.h"
+#include "SourceCompile/CheckCompile.h"
 #include <mutex>
 #include <thread>
 #include <vector>
diff --git a/src/SourceCompile/Compiler.h b/src/SourceCompile/Compiler.h
index 3743070..80c182b 100644
--- a/src/SourceCompile/Compiler.h
+++ b/src/SourceCompile/Compiler.h
@@ -28,10 +28,10 @@
 #include <set>
 #include <map>
 #include <thread>
-#include "../Design/Design.h"
-#include "../Library/LibrarySet.h"
-#include "../Config/ConfigSet.h"
-#include "PreprocessFile.h"
+#include "Design/Design.h"
+#include "Library/LibrarySet.h"
+#include "Config/ConfigSet.h"
+#include "SourceCompile/PreprocessFile.h"
 
 #ifdef USETBB
 #include <tbb/task.h>
diff --git a/src/SourceCompile/LoopCheck.cpp b/src/SourceCompile/LoopCheck.cpp
index 4808895..d4a35cd 100644
--- a/src/SourceCompile/LoopCheck.cpp
+++ b/src/SourceCompile/LoopCheck.cpp
@@ -23,8 +23,8 @@
 
 #include <queue>
 #include <set>
-#include "SymbolTable.h"
-#include "LoopCheck.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/LoopCheck.h"
 
 using namespace SURELOG;
 
diff --git a/src/SourceCompile/MacroInfo.cpp b/src/SourceCompile/MacroInfo.cpp
index ffaaa87..7d5cde2 100644
--- a/src/SourceCompile/MacroInfo.cpp
+++ b/src/SourceCompile/MacroInfo.cpp
@@ -21,7 +21,7 @@
  * Created on April 5, 2017, 11:46 PM
  */
 
-#include "SymbolTable.h"
-#include "MacroInfo.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/MacroInfo.h"
 
 using namespace SURELOG;
diff --git a/src/SourceCompile/ParseFile.cpp b/src/SourceCompile/ParseFile.cpp
index 1ea5024..113c99a 100644
--- a/src/SourceCompile/ParseFile.cpp
+++ b/src/SourceCompile/ParseFile.cpp
@@ -21,15 +21,15 @@
  * Created on February 24, 2017, 10:03 PM
  */
 
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "ParseFile.h"
-#include "AntlrParserHandler.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/AntlrParserHandler.h"
 #include <cstdlib>
 #include <iostream>
 #include "antlr4-runtime.h"
@@ -39,19 +39,19 @@
 using namespace antlr4;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "SV3_1aTreeShapeListener.h"
-#include "../API/SV3_1aPythonListener.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "SourceCompile/SV3_1aTreeShapeListener.h"
+#include "API/SV3_1aPythonListener.h"
 using namespace antlr4;
-#include "../Utils/ParseUtils.h"
-#include "../Utils/FileUtils.h"
-#include "../Cache/ParseCache.h"
-#include "AntlrParserErrorListener.h"
-#include "../Package/Precompiled.h"
-#include "../Utils/StringUtils.h"
-#include "../Utils/Timer.h"
+#include "Utils/ParseUtils.h"
+#include "Utils/FileUtils.h"
+#include "Cache/ParseCache.h"
+#include "SourceCompile/AntlrParserErrorListener.h"
+#include "Package/Precompiled.h"
+#include "Utils/StringUtils.h"
+#include "Utils/Timer.h"
 ParseFile::ParseFile(SymbolId fileId, SymbolTable* symbolTable,
                      ErrorContainer* errors)
     : m_fileId(fileId),
diff --git a/src/SourceCompile/ParseFile.h b/src/SourceCompile/ParseFile.h
index 9a959fa..336d72b 100644
--- a/src/SourceCompile/ParseFile.h
+++ b/src/SourceCompile/ParseFile.h
@@ -25,10 +25,10 @@
 #define PARSEFILE_H
 #include <string>
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "AntlrParserHandler.h"
-#include "../Design/FileContent.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "SourceCompile/AntlrParserHandler.h"
+#include "Design/FileContent.h"
 
 namespace SURELOG {
 
diff --git a/src/SourceCompile/PreprocessFile.cpp b/src/SourceCompile/PreprocessFile.cpp
index 92ac6a2..70eba8d 100644
--- a/src/SourceCompile/PreprocessFile.cpp
+++ b/src/SourceCompile/PreprocessFile.cpp
@@ -20,16 +20,16 @@
  *
  * Created on February 24, 2017, 9:38 PM
  */
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "../Utils/StringUtils.h"
-#include "../Cache/PPCache.h"
-#include "../ErrorReporting/Waiver.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "Utils/StringUtils.h"
+#include "Cache/PPCache.h"
+#include "ErrorReporting/Waiver.h"
 #include <cstdlib>
 #include <iostream>
 #include <regex>
@@ -38,12 +38,12 @@
 using namespace std;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aPpLexer.h"
-#include "../parser/SV3_1aPpParser.h"
-#include "../parser/SV3_1aPpParserBaseListener.h"
+#include "parser/SV3_1aPpLexer.h"
+#include "parser/SV3_1aPpParser.h"
+#include "parser/SV3_1aPpParserBaseListener.h"
 using namespace antlr4;
-#include "../Utils/ParseUtils.h"
-#include "../Utils/FileUtils.h"
+#include "Utils/ParseUtils.h"
+#include "Utils/FileUtils.h"
 #include "antlr4-runtime.h"
 #include "atn/ParserATNSimulator.h"
 #include "Parser.h"
@@ -51,7 +51,7 @@
 std::string PreprocessFile::PP__Line__Marking = "SURELOG__LINE__MARKING";
 std::string PreprocessFile::PP__File__Marking = "SURELOG__FILE__MARKING";
 
-#include "SV3_1aPpTreeShapeListener.h"
+#include "SourceCompile/SV3_1aPpTreeShapeListener.h"
 
 void PreprocessFile::setDebug(int level) {
   switch (level) {
@@ -324,7 +324,7 @@
         c = stream.get();
       }
       stream.close();
-      
+
       try {
         m_antlrParserHandler->m_inputStream = new ANTLRInputStream(text);
       } catch (...) {
@@ -646,7 +646,7 @@
           SpecialInstructions::AsIsUndefinedMacroInstr::ComplainUndefinedMacro);
     }
   }
-  
+
   if ((actual_args.size() > formal_args.size() && (!m_instructions.m_mute))) {
     if (formal_args.size() == 0 &&
         (StringUtils::getFirstNonEmptyToken(body_tokens) == "(")) {
diff --git a/src/SourceCompile/PreprocessFile.h b/src/SourceCompile/PreprocessFile.h
index e45f6c6..113f19d 100644
--- a/src/SourceCompile/PreprocessFile.h
+++ b/src/SourceCompile/PreprocessFile.h
@@ -29,12 +29,12 @@
 #include <set>
 #include <stack>
 
-#include "../parser/SV3_1aPpLexer.h"
-#include "../parser/SV3_1aPpParser.h"
-#include "CompilationUnit.h"
-#include "../Library/Library.h"
-#include "LoopCheck.h"
-#include "IncludeFileInfo.h"
+#include "parser/SV3_1aPpLexer.h"
+#include "parser/SV3_1aPpParser.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "Library/Library.h"
+#include "SourceCompile/LoopCheck.h"
+#include "SourceCompile/IncludeFileInfo.h"
 
 namespace SURELOG {
 
diff --git a/src/SourceCompile/PythonListen.cpp b/src/SourceCompile/PythonListen.cpp
index dccadcc..3669561 100644
--- a/src/SourceCompile/PythonListen.cpp
+++ b/src/SourceCompile/PythonListen.cpp
@@ -21,15 +21,15 @@
  * Created on June 4, 2017, 8:09 PM
  */
 
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "ParseFile.h"
-#include "AntlrParserHandler.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/AntlrParserHandler.h"
 #include <cstdlib>
 #include <iostream>
 #include "antlr4-runtime.h"
@@ -37,13 +37,13 @@
 using namespace antlr4;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "../API/SV3_1aPythonListener.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "API/SV3_1aPythonListener.h"
 
-#include "PythonListen.h"
-#include "../Cache/PythonAPICache.h"
+#include "SourceCompile/PythonListen.h"
+#include "Cache/PythonAPICache.h"
 
 using namespace SURELOG;
 
diff --git a/src/SourceCompile/SV3_1aPpTreeShapeListener.cpp b/src/SourceCompile/SV3_1aPpTreeShapeListener.cpp
index 9a7712b..21cd458 100644
--- a/src/SourceCompile/SV3_1aPpTreeShapeListener.cpp
+++ b/src/SourceCompile/SV3_1aPpTreeShapeListener.cpp
@@ -14,16 +14,16 @@
  limitations under the License.
  */
 
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "SymbolTable.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "PreprocessFile.h"
-#include "../Utils/StringUtils.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "Utils/StringUtils.h"
 
 #include <cstdlib>
 #include <iostream>
@@ -32,14 +32,14 @@
 using namespace std;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aPpLexer.h"
-#include "../parser/SV3_1aPpParser.h"
-#include "../parser/SV3_1aPpParserBaseListener.h"
+#include "parser/SV3_1aPpLexer.h"
+#include "parser/SV3_1aPpParser.h"
+#include "parser/SV3_1aPpParserBaseListener.h"
 using namespace antlr4;
-#include "../Utils/ParseUtils.h"
-#include "../Utils/FileUtils.h"
+#include "Utils/ParseUtils.h"
+#include "Utils/FileUtils.h"
 
-#include "SV3_1aPpTreeShapeListener.h"
+#include "SourceCompile/SV3_1aPpTreeShapeListener.h"
 
 void SV3_1aPpTreeShapeListener::logError(ErrorDefinition::ErrorType error,
                                          ParserRuleContext* ctx,
diff --git a/src/SourceCompile/SV3_1aPpTreeShapeListener.h b/src/SourceCompile/SV3_1aPpTreeShapeListener.h
index 493d198..6669bc6 100644
--- a/src/SourceCompile/SV3_1aPpTreeShapeListener.h
+++ b/src/SourceCompile/SV3_1aPpTreeShapeListener.h
@@ -25,12 +25,12 @@
 #define SV3_1APPTREESHAPELISTENER_H
 #include <regex>
 
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "SymbolTable.h"
-#include "CompilationUnit.h"
-#include "../Design/TimeInfo.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "Design/TimeInfo.h"
 
 namespace SURELOG {
 
diff --git a/src/SourceCompile/SV3_1aTreeShapeHelper.cpp b/src/SourceCompile/SV3_1aTreeShapeHelper.cpp
index d2ea889..878db4e 100644
--- a/src/SourceCompile/SV3_1aTreeShapeHelper.cpp
+++ b/src/SourceCompile/SV3_1aTreeShapeHelper.cpp
@@ -21,14 +21,14 @@
  * Created on June 25, 2017, 2:51 PM
  */
 
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "ParseFile.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
 
 #include <cstdlib>
 #include <iostream>
@@ -37,13 +37,13 @@
 using namespace antlr4;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "SV3_1aTreeShapeHelper.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "SourceCompile/SV3_1aTreeShapeHelper.h"
 using namespace antlr4;
-#include "../Utils/ParseUtils.h"
-#include "SV3_1aTreeShapeHelper.h"
+#include "Utils/ParseUtils.h"
+#include "SourceCompile/SV3_1aTreeShapeHelper.h"
 
 SV3_1aTreeShapeHelper::SV3_1aTreeShapeHelper(ParseFile* pf,
                                              antlr4::CommonTokenStream* tokens,
diff --git a/src/SourceCompile/SV3_1aTreeShapeHelper.h b/src/SourceCompile/SV3_1aTreeShapeHelper.h
index 3e7e4d4..d278d62 100644
--- a/src/SourceCompile/SV3_1aTreeShapeHelper.h
+++ b/src/SourceCompile/SV3_1aTreeShapeHelper.h
@@ -26,17 +26,17 @@
 #include <stack>
 #include <map>
 #include <unordered_map>
-#include "../Utils/ParseUtils.h"
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/TimeInfo.h"
-#include "../Design/DesignElement.h"
-#include "../Design/FileContent.h"
-#include "ParseFile.h"
-#include "CompilationUnit.h"
-#include "CompileSourceFile.h"
-#include "VObjectTypes.h"
-#include "../Library/ParseLibraryDef.h"
-#include "IncludeFileInfo.h"
+#include "Utils/ParseUtils.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/TimeInfo.h"
+#include "Design/DesignElement.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/ParseFile.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Library/ParseLibraryDef.h"
+#include "SourceCompile/IncludeFileInfo.h"
 
 namespace SURELOG {
 
diff --git a/src/SourceCompile/SV3_1aTreeShapeListener.cpp b/src/SourceCompile/SV3_1aTreeShapeListener.cpp
index 2cde537..2498959 100644
--- a/src/SourceCompile/SV3_1aTreeShapeListener.cpp
+++ b/src/SourceCompile/SV3_1aTreeShapeListener.cpp
@@ -21,15 +21,15 @@
  * Created on April 16, 2017, 8:28 PM
  */
 
-#include "SymbolTable.h"
-#include "../CommandLine/CommandLineParser.hpp"
-#include "../ErrorReporting/ErrorContainer.h"
-#include "CompilationUnit.h"
-#include "PreprocessFile.h"
-#include "CompileSourceFile.h"
-#include "Compiler.h"
-#include "ParseFile.h"
-#include "../Utils/StringUtils.h"
+#include "SourceCompile/SymbolTable.h"
+#include "CommandLine/CommandLineParser.h"
+#include "ErrorReporting/ErrorContainer.h"
+#include "SourceCompile/CompilationUnit.h"
+#include "SourceCompile/PreprocessFile.h"
+#include "SourceCompile/CompileSourceFile.h"
+#include "SourceCompile/Compiler.h"
+#include "SourceCompile/ParseFile.h"
+#include "Utils/StringUtils.h"
 
 #include <cstdlib>
 #include <iostream>
@@ -40,15 +40,15 @@
 using namespace antlr4;
 using namespace SURELOG;
 
-#include "../parser/SV3_1aLexer.h"
-#include "../parser/SV3_1aParser.h"
-#include "../parser/SV3_1aParserBaseListener.h"
-#include "../parser/SV3_1aPpParserBaseListener.h"
-#include "../Utils/ParseUtils.h"
-#include "../Utils/FileUtils.h"
-#include "SV3_1aPpTreeShapeListener.h"
-#include "SV3_1aTreeShapeListener.h"
-#include "SV3_1aTreeShapeHelper.h"
+#include "parser/SV3_1aLexer.h"
+#include "parser/SV3_1aParser.h"
+#include "parser/SV3_1aParserBaseListener.h"
+#include "parser/SV3_1aPpParserBaseListener.h"
+#include "Utils/ParseUtils.h"
+#include "Utils/FileUtils.h"
+#include "SourceCompile/SV3_1aPpTreeShapeListener.h"
+#include "SourceCompile/SV3_1aTreeShapeListener.h"
+#include "SourceCompile/SV3_1aTreeShapeHelper.h"
 using namespace antlr4;
 
 void SV3_1aTreeShapeListener::enterTop_level_rule(
diff --git a/src/SourceCompile/SymbolTable.cpp b/src/SourceCompile/SymbolTable.cpp
index 8d305e0..588ce5f 100644
--- a/src/SourceCompile/SymbolTable.cpp
+++ b/src/SourceCompile/SymbolTable.cpp
@@ -21,7 +21,7 @@
  * Created on March 6, 2017, 11:10 PM
  */
 #include <iostream>
-#include "SymbolTable.h"
+#include "SourceCompile/SymbolTable.h"
 #include <mutex>
 #include <vector>
 
diff --git a/src/SourceCompile/generate_parser_listener.tcl b/src/SourceCompile/generate_parser_listener.tcl
index bf269ba..f9160a2 100755
--- a/src/SourceCompile/generate_parser_listener.tcl
+++ b/src/SourceCompile/generate_parser_listener.tcl
@@ -66,11 +66,11 @@
 puts $oid "#include <stack>"
 puts $oid "#include <map>"
 puts $oid "#include <unordered_map>"
-puts $oid "#include \"../Utils/ParseUtils.h\""
-puts $oid "#include \"../SourceCompile/SymbolTable.h\""
-puts $oid "#include \"../Design/TimeInfo.h\""
-puts $oid "#include \"../Design/DesignElement.h\""
-puts $oid "#include \"../Design/FileContent.h\""
+puts $oid "#include \"Utils/ParseUtils.h\""
+puts $oid "#include \"SourceCompile/SymbolTable.h\""
+puts $oid "#include \"Design/TimeInfo.h\""
+puts $oid "#include \"Design/DesignElement.h\""
+puts $oid "#include \"Design/FileContent.h\""
 puts $oid "#include \"ParseFile.h\""
 puts $oid "#include \"CompilationUnit.h\""
 puts $oid "#include \"CompileSourceFile.h\""
@@ -168,7 +168,7 @@
 set oid [open "SourceCompile/VObjectTypes.cpp" "w"]
 puts $oid ""
 puts $oid "#include <string>"
-puts $oid "#include \"../Design/VObject.h\""
+puts $oid "#include \"Design/VObject.h\""
 puts $oid "// This file is automatically generated by generate_parser_listener.tcl"
 puts $oid "// DO NOT EDIT"
 puts $oid ""
diff --git a/src/Testbench/ClassDefinition.cpp b/src/Testbench/ClassDefinition.cpp
index 1e74713..ae1c0b1 100644
--- a/src/Testbench/ClassDefinition.cpp
+++ b/src/Testbench/ClassDefinition.cpp
@@ -20,8 +20,8 @@
  *
  * Created on June 1, 2018, 10:12 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
 #include "ClassDefinition.h"
 
 using namespace SURELOG;
diff --git a/src/Testbench/ClassDefinition.h b/src/Testbench/ClassDefinition.h
index b563279..737b822 100644
--- a/src/Testbench/ClassDefinition.h
+++ b/src/Testbench/ClassDefinition.h
@@ -24,16 +24,16 @@
 #ifndef CLASSDEFINITION_H
 #define CLASSDEFINITION_H
 
-#include "../Design/DesignComponent.h"
-#include "../Design/ValuedComponentI.h"
-#include "../Design/DataType.h"
+#include "Design/DesignComponent.h"
+#include "Design/ValuedComponentI.h"
+#include "Design/DataType.h"
 #include "Property.h"
 #include "FunctionMethod.h"
 #include "TaskMethod.h"
 #include "Constraint.h"
 #include "TypeDef.h"
 #include "CoverGroupDefinition.h"
-#include "../Design/Parameter.h"
+#include "Design/Parameter.h"
 
 namespace SURELOG {
 class CompileClass;
diff --git a/src/Testbench/ClassObject.cpp b/src/Testbench/ClassObject.cpp
index 2c66d7e..9343509 100644
--- a/src/Testbench/ClassObject.cpp
+++ b/src/Testbench/ClassObject.cpp
@@ -20,8 +20,8 @@
  *
  * Created on March 24, 2019, 7:38 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
 #include "ClassObject.h"
 
 using namespace SURELOG;
diff --git a/src/Testbench/ClassObject.h b/src/Testbench/ClassObject.h
index 31617b9..19ee625 100644
--- a/src/Testbench/ClassObject.h
+++ b/src/Testbench/ClassObject.h
@@ -25,7 +25,7 @@
 #define CLASSOBJECT_H
 
 #include "ClassDefinition.h"
-#include "../Expression/Value.h"
+#include "Expression/Value.h"
 
 namespace SURELOG {
 
diff --git a/src/Testbench/Constraint.h b/src/Testbench/Constraint.h
index fae7380..82dc2e6 100644
--- a/src/Testbench/Constraint.h
+++ b/src/Testbench/Constraint.h
@@ -24,9 +24,9 @@
 #ifndef CONSTRAINT_H
 #define CONSTRAINT_H
 
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/VObjectTypes.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/VObjectTypes.h"
 
 namespace SURELOG {
 
diff --git a/src/Testbench/CoverGroupDefinition.h b/src/Testbench/CoverGroupDefinition.h
index fca7cb8..6767d44 100644
--- a/src/Testbench/CoverGroupDefinition.h
+++ b/src/Testbench/CoverGroupDefinition.h
@@ -24,9 +24,9 @@
 #ifndef COVERGROUPDEFINITION_H
 #define COVERGROUPDEFINITION_H
 
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../SourceCompile/VObjectTypes.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "SourceCompile/VObjectTypes.h"
 
 namespace SURELOG {
 
diff --git a/src/Testbench/FunctionMethod.h b/src/Testbench/FunctionMethod.h
index e08c2dd..cb959fc 100644
--- a/src/Testbench/FunctionMethod.h
+++ b/src/Testbench/FunctionMethod.h
@@ -24,7 +24,7 @@
 #ifndef FUNCTIONMETHOD_H
 #define FUNCTIONMETHOD_H
 
-#include "../Design/Function.h"
+#include "Design/Function.h"
 
 namespace SURELOG {
 
diff --git a/src/Testbench/Program.cpp b/src/Testbench/Program.cpp
index 66ebbd0..71faeeb 100644
--- a/src/Testbench/Program.cpp
+++ b/src/Testbench/Program.cpp
@@ -20,9 +20,9 @@
  *
  * Created on June 1, 2018, 8:58 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../Design/DesignComponent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/DesignComponent.h"
 #include "Program.h"
 
 using namespace SURELOG;
diff --git a/src/Testbench/Program.h b/src/Testbench/Program.h
index 751479d..f9f9ed3 100644
--- a/src/Testbench/Program.h
+++ b/src/Testbench/Program.h
@@ -23,8 +23,8 @@
 
 #ifndef PROGRAM_H
 #define PROGRAM_H
-#include "../Design/DesignComponent.h"
-#include "../Common/ClockingBlockHolder.h"
+#include "Design/DesignComponent.h"
+#include "Common/ClockingBlockHolder.h"
 
 namespace SURELOG {
 
diff --git a/src/Testbench/Property.cpp b/src/Testbench/Property.cpp
index b907612..1918de6 100644
--- a/src/Testbench/Property.cpp
+++ b/src/Testbench/Property.cpp
@@ -20,9 +20,9 @@
  *
  * Created on January 23, 2019, 9:17 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../Design/DesignComponent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/DesignComponent.h"
 #include "Property.h"
 
 using namespace SURELOG;
diff --git a/src/Testbench/Property.h b/src/Testbench/Property.h
index 4df6f7f..c933216 100644
--- a/src/Testbench/Property.h
+++ b/src/Testbench/Property.h
@@ -24,7 +24,7 @@
 #ifndef PROPERTY_H
 #define PROPERTY_H
 
-#include "../Design/DataType.h"
+#include "Design/DataType.h"
 #include "Variable.h"
 
 namespace SURELOG {
diff --git a/src/Testbench/TaskMethod.h b/src/Testbench/TaskMethod.h
index f04390c..dde1bcd 100644
--- a/src/Testbench/TaskMethod.h
+++ b/src/Testbench/TaskMethod.h
@@ -24,7 +24,7 @@
 #ifndef TASKMETHOD_H
 #define TASKMETHOD_H
 
-#include "../Design/Task.h"
+#include "Design/Task.h"
 
 namespace SURELOG {
 
diff --git a/src/Testbench/TypeDef.cpp b/src/Testbench/TypeDef.cpp
index 3cdcd16..e75a792 100644
--- a/src/Testbench/TypeDef.cpp
+++ b/src/Testbench/TypeDef.cpp
@@ -20,9 +20,9 @@
  *
  * Created on March 6, 2019, 9:14 PM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../SourceCompile/VObjectTypes.h"
-#include "../Design/FileContent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "SourceCompile/VObjectTypes.h"
+#include "Design/FileContent.h"
 #include "TypeDef.h"
 
 using namespace SURELOG;
diff --git a/src/Testbench/TypeDef.h b/src/Testbench/TypeDef.h
index 088e3fe..ff5d770 100644
--- a/src/Testbench/TypeDef.h
+++ b/src/Testbench/TypeDef.h
@@ -25,8 +25,8 @@
 #define TYPEDEF_H
 
 #include <string>
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/DataType.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/DataType.h"
 
 namespace SURELOG {
 class FileContent;
diff --git a/src/Testbench/Variable.cpp b/src/Testbench/Variable.cpp
index 1901e72..72b712b 100644
--- a/src/Testbench/Variable.cpp
+++ b/src/Testbench/Variable.cpp
@@ -20,9 +20,9 @@
  *
  * Created on May 26, 2019, 10:42 AM
  */
-#include "../SourceCompile/SymbolTable.h"
-#include "../Design/FileContent.h"
-#include "../Design/DesignComponent.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Design/FileContent.h"
+#include "Design/DesignComponent.h"
 #include "Variable.h"
 
 using namespace SURELOG;
diff --git a/src/Utils/FileUtils.cpp b/src/Utils/FileUtils.cpp
index 3d0807c..dc4310f 100644
--- a/src/Utils/FileUtils.cpp
+++ b/src/Utils/FileUtils.cpp
@@ -21,9 +21,9 @@
  * Created on March 16, 2017, 11:02 PM
  */
 
-#include "../SourceCompile/SymbolTable.h"
-#include "FileUtils.h"
-#include "StringUtils.h"
+#include "SourceCompile/SymbolTable.h"
+#include "Utils/FileUtils.h"
+#include "Utils/StringUtils.h"
 #include <sys/stat.h>
 #include <unistd.h>
 #include <string.h>
diff --git a/src/Utils/HashMap.h b/src/Utils/HashMap.h
deleted file mode 100644
index cbb2635..0000000
--- a/src/Utils/HashMap.h
+++ /dev/null
@@ -1,361 +0,0 @@
-
-#ifndef HASHMAP_H
-#define HASHMAP_H
-#include <iostream>
-#include <iomanip>
-#include <exception>
-#include <mutex>
-#include <condition_variable>
-
-/*
- *  wrapper for items stored in the map
- */
-template <typename K, typename V>
-class HashItem {
- public:
-  HashItem(K key, V value) {
-    this->key = key;
-    this->value = value;
-    this->nextItem = nullptr;
-  }
-
-  /*
-   * copy constructor
-   */
-  HashItem(const HashItem &item) {
-    this->key = item.getKey();
-    this->value = item.getValue();
-    this->nextItem = nullptr;
-  }
-
-  void setNext(HashItem<K, V> *item) { this->nextItem = item; }
-
-  HashItem *getNext() { return nextItem; }
-
-  K getKey() { return key; }
-
-  V getValue() { return value; }
-
-  void setValue(V value) { this->value = value; }
-
- private:
-  K key;
-  V value;
-  HashItem *nextItem;
-};
-
-/*
- * template HashMap for storing items
- * default hash function HF = std::hash<K>
- */
-template <typename K, typename V, typename HF = std::hash<K>>
-class HashMap {
- public:
-  /*
-   * constructor
-   * @mSize specifies the bucket size og the map
-   */
-  HashMap(std::size_t mSize) {
-    // lock initialization for single thread
-    std::lock_guard<std::mutex> lock(mtx);
-    // if (mSize < 1)
-    // throw std::exception("Number of buckets ust be greater than zero.");
-
-    mapSize = mSize;
-    numOfItems = 0;
-    // initialize
-    hMap = new HashItem<K, V> *[mapSize]();
-  }
-
-  /*
-   * for simplicity no copy constructor
-   * anyway we want test how different threads
-   * use same instance of the map
-   */
-  // HashMap(const HashMap & hmap) = delete;
-
-  /*
-   * inserts item
-   * replaces old value with the new one when item already exists
-   * @key key of the item
-   * @value value of the item
-   */
-  void insert(const K &key, const V &value) {
-    std::lock_guard<std::mutex> lock(mtx);
-    insertHelper(this->hMap, this->mapSize, numOfItems, key, value);
-    condVar.notify_all();
-  }
-
-  /*
-   * erases item with key when siúch item exists
-   * @key of item to erase
-   */
-  void erase(const K &key) {
-    std::lock_guard<std::mutex> lock(mtx);
-    // calculate the bucket where item must be inserted
-    std::size_t hVal = hashFunc(key) % mapSize;
-    HashItem<K, V> *prev = nullptr;
-    HashItem<K, V> *item = hMap[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) {
-      prev = item;
-      item = item->getNext();
-    }
-    // no item found with the given key
-    if (item == nullptr) {
-      return;
-    } else {
-      if (prev == nullptr) {
-        // item found is the first item in the bucket
-        hMap[hVal] = item->getNext();
-      } else {
-        // item found in one of the entries in the bucket
-        prev->setNext(item->getNext());
-      }
-      delete item;
-      numOfItems--;
-    }
-    condVar.notify_all();
-  }
-
-  /*
-   * get element with the given key by reference
-   * @key is the key of item that has to be found
-   * @value is the holder where the value of item with key will be copied
-   */
-  bool getItem(const K &key, V &value) const {
-    std::lock_guard<std::mutex> lock(mtx);
-    // calculate the bucket where item must be inserted
-    std::size_t hVal = hashFunc(key) % mapSize;
-    HashItem<K, V> *item = hMap[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) item = item->getNext();
-    // item not found
-    if (item == nullptr) {
-      return false;
-    }
-
-    value = item->getValue();
-    return true;
-  }
-
-  /*
-   * get element with the given key by reference
-   * @key is the key of item that has to be found
-   * shows an example of thread waitung for some condition
-   * @value is the holder where the value of item with key will be copied
-   */
-  bool getWithWait(const K &key, V &value) {
-    std::unique_lock<std::mutex> ulock(mtxForWait);
-    condVar.wait(ulock, [this] { return !this->empty(); });
-    // calculate the bucket where item must be inserted
-    std::size_t hVal = hashFunc(key) % mapSize;
-    HashItem<K, V> *item = hMap[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) item = item->getNext();
-    // item not found
-    if (item == nullptr) {
-      return false;
-    }
-
-    value = item->getValue();
-    return true;
-  }
-
-  /*
-   * resizes the map
-   * creates new map on heap
-   * copies the elements into new map
-   * @newSize specifies new bucket size
-   */
-  void resize(std::size_t newSize) {
-    std::lock_guard<std::mutex> lock(mtx);
-    if (newSize < 1)
-      throw std::exception("Number of buckets must be greater than zero.");
-
-    resizeHelper(newSize);
-    condVar.notify_all();
-  }
-
-  /*
-   * outputs all items of the map
-   */
-  void outputMap() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    if (numOfItems == 0) {
-      std::cout << "Map is empty." << std::endl << std::endl;
-      return;
-    }
-    std::cout << "Map contains " << numOfItems << " items." << std::endl;
-    for (std::size_t i = 0; i < mapSize; i++) {
-      HashItem<K, V> *item = hMap[i];
-      while (item != nullptr) {
-        std::cout << "Bucket: " << std::setw(3) << i
-                  << ", key: " << std::setw(3) << item->getKey()
-                  << ", value:" << std::setw(3) << item->getValue()
-                  << std::endl;
-        item = item->getNext();
-      }
-    }
-    std::cout << std::endl;
-  }
-
-  /*
-   * returns true when map has no items
-   */
-  bool empty() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    return numOfItems == 0;
-  }
-
-  void clear() {
-    std::lock_guard<std::mutex> lock(mtx);
-    deleteMap(hMap, mapSize);
-    numOfItems = 0;
-    hMap = new HashItem<K, V> *[mapSize]();
-  }
-
-  void deleteDeep() {
-    std::lock_guard<std::mutex> lock(mtx);
-    deleteMapDeep(hMap, mapSize);
-    numOfItems = 0;
-    hMap = new HashItem<K, V> *[mapSize]();
-  }
-
-  /*
-   * returns number of items stored in the map
-   */
-  std::size_t size() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    return numOfItems;
-  }
-
-  /*
-   * returns number of buckets
-   */
-  std::size_t bucket_count() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    return mapSize;
-  }
-
-  /*
-   * desctructor
-   */
-  ~HashMap() {
-    std::lock_guard<std::mutex> lock(mtx);
-    deleteMap(hMap, mapSize);
-  }
-
- private:
-  std::size_t mapSize;
-  std::size_t numOfItems;
-  HF hashFunc;
-  HashItem<K, V> **hMap;
-  mutable std::mutex mtx;
-  mutable std::mutex mtxForWait;
-  std::condition_variable condVar;
-
-  /*
-   * help method for inserting key, value item into the map hm
-   * mapSize specifies the size of the map, items - the number
-   * of stored items, will be incremented when insertion is completed
-   * @hm HashMap
-   * @mSize specifies number of buckets
-   * @items holds the number of items in hm, will be incremented when insertion
-   * successful
-   * @key - key of item to insert
-   * @value - value of item to insert
-   */
-  void insertHelper(HashItem<K, V> **hm, const std::size_t &mSize,
-                    std::size_t &items, const K &key, const V &value) {
-    std::size_t hVal = hashFunc(key) % mSize;
-    HashItem<K, V> *prev = nullptr;
-    HashItem<K, V> *item = hm[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) {
-      prev = item;
-      item = item->getNext();
-    }
-
-    // inserting new item
-    if (item == nullptr) {
-      item = new HashItem<K, V>(key, value);
-      items++;
-      if (prev == nullptr) {
-        // insert new value as first item in the bucket
-        hm[hVal] = item;
-      } else {
-        // append new item on previous in the same bucket
-        prev->setNext(item);
-      }
-    } else {
-      // replace existing value
-      item->setValue(value);
-    }
-  }
-
-  /*
-   * help method to resize the map
-   * @newSize specifies new number of buckets
-   */
-  void resizeHelper(std::size_t newSize) {
-    HashItem<K, V> **newMap = new HashItem<K, V> *[newSize]();
-    std::size_t items = 0;
-    for (std::size_t i = 0; i < mapSize; i++) {
-      HashItem<K, V> *item = hMap[i];
-      while (item != nullptr) {
-        insertHelper(newMap, newSize, items, item->getKey(), item->getValue());
-        item = item->getNext();
-      }
-    }
-
-    deleteMap(hMap, mapSize);
-    hMap = newMap;
-    mapSize = newSize;
-    numOfItems = items;
-    newMap = nullptr;
-  }
-
-  /*
-   * help function for deleting the map hm
-   * @hm HashMap
-   * @mSize number of buckets in hm
-   */
-  void deleteMap(HashItem<K, V> **hm, std::size_t mSize) {
-    // delete all nodes
-    for (std::size_t i = 0; i < mSize; ++i) {
-      HashItem<K, V> *item = hm[i];
-      while (item != nullptr) {
-        HashItem<K, V> *prev = item;
-        item = item->getNext();
-        delete prev;
-      }
-      hm[i] = nullptr;
-    }
-    // delete the map
-    delete[] hm;
-  }
-
-  /*
-   * help function for deleting the map hm
-   * @hm HashMap
-   * @mSize number of buckets in hm
-   */
-  void deleteMapDeep(HashItem<K, V> **hm, std::size_t mSize) {
-    // delete all nodes
-    for (std::size_t i = 0; i < mSize; ++i) {
-      HashItem<K, V> *item = hm[i];
-      while (item != nullptr) {
-        HashItem<K, V> *prev = item;
-        item = item->getNext();
-        delete prev->getValue();
-        delete prev;
-      }
-      hm[i] = nullptr;
-    }
-    // delete the map
-    delete[] hm;
-  }
-};
-
-#endif /* HASHMAP_H */
diff --git a/src/Utils/ParseUtils.cpp b/src/Utils/ParseUtils.cpp
index e5b4dc2..c0e0f2c 100644
--- a/src/Utils/ParseUtils.cpp
+++ b/src/Utils/ParseUtils.cpp
@@ -24,7 +24,7 @@
 #include "antlr4-runtime.h"
 using namespace antlr4;
 #include <vector>
-#include "ParseUtils.h"
+#include "Utils/ParseUtils.h"
 
 using namespace SURELOG;
 
diff --git a/src/Utils/StringUtils.cpp b/src/Utils/StringUtils.cpp
index 06622d7..69f9ede 100644
--- a/src/Utils/StringUtils.cpp
+++ b/src/Utils/StringUtils.cpp
@@ -21,7 +21,7 @@
  * Created on March 14, 2017, 10:43 PM
  */
 
-#include "StringUtils.h"
+#include "Utils/StringUtils.h"
 #include <algorithm>
 #include <locale>
 #include <regex>
diff --git a/src/Utils/Timer.h b/src/Utils/Timer.h
index 6ac1dd9..1dd4804 100644
--- a/src/Utils/Timer.h
+++ b/src/Utils/Timer.h
@@ -25,7 +25,7 @@
 #define TIMER_H
 #include <iostream>
 #include <chrono>
-#include "math.h"
+#include <math.h>
 
 namespace SURELOG {
 
diff --git a/src/main.cpp b/src/main.cpp
index d9efe97..c4f6f24 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -27,7 +27,7 @@
 #include<stdio.h>
 #include<sys/types.h>
 #include <unistd.h>
-#include "CommandLine/CommandLineParser.hpp"
+#include "CommandLine/CommandLineParser.h"
 #include "SourceCompile/SymbolTable.h"
 #include "SourceCompile/CompilationUnit.h"
 #include "SourceCompile/PreprocessFile.h"
diff --git a/src/parser/SV3_1aLexer.cpp b/src/parser/SV3_1aLexer.cpp
index 3ef52cd..9cae3af 100644
--- a/src/parser/SV3_1aLexer.cpp
+++ b/src/parser/SV3_1aLexer.cpp
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aLexer.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aLexer.g4 by ANTLR 4.7.2
 
 
 #include "SV3_1aLexer.h"
diff --git a/src/parser/SV3_1aLexer.h b/src/parser/SV3_1aLexer.h
index 7abe61a..0752d25 100644
--- a/src/parser/SV3_1aLexer.h
+++ b/src/parser/SV3_1aLexer.h
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aLexer.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aLexer.g4 by ANTLR 4.7.2
 
 #pragma once
 
diff --git a/src/parser/SV3_1aParser.cpp b/src/parser/SV3_1aParser.cpp
index 8dd9419..b96cfb7 100644
--- a/src/parser/SV3_1aParser.cpp
+++ b/src/parser/SV3_1aParser.cpp
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aParser.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aParser.g4 by ANTLR 4.7.2
 
 
 #include "SV3_1aParserListener.h"
@@ -28800,6 +28800,7 @@
   size_t parentState = getState();
   SV3_1aParser::Property_exprContext *_localctx = _tracker.createInstance<Property_exprContext>(_ctx, parentState);
   SV3_1aParser::Property_exprContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 470;
   enterRecursionRule(_localctx, 470, SV3_1aParser::RuleProperty_expr, precedence);
 
@@ -29889,6 +29890,7 @@
   size_t parentState = getState();
   SV3_1aParser::Sequence_exprContext *_localctx = _tracker.createInstance<Sequence_exprContext>(_ctx, parentState);
   SV3_1aParser::Sequence_exprContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 478;
   enterRecursionRule(_localctx, 478, SV3_1aParser::RuleSequence_expr, precedence);
 
@@ -33629,6 +33631,7 @@
   size_t parentState = getState();
   SV3_1aParser::Block_event_expressionContext *_localctx = _tracker.createInstance<Block_event_expressionContext>(_ctx, parentState);
   SV3_1aParser::Block_event_expressionContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 540;
   enterRecursionRule(_localctx, 540, SV3_1aParser::RuleBlock_event_expression, precedence);
 
@@ -36119,6 +36122,7 @@
   size_t parentState = getState();
   SV3_1aParser::Select_expressionContext *_localctx = _tracker.createInstance<Select_expressionContext>(_ctx, parentState);
   SV3_1aParser::Select_expressionContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 576;
   enterRecursionRule(_localctx, 576, SV3_1aParser::RuleSelect_expression, precedence);
 
@@ -51254,6 +51258,7 @@
   size_t parentState = getState();
   SV3_1aParser::Event_expressionContext *_localctx = _tracker.createInstance<Event_expressionContext>(_ctx, parentState);
   SV3_1aParser::Event_expressionContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 822;
   enterRecursionRule(_localctx, 822, SV3_1aParser::RuleEvent_expression, precedence);
 
@@ -70685,6 +70690,7 @@
   size_t parentState = getState();
   SV3_1aParser::Constant_expressionContext *_localctx = _tracker.createInstance<Constant_expressionContext>(_ctx, parentState);
   SV3_1aParser::Constant_expressionContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 1166;
   enterRecursionRule(_localctx, 1166, SV3_1aParser::RuleConstant_expression, precedence);
 
@@ -71451,6 +71457,7 @@
   size_t parentState = getState();
   SV3_1aParser::ExpressionContext *_localctx = _tracker.createInstance<ExpressionContext>(_ctx, parentState);
   SV3_1aParser::ExpressionContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 1182;
   enterRecursionRule(_localctx, 1182, SV3_1aParser::RuleExpression, precedence);
 
@@ -72087,6 +72094,7 @@
   size_t parentState = getState();
   SV3_1aParser::Module_path_expressionContext *_localctx = _tracker.createInstance<Module_path_expressionContext>(_ctx, parentState);
   SV3_1aParser::Module_path_expressionContext *previousContext = _localctx;
+  (void)previousContext; // Silence compiler, in case the context is not used by generated code.
   size_t startState = 1190;
   enterRecursionRule(_localctx, 1190, SV3_1aParser::RuleModule_path_expression, precedence);
 
diff --git a/src/parser/SV3_1aParser.h b/src/parser/SV3_1aParser.h
index 174bec7..692a631 100644
--- a/src/parser/SV3_1aParser.h
+++ b/src/parser/SV3_1aParser.h
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aParser.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aParser.g4 by ANTLR 4.7.2
 
 #pragma once
 
@@ -1711,7 +1711,7 @@
   public:
     Timeunits_declarationContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Timeunits_declarationContext() : antlr4::ParserRuleContext() { }
+    Timeunits_declarationContext() = default;
     void copyFrom(Timeunits_declarationContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -1931,7 +1931,7 @@
   public:
     Port_directionContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Port_directionContext() : antlr4::ParserRuleContext() { }
+    Port_directionContext() = default;
     void copyFrom(Port_directionContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -2595,7 +2595,7 @@
   public:
     Class_item_qualifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Class_item_qualifierContext() : antlr4::ParserRuleContext() { }
+    Class_item_qualifierContext() = default;
     void copyFrom(Class_item_qualifierContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -2637,7 +2637,7 @@
   public:
     Property_qualifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Property_qualifierContext() : antlr4::ParserRuleContext() { }
+    Property_qualifierContext() = default;
     void copyFrom(Property_qualifierContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -2679,7 +2679,7 @@
   public:
     Method_qualifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Method_qualifierContext() : antlr4::ParserRuleContext() { }
+    Method_qualifierContext() = default;
     void copyFrom(Method_qualifierContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -2957,7 +2957,7 @@
   public:
     Dist_weightContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Dist_weightContext() : antlr4::ParserRuleContext() { }
+    Dist_weightContext() = default;
     void copyFrom(Dist_weightContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -3501,7 +3501,7 @@
   public:
     LifetimeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    LifetimeContext() : antlr4::ParserRuleContext() { }
+    LifetimeContext() = default;
     void copyFrom(LifetimeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -3799,7 +3799,7 @@
   public:
     Integer_atom_typeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Integer_atom_typeContext() : antlr4::ParserRuleContext() { }
+    Integer_atom_typeContext() = default;
     void copyFrom(Integer_atom_typeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -3860,7 +3860,7 @@
   public:
     Integer_vector_typeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Integer_vector_typeContext() : antlr4::ParserRuleContext() { }
+    Integer_vector_typeContext() = default;
     void copyFrom(Integer_vector_typeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -3902,7 +3902,7 @@
   public:
     Non_integer_typeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Non_integer_typeContext() : antlr4::ParserRuleContext() { }
+    Non_integer_typeContext() = default;
     void copyFrom(Non_integer_typeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -3944,7 +3944,7 @@
   public:
     Net_typeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Net_typeContext() : antlr4::ParserRuleContext() { }
+    Net_typeContext() = default;
     void copyFrom(Net_typeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -4115,7 +4115,7 @@
   public:
     SigningContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    SigningContext() : antlr4::ParserRuleContext() { }
+    SigningContext() = default;
     void copyFrom(SigningContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -4163,7 +4163,7 @@
   public:
     Random_qualifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Random_qualifierContext() : antlr4::ParserRuleContext() { }
+    Random_qualifierContext() = default;
     void copyFrom(Random_qualifierContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -4292,7 +4292,7 @@
   public:
     Strength0Context(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Strength0Context() : antlr4::ParserRuleContext() { }
+    Strength0Context() = default;
     void copyFrom(Strength0Context *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -4343,7 +4343,7 @@
   public:
     Strength1Context(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Strength1Context() : antlr4::ParserRuleContext() { }
+    Strength1Context() = default;
     void copyFrom(Strength1Context *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -4394,7 +4394,7 @@
   public:
     Charge_strengthContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Charge_strengthContext() : antlr4::ParserRuleContext() { }
+    Charge_strengthContext() = default;
     void copyFrom(Charge_strengthContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -5263,7 +5263,7 @@
   public:
     Tf_port_directionContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Tf_port_directionContext() : antlr4::ParserRuleContext() { }
+    Tf_port_directionContext() = default;
     void copyFrom(Tf_port_directionContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -5400,7 +5400,7 @@
   public:
     Overload_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Overload_operatorContext() : antlr4::ParserRuleContext() { }
+    Overload_operatorContext() = default;
     void copyFrom(Overload_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -6191,7 +6191,7 @@
   public:
     Sequence_formal_typeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Sequence_formal_typeContext() : antlr4::ParserRuleContext() { }
+    Sequence_formal_typeContext() = default;
     void copyFrom(Sequence_formal_typeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -6786,7 +6786,7 @@
   public:
     Bins_keywordContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Bins_keywordContext() : antlr4::ParserRuleContext() { }
+    Bins_keywordContext() = default;
     void copyFrom(Bins_keywordContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7305,7 +7305,7 @@
   public:
     Pulldown_strengthContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Pulldown_strengthContext() : antlr4::ParserRuleContext() { }
+    Pulldown_strengthContext() = default;
     void copyFrom(Pulldown_strengthContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7357,7 +7357,7 @@
   public:
     Pullup_strengthContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Pullup_strengthContext() : antlr4::ParserRuleContext() { }
+    Pullup_strengthContext() = default;
     void copyFrom(Pullup_strengthContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7409,7 +7409,7 @@
   public:
     Cmos_switchtypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Cmos_switchtypeContext() : antlr4::ParserRuleContext() { }
+    Cmos_switchtypeContext() = default;
     void copyFrom(Cmos_switchtypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7442,7 +7442,7 @@
   public:
     Enable_gatetypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Enable_gatetypeContext() : antlr4::ParserRuleContext() { }
+    Enable_gatetypeContext() = default;
     void copyFrom(Enable_gatetypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7493,7 +7493,7 @@
   public:
     Mos_switchtypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Mos_switchtypeContext() : antlr4::ParserRuleContext() { }
+    Mos_switchtypeContext() = default;
     void copyFrom(Mos_switchtypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7544,7 +7544,7 @@
   public:
     N_input_gatetypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    N_input_gatetypeContext() : antlr4::ParserRuleContext() { }
+    N_input_gatetypeContext() = default;
     void copyFrom(N_input_gatetypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7613,7 +7613,7 @@
   public:
     N_output_gatetypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    N_output_gatetypeContext() : antlr4::ParserRuleContext() { }
+    N_output_gatetypeContext() = default;
     void copyFrom(N_output_gatetypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7646,7 +7646,7 @@
   public:
     Pass_en_switchtypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Pass_en_switchtypeContext() : antlr4::ParserRuleContext() { }
+    Pass_en_switchtypeContext() = default;
     void copyFrom(Pass_en_switchtypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -7697,7 +7697,7 @@
   public:
     Pass_switchtypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Pass_switchtypeContext() : antlr4::ParserRuleContext() { }
+    Pass_switchtypeContext() = default;
     void copyFrom(Pass_switchtypeContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -8809,7 +8809,7 @@
   public:
     Init_valContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Init_valContext() : antlr4::ParserRuleContext() { }
+    Init_valContext() = default;
     void copyFrom(Init_valContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -9193,7 +9193,7 @@
   public:
     Always_keywordContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Always_keywordContext() : antlr4::ParserRuleContext() { }
+    Always_keywordContext() = default;
     void copyFrom(Always_keywordContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -9285,7 +9285,7 @@
   public:
     Assignment_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Assignment_operatorContext() : antlr4::ParserRuleContext() { }
+    Assignment_operatorContext() = default;
     void copyFrom(Assignment_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -9954,7 +9954,7 @@
   public:
     Case_keywordContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Case_keywordContext() : antlr4::ParserRuleContext() { }
+    Case_keywordContext() = default;
     void copyFrom(Case_keywordContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -10702,7 +10702,7 @@
   public:
     Default_skewContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Default_skewContext() : antlr4::ParserRuleContext() { }
+    Default_skewContext() = default;
     void copyFrom(Default_skewContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -10749,7 +10749,7 @@
   public:
     Clocking_directionContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Clocking_directionContext() : antlr4::ParserRuleContext() { }
+    Clocking_directionContext() = default;
     void copyFrom(Clocking_directionContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -10859,7 +10859,7 @@
   public:
     Edge_identifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Edge_identifierContext() : antlr4::ParserRuleContext() { }
+    Edge_identifierContext() = default;
     void copyFrom(Edge_identifierContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -12237,7 +12237,7 @@
   public:
     Timing_check_event_controlContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Timing_check_event_controlContext() : antlr4::ParserRuleContext() { }
+    Timing_check_event_controlContext() = default;
     void copyFrom(Timing_check_event_controlContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -12360,7 +12360,7 @@
   public:
     Scalar_constantContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Scalar_constantContext() : antlr4::ParserRuleContext() { }
+    Scalar_constantContext() = default;
     void copyFrom(Scalar_constantContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -13703,7 +13703,7 @@
   public:
     Unary_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Unary_operatorContext() : antlr4::ParserRuleContext() { }
+    Unary_operatorContext() = default;
     void copyFrom(Unary_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -13817,7 +13817,7 @@
   public:
     Binary_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Binary_operatorContext() : antlr4::ParserRuleContext() { }
+    Binary_operatorContext() = default;
     void copyFrom(Binary_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -14129,7 +14129,7 @@
   public:
     Inc_or_dec_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Inc_or_dec_operatorContext() : antlr4::ParserRuleContext() { }
+    Inc_or_dec_operatorContext() = default;
     void copyFrom(Inc_or_dec_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -14162,7 +14162,7 @@
   public:
     Unary_module_path_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Unary_module_path_operatorContext() : antlr4::ParserRuleContext() { }
+    Unary_module_path_operatorContext() = default;
     void copyFrom(Unary_module_path_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -14258,7 +14258,7 @@
   public:
     Binary_module_path_operatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    Binary_module_path_operatorContext() : antlr4::ParserRuleContext() { }
+    Binary_module_path_operatorContext() = default;
     void copyFrom(Binary_module_path_operatorContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
@@ -14354,7 +14354,7 @@
   public:
     NumberContext(antlr4::ParserRuleContext *parent, size_t invokingState);
    
-    NumberContext() : antlr4::ParserRuleContext() { }
+    NumberContext() = default;
     void copyFrom(NumberContext *context);
     using antlr4::ParserRuleContext::copyFrom;
 
diff --git a/src/parser/SV3_1aParserBaseListener.cpp b/src/parser/SV3_1aParserBaseListener.cpp
index ca75084..8ed1556 100644
--- a/src/parser/SV3_1aParserBaseListener.cpp
+++ b/src/parser/SV3_1aParserBaseListener.cpp
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aParser.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aParser.g4 by ANTLR 4.7.2
 
 
 #include "SV3_1aParserBaseListener.h"
diff --git a/src/parser/SV3_1aParserBaseListener.h b/src/parser/SV3_1aParserBaseListener.h
index d0baaa4..bfe80ad 100644
--- a/src/parser/SV3_1aParserBaseListener.h
+++ b/src/parser/SV3_1aParserBaseListener.h
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aParser.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aParser.g4 by ANTLR 4.7.2
 
 #pragma once
 
diff --git a/src/parser/SV3_1aParserListener.cpp b/src/parser/SV3_1aParserListener.cpp
index 5f32f42..c062014 100644
--- a/src/parser/SV3_1aParserListener.cpp
+++ b/src/parser/SV3_1aParserListener.cpp
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aParser.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aParser.g4 by ANTLR 4.7.2
 
 
 #include "SV3_1aParserListener.h"
diff --git a/src/parser/SV3_1aParserListener.h b/src/parser/SV3_1aParserListener.h
index 5ec8514..79e3655 100644
--- a/src/parser/SV3_1aParserListener.h
+++ b/src/parser/SV3_1aParserListener.h
@@ -1,5 +1,5 @@
 
-// Generated from SV3_1aParser.g4 by ANTLR 4.7.1
+// Generated from /home/alain/Surelog/grammar/SV3_1aParser.g4 by ANTLR 4.7.2
 
 #pragma once
 
diff --git a/src/parser/SV3_1aPpParser.cpp b/src/parser/SV3_1aPpParser.cpp
index 074908c..e7947b1 100644
--- a/src/parser/SV3_1aPpParser.cpp
+++ b/src/parser/SV3_1aPpParser.cpp
@@ -3,7 +3,6 @@
 
 
 #include "SV3_1aPpParserListener.h"
-#include "SV3_1aPpParserVisitor.h"
 
 #include "SV3_1aPpParser.h"
 
@@ -63,14 +62,6 @@
     parserListener->exitSource_text(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Source_textContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSource_text(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Source_textContext* SV3_1aPpParser::source_text() {
   Source_textContext *_localctx = _tracker.createInstance<Source_textContext>(_ctx, getState());
   enterRule(_localctx, 0, SV3_1aPpParser::RuleSource_text);
@@ -510,14 +501,6 @@
     parserListener->exitDescription(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::DescriptionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDescription(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::DescriptionContext* SV3_1aPpParser::description() {
   DescriptionContext *_localctx = _tracker.createInstance<DescriptionContext>(_ctx, getState());
   enterRule(_localctx, 2, SV3_1aPpParser::RuleDescription);
@@ -1109,13 +1092,6 @@
   if (parserListener != nullptr)
     parserListener->exitMacroInstanceWithArgs(this);
 }
-
-antlrcpp::Any SV3_1aPpParser::MacroInstanceWithArgsContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMacroInstanceWithArgs(this);
-  else
-    return visitor->visitChildren(this);
-}
 //----------------- MacroInstanceNoArgsContext ------------------------------------------------------------------
 
 tree::TerminalNode* SV3_1aPpParser::MacroInstanceNoArgsContext::Macro_identifier() {
@@ -1138,13 +1114,6 @@
   if (parserListener != nullptr)
     parserListener->exitMacroInstanceNoArgs(this);
 }
-
-antlrcpp::Any SV3_1aPpParser::MacroInstanceNoArgsContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMacroInstanceNoArgs(this);
-  else
-    return visitor->visitChildren(this);
-}
 SV3_1aPpParser::Macro_instanceContext* SV3_1aPpParser::macro_instance() {
   Macro_instanceContext *_localctx = _tracker.createInstance<Macro_instanceContext>(_ctx, getState());
   enterRule(_localctx, 4, SV3_1aPpParser::RuleMacro_instance);
@@ -1258,14 +1227,6 @@
     parserListener->exitUnterminated_string(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Unterminated_stringContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUnterminated_string(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Unterminated_stringContext* SV3_1aPpParser::unterminated_string() {
   Unterminated_stringContext *_localctx = _tracker.createInstance<Unterminated_stringContext>(_ctx, getState());
   enterRule(_localctx, 6, SV3_1aPpParser::RuleUnterminated_string);
@@ -1360,14 +1321,6 @@
     parserListener->exitMacro_actual_args(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Macro_actual_argsContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMacro_actual_args(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Macro_actual_argsContext* SV3_1aPpParser::macro_actual_args() {
   Macro_actual_argsContext *_localctx = _tracker.createInstance<Macro_actual_argsContext>(_ctx, getState());
   enterRule(_localctx, 8, SV3_1aPpParser::RuleMacro_actual_args);
@@ -1490,14 +1443,6 @@
     parserListener->exitComments(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::CommentsContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitComments(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::CommentsContext* SV3_1aPpParser::comments() {
   CommentsContext *_localctx = _tracker.createInstance<CommentsContext>(_ctx, getState());
   enterRule(_localctx, 10, SV3_1aPpParser::RuleComments);
@@ -1557,14 +1502,6 @@
     parserListener->exitNumber(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::NumberContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNumber(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::NumberContext* SV3_1aPpParser::number() {
   NumberContext *_localctx = _tracker.createInstance<NumberContext>(_ctx, getState());
   enterRule(_localctx, 12, SV3_1aPpParser::RuleNumber);
@@ -1614,14 +1551,6 @@
     parserListener->exitPound_delay(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Pound_delayContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitPound_delay(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Pound_delayContext* SV3_1aPpParser::pound_delay() {
   Pound_delayContext *_localctx = _tracker.createInstance<Pound_delayContext>(_ctx, getState());
   enterRule(_localctx, 14, SV3_1aPpParser::RulePound_delay);
@@ -1687,14 +1616,6 @@
     parserListener->exitMacro_definition(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Macro_definitionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMacro_definition(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Macro_definitionContext* SV3_1aPpParser::macro_definition() {
   Macro_definitionContext *_localctx = _tracker.createInstance<Macro_definitionContext>(_ctx, getState());
   enterRule(_localctx, 16, SV3_1aPpParser::RuleMacro_definition);
@@ -1792,14 +1713,6 @@
     parserListener->exitInclude_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Include_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitInclude_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Include_directive_one_lineContext* SV3_1aPpParser::include_directive_one_line() {
   Include_directive_one_lineContext *_localctx = _tracker.createInstance<Include_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 18, SV3_1aPpParser::RuleInclude_directive_one_line);
@@ -1882,14 +1795,6 @@
     parserListener->exitInclude_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Include_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitInclude_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Include_directiveContext* SV3_1aPpParser::include_directive() {
   Include_directiveContext *_localctx = _tracker.createInstance<Include_directiveContext>(_ctx, getState());
   enterRule(_localctx, 20, SV3_1aPpParser::RuleInclude_directive);
@@ -1984,14 +1889,6 @@
     parserListener->exitLine_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Line_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitLine_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Line_directive_one_lineContext* SV3_1aPpParser::line_directive_one_line() {
   Line_directive_one_lineContext *_localctx = _tracker.createInstance<Line_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 22, SV3_1aPpParser::RuleLine_directive_one_line);
@@ -2074,14 +1971,6 @@
     parserListener->exitLine_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Line_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitLine_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Line_directiveContext* SV3_1aPpParser::line_directive() {
   Line_directiveContext *_localctx = _tracker.createInstance<Line_directiveContext>(_ctx, getState());
   enterRule(_localctx, 24, SV3_1aPpParser::RuleLine_directive);
@@ -2153,14 +2042,6 @@
     parserListener->exitDefault_nettype_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_nettype_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_nettype_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_nettype_directive_one_lineContext* SV3_1aPpParser::default_nettype_directive_one_line() {
   Default_nettype_directive_one_lineContext *_localctx = _tracker.createInstance<Default_nettype_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 26, SV3_1aPpParser::RuleDefault_nettype_directive_one_line);
@@ -2231,14 +2112,6 @@
     parserListener->exitDefault_nettype_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_nettype_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_nettype_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_nettype_directiveContext* SV3_1aPpParser::default_nettype_directive() {
   Default_nettype_directiveContext *_localctx = _tracker.createInstance<Default_nettype_directiveContext>(_ctx, getState());
   enterRule(_localctx, 28, SV3_1aPpParser::RuleDefault_nettype_directive);
@@ -2292,14 +2165,6 @@
     parserListener->exitSv_file_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Sv_file_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSv_file_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Sv_file_directiveContext* SV3_1aPpParser::sv_file_directive() {
   Sv_file_directiveContext *_localctx = _tracker.createInstance<Sv_file_directiveContext>(_ctx, getState());
   enterRule(_localctx, 30, SV3_1aPpParser::RuleSv_file_directive);
@@ -2349,14 +2214,6 @@
     parserListener->exitSv_line_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Sv_line_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSv_line_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Sv_line_directiveContext* SV3_1aPpParser::sv_line_directive() {
   Sv_line_directiveContext *_localctx = _tracker.createInstance<Sv_line_directiveContext>(_ctx, getState());
   enterRule(_localctx, 32, SV3_1aPpParser::RuleSv_line_directive);
@@ -2418,14 +2275,6 @@
     parserListener->exitTimescale_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Timescale_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitTimescale_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Timescale_directive_one_lineContext* SV3_1aPpParser::timescale_directive_one_line() {
   Timescale_directive_one_lineContext *_localctx = _tracker.createInstance<Timescale_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 34, SV3_1aPpParser::RuleTimescale_directive_one_line);
@@ -2492,14 +2341,6 @@
     parserListener->exitTimescale_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Timescale_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitTimescale_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Timescale_directiveContext* SV3_1aPpParser::timescale_directive() {
   Timescale_directiveContext *_localctx = _tracker.createInstance<Timescale_directiveContext>(_ctx, getState());
   enterRule(_localctx, 36, SV3_1aPpParser::RuleTimescale_directive);
@@ -2567,14 +2408,6 @@
     parserListener->exitUndef_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Undef_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUndef_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Undef_directiveContext* SV3_1aPpParser::undef_directive() {
   Undef_directiveContext *_localctx = _tracker.createInstance<Undef_directiveContext>(_ctx, getState());
   enterRule(_localctx, 38, SV3_1aPpParser::RuleUndef_directive);
@@ -2703,14 +2536,6 @@
     parserListener->exitIfdef_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Ifdef_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIfdef_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Ifdef_directive_one_lineContext* SV3_1aPpParser::ifdef_directive_one_line() {
   Ifdef_directive_one_lineContext *_localctx = _tracker.createInstance<Ifdef_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 40, SV3_1aPpParser::RuleIfdef_directive_one_line);
@@ -2876,14 +2701,6 @@
     parserListener->exitIfdef_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Ifdef_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIfdef_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Ifdef_directiveContext* SV3_1aPpParser::ifdef_directive() {
   Ifdef_directiveContext *_localctx = _tracker.createInstance<Ifdef_directiveContext>(_ctx, getState());
   enterRule(_localctx, 42, SV3_1aPpParser::RuleIfdef_directive);
@@ -2976,14 +2793,6 @@
     parserListener->exitIfdef_directive_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Ifdef_directive_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIfdef_directive_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Ifdef_directive_in_macro_bodyContext* SV3_1aPpParser::ifdef_directive_in_macro_body() {
   Ifdef_directive_in_macro_bodyContext *_localctx = _tracker.createInstance<Ifdef_directive_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 44, SV3_1aPpParser::RuleIfdef_directive_in_macro_body);
@@ -3113,14 +2922,6 @@
     parserListener->exitIfndef_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Ifndef_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIfndef_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Ifndef_directive_one_lineContext* SV3_1aPpParser::ifndef_directive_one_line() {
   Ifndef_directive_one_lineContext *_localctx = _tracker.createInstance<Ifndef_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 46, SV3_1aPpParser::RuleIfndef_directive_one_line);
@@ -3286,14 +3087,6 @@
     parserListener->exitIfndef_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Ifndef_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIfndef_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Ifndef_directiveContext* SV3_1aPpParser::ifndef_directive() {
   Ifndef_directiveContext *_localctx = _tracker.createInstance<Ifndef_directiveContext>(_ctx, getState());
   enterRule(_localctx, 48, SV3_1aPpParser::RuleIfndef_directive);
@@ -3386,14 +3179,6 @@
     parserListener->exitIfndef_directive_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Ifndef_directive_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIfndef_directive_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Ifndef_directive_in_macro_bodyContext* SV3_1aPpParser::ifndef_directive_in_macro_body() {
   Ifndef_directive_in_macro_bodyContext *_localctx = _tracker.createInstance<Ifndef_directive_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 50, SV3_1aPpParser::RuleIfndef_directive_in_macro_body);
@@ -3487,14 +3272,6 @@
     parserListener->exitElsif_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Elsif_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElsif_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Elsif_directive_one_lineContext* SV3_1aPpParser::elsif_directive_one_line() {
   Elsif_directive_one_lineContext *_localctx = _tracker.createInstance<Elsif_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 52, SV3_1aPpParser::RuleElsif_directive_one_line);
@@ -3580,14 +3357,6 @@
     parserListener->exitElsif_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Elsif_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElsif_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Elsif_directiveContext* SV3_1aPpParser::elsif_directive() {
   Elsif_directiveContext *_localctx = _tracker.createInstance<Elsif_directiveContext>(_ctx, getState());
   enterRule(_localctx, 54, SV3_1aPpParser::RuleElsif_directive);
@@ -3680,14 +3449,6 @@
     parserListener->exitElsif_directive_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Elsif_directive_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElsif_directive_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Elsif_directive_in_macro_bodyContext* SV3_1aPpParser::elsif_directive_in_macro_body() {
   Elsif_directive_in_macro_bodyContext *_localctx = _tracker.createInstance<Elsif_directive_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 56, SV3_1aPpParser::RuleElsif_directive_in_macro_body);
@@ -3781,14 +3542,6 @@
     parserListener->exitElseif_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Elseif_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElseif_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Elseif_directive_one_lineContext* SV3_1aPpParser::elseif_directive_one_line() {
   Elseif_directive_one_lineContext *_localctx = _tracker.createInstance<Elseif_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 58, SV3_1aPpParser::RuleElseif_directive_one_line);
@@ -3874,14 +3627,6 @@
     parserListener->exitElseif_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Elseif_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElseif_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Elseif_directiveContext* SV3_1aPpParser::elseif_directive() {
   Elseif_directiveContext *_localctx = _tracker.createInstance<Elseif_directiveContext>(_ctx, getState());
   enterRule(_localctx, 60, SV3_1aPpParser::RuleElseif_directive);
@@ -3974,14 +3719,6 @@
     parserListener->exitElseif_directive_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Elseif_directive_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElseif_directive_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Elseif_directive_in_macro_bodyContext* SV3_1aPpParser::elseif_directive_in_macro_body() {
   Elseif_directive_in_macro_bodyContext *_localctx = _tracker.createInstance<Elseif_directive_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 62, SV3_1aPpParser::RuleElseif_directive_in_macro_body);
@@ -4075,14 +3812,6 @@
     parserListener->exitElse_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Else_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElse_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Else_directive_one_lineContext* SV3_1aPpParser::else_directive_one_line() {
   Else_directive_one_lineContext *_localctx = _tracker.createInstance<Else_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 64, SV3_1aPpParser::RuleElse_directive_one_line);
@@ -4152,14 +3881,6 @@
     parserListener->exitElse_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Else_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitElse_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Else_directiveContext* SV3_1aPpParser::else_directive() {
   Else_directiveContext *_localctx = _tracker.createInstance<Else_directiveContext>(_ctx, getState());
   enterRule(_localctx, 66, SV3_1aPpParser::RuleElse_directive);
@@ -4229,14 +3950,6 @@
     parserListener->exitEndif_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endif_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndif_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endif_directive_one_lineContext* SV3_1aPpParser::endif_directive_one_line() {
   Endif_directive_one_lineContext *_localctx = _tracker.createInstance<Endif_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 68, SV3_1aPpParser::RuleEndif_directive_one_line);
@@ -4347,14 +4060,6 @@
     parserListener->exitEndif_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endif_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndif_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endif_directiveContext* SV3_1aPpParser::endif_directive() {
   Endif_directiveContext *_localctx = _tracker.createInstance<Endif_directiveContext>(_ctx, getState());
   enterRule(_localctx, 70, SV3_1aPpParser::RuleEndif_directive);
@@ -4444,14 +4149,6 @@
     parserListener->exitResetall_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Resetall_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitResetall_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Resetall_directive_one_lineContext* SV3_1aPpParser::resetall_directive_one_line() {
   Resetall_directive_one_lineContext *_localctx = _tracker.createInstance<Resetall_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 72, SV3_1aPpParser::RuleResetall_directive_one_line);
@@ -4514,14 +4211,6 @@
     parserListener->exitResetall_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Resetall_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitResetall_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Resetall_directiveContext* SV3_1aPpParser::resetall_directive() {
   Resetall_directiveContext *_localctx = _tracker.createInstance<Resetall_directiveContext>(_ctx, getState());
   enterRule(_localctx, 74, SV3_1aPpParser::RuleResetall_directive);
@@ -4583,14 +4272,6 @@
     parserListener->exitBegin_keywords_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Begin_keywords_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitBegin_keywords_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Begin_keywords_directive_one_lineContext* SV3_1aPpParser::begin_keywords_directive_one_line() {
   Begin_keywords_directive_one_lineContext *_localctx = _tracker.createInstance<Begin_keywords_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 76, SV3_1aPpParser::RuleBegin_keywords_directive_one_line);
@@ -4661,14 +4342,6 @@
     parserListener->exitBegin_keywords_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Begin_keywords_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitBegin_keywords_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Begin_keywords_directiveContext* SV3_1aPpParser::begin_keywords_directive() {
   Begin_keywords_directiveContext *_localctx = _tracker.createInstance<Begin_keywords_directiveContext>(_ctx, getState());
   enterRule(_localctx, 78, SV3_1aPpParser::RuleBegin_keywords_directive);
@@ -4734,14 +4407,6 @@
     parserListener->exitEnd_keywords_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::End_keywords_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEnd_keywords_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::End_keywords_directive_one_lineContext* SV3_1aPpParser::end_keywords_directive_one_line() {
   End_keywords_directive_one_lineContext *_localctx = _tracker.createInstance<End_keywords_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 80, SV3_1aPpParser::RuleEnd_keywords_directive_one_line);
@@ -4804,14 +4469,6 @@
     parserListener->exitEnd_keywords_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::End_keywords_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEnd_keywords_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::End_keywords_directiveContext* SV3_1aPpParser::end_keywords_directive() {
   End_keywords_directiveContext *_localctx = _tracker.createInstance<End_keywords_directiveContext>(_ctx, getState());
   enterRule(_localctx, 82, SV3_1aPpParser::RuleEnd_keywords_directive);
@@ -4873,14 +4530,6 @@
     parserListener->exitPragma_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Pragma_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitPragma_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Pragma_directive_one_lineContext* SV3_1aPpParser::pragma_directive_one_line() {
   Pragma_directive_one_lineContext *_localctx = _tracker.createInstance<Pragma_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 84, SV3_1aPpParser::RulePragma_directive_one_line);
@@ -4967,14 +4616,6 @@
     parserListener->exitPragma_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Pragma_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitPragma_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Pragma_directiveContext* SV3_1aPpParser::pragma_directive() {
   Pragma_directiveContext *_localctx = _tracker.createInstance<Pragma_directiveContext>(_ctx, getState());
   enterRule(_localctx, 86, SV3_1aPpParser::RulePragma_directive);
@@ -5067,14 +4708,6 @@
     parserListener->exitCelldefine_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Celldefine_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitCelldefine_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Celldefine_directive_one_lineContext* SV3_1aPpParser::celldefine_directive_one_line() {
   Celldefine_directive_one_lineContext *_localctx = _tracker.createInstance<Celldefine_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 88, SV3_1aPpParser::RuleCelldefine_directive_one_line);
@@ -5137,14 +4770,6 @@
     parserListener->exitCelldefine_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Celldefine_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitCelldefine_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Celldefine_directiveContext* SV3_1aPpParser::celldefine_directive() {
   Celldefine_directiveContext *_localctx = _tracker.createInstance<Celldefine_directiveContext>(_ctx, getState());
   enterRule(_localctx, 90, SV3_1aPpParser::RuleCelldefine_directive);
@@ -5206,14 +4831,6 @@
     parserListener->exitEndcelldefine_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endcelldefine_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndcelldefine_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endcelldefine_directive_one_lineContext* SV3_1aPpParser::endcelldefine_directive_one_line() {
   Endcelldefine_directive_one_lineContext *_localctx = _tracker.createInstance<Endcelldefine_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 92, SV3_1aPpParser::RuleEndcelldefine_directive_one_line);
@@ -5276,14 +4893,6 @@
     parserListener->exitEndcelldefine_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endcelldefine_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndcelldefine_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endcelldefine_directiveContext* SV3_1aPpParser::endcelldefine_directive() {
   Endcelldefine_directiveContext *_localctx = _tracker.createInstance<Endcelldefine_directiveContext>(_ctx, getState());
   enterRule(_localctx, 94, SV3_1aPpParser::RuleEndcelldefine_directive);
@@ -5345,14 +4954,6 @@
     parserListener->exitProtect_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Protect_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitProtect_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Protect_directive_one_lineContext* SV3_1aPpParser::protect_directive_one_line() {
   Protect_directive_one_lineContext *_localctx = _tracker.createInstance<Protect_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 96, SV3_1aPpParser::RuleProtect_directive_one_line);
@@ -5415,14 +5016,6 @@
     parserListener->exitProtect_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Protect_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitProtect_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Protect_directiveContext* SV3_1aPpParser::protect_directive() {
   Protect_directiveContext *_localctx = _tracker.createInstance<Protect_directiveContext>(_ctx, getState());
   enterRule(_localctx, 98, SV3_1aPpParser::RuleProtect_directive);
@@ -5484,14 +5077,6 @@
     parserListener->exitEndprotect_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endprotect_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndprotect_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endprotect_directive_one_lineContext* SV3_1aPpParser::endprotect_directive_one_line() {
   Endprotect_directive_one_lineContext *_localctx = _tracker.createInstance<Endprotect_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 100, SV3_1aPpParser::RuleEndprotect_directive_one_line);
@@ -5554,14 +5139,6 @@
     parserListener->exitEndprotect_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endprotect_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndprotect_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endprotect_directiveContext* SV3_1aPpParser::endprotect_directive() {
   Endprotect_directiveContext *_localctx = _tracker.createInstance<Endprotect_directiveContext>(_ctx, getState());
   enterRule(_localctx, 102, SV3_1aPpParser::RuleEndprotect_directive);
@@ -5623,14 +5200,6 @@
     parserListener->exitProtected_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Protected_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitProtected_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Protected_directive_one_lineContext* SV3_1aPpParser::protected_directive_one_line() {
   Protected_directive_one_lineContext *_localctx = _tracker.createInstance<Protected_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 104, SV3_1aPpParser::RuleProtected_directive_one_line);
@@ -5693,14 +5262,6 @@
     parserListener->exitProtected_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Protected_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitProtected_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Protected_directiveContext* SV3_1aPpParser::protected_directive() {
   Protected_directiveContext *_localctx = _tracker.createInstance<Protected_directiveContext>(_ctx, getState());
   enterRule(_localctx, 106, SV3_1aPpParser::RuleProtected_directive);
@@ -5762,14 +5323,6 @@
     parserListener->exitEndprotected_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endprotected_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndprotected_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endprotected_directive_one_lineContext* SV3_1aPpParser::endprotected_directive_one_line() {
   Endprotected_directive_one_lineContext *_localctx = _tracker.createInstance<Endprotected_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 108, SV3_1aPpParser::RuleEndprotected_directive_one_line);
@@ -5832,14 +5385,6 @@
     parserListener->exitEndprotected_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Endprotected_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndprotected_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Endprotected_directiveContext* SV3_1aPpParser::endprotected_directive() {
   Endprotected_directiveContext *_localctx = _tracker.createInstance<Endprotected_directiveContext>(_ctx, getState());
   enterRule(_localctx, 110, SV3_1aPpParser::RuleEndprotected_directive);
@@ -5901,14 +5446,6 @@
     parserListener->exitExpand_vectornets_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Expand_vectornets_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitExpand_vectornets_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Expand_vectornets_directive_one_lineContext* SV3_1aPpParser::expand_vectornets_directive_one_line() {
   Expand_vectornets_directive_one_lineContext *_localctx = _tracker.createInstance<Expand_vectornets_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 112, SV3_1aPpParser::RuleExpand_vectornets_directive_one_line);
@@ -5971,14 +5508,6 @@
     parserListener->exitExpand_vectornets_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Expand_vectornets_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitExpand_vectornets_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Expand_vectornets_directiveContext* SV3_1aPpParser::expand_vectornets_directive() {
   Expand_vectornets_directiveContext *_localctx = _tracker.createInstance<Expand_vectornets_directiveContext>(_ctx, getState());
   enterRule(_localctx, 114, SV3_1aPpParser::RuleExpand_vectornets_directive);
@@ -6040,14 +5569,6 @@
     parserListener->exitNoexpand_vectornets_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noexpand_vectornets_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoexpand_vectornets_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noexpand_vectornets_directive_one_lineContext* SV3_1aPpParser::noexpand_vectornets_directive_one_line() {
   Noexpand_vectornets_directive_one_lineContext *_localctx = _tracker.createInstance<Noexpand_vectornets_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 116, SV3_1aPpParser::RuleNoexpand_vectornets_directive_one_line);
@@ -6110,14 +5631,6 @@
     parserListener->exitNoexpand_vectornets_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noexpand_vectornets_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoexpand_vectornets_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noexpand_vectornets_directiveContext* SV3_1aPpParser::noexpand_vectornets_directive() {
   Noexpand_vectornets_directiveContext *_localctx = _tracker.createInstance<Noexpand_vectornets_directiveContext>(_ctx, getState());
   enterRule(_localctx, 118, SV3_1aPpParser::RuleNoexpand_vectornets_directive);
@@ -6179,14 +5692,6 @@
     parserListener->exitAutoexpand_vectornets_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Autoexpand_vectornets_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitAutoexpand_vectornets_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Autoexpand_vectornets_directive_one_lineContext* SV3_1aPpParser::autoexpand_vectornets_directive_one_line() {
   Autoexpand_vectornets_directive_one_lineContext *_localctx = _tracker.createInstance<Autoexpand_vectornets_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 120, SV3_1aPpParser::RuleAutoexpand_vectornets_directive_one_line);
@@ -6249,14 +5754,6 @@
     parserListener->exitAutoexpand_vectornets_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Autoexpand_vectornets_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitAutoexpand_vectornets_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Autoexpand_vectornets_directiveContext* SV3_1aPpParser::autoexpand_vectornets_directive() {
   Autoexpand_vectornets_directiveContext *_localctx = _tracker.createInstance<Autoexpand_vectornets_directiveContext>(_ctx, getState());
   enterRule(_localctx, 122, SV3_1aPpParser::RuleAutoexpand_vectornets_directive);
@@ -6310,14 +5807,6 @@
     parserListener->exitUselib_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Uselib_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUselib_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Uselib_directive_one_lineContext* SV3_1aPpParser::uselib_directive_one_line() {
   Uselib_directive_one_lineContext *_localctx = _tracker.createInstance<Uselib_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 124, SV3_1aPpParser::RuleUselib_directive_one_line);
@@ -6377,14 +5866,6 @@
     parserListener->exitUselib_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Uselib_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUselib_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Uselib_directiveContext* SV3_1aPpParser::uselib_directive() {
   Uselib_directiveContext *_localctx = _tracker.createInstance<Uselib_directiveContext>(_ctx, getState());
   enterRule(_localctx, 126, SV3_1aPpParser::RuleUselib_directive);
@@ -6465,14 +5946,6 @@
     parserListener->exitDisable_portfaults_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Disable_portfaults_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDisable_portfaults_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Disable_portfaults_directive_one_lineContext* SV3_1aPpParser::disable_portfaults_directive_one_line() {
   Disable_portfaults_directive_one_lineContext *_localctx = _tracker.createInstance<Disable_portfaults_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 128, SV3_1aPpParser::RuleDisable_portfaults_directive_one_line);
@@ -6535,14 +6008,6 @@
     parserListener->exitDisable_portfaults_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Disable_portfaults_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDisable_portfaults_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Disable_portfaults_directiveContext* SV3_1aPpParser::disable_portfaults_directive() {
   Disable_portfaults_directiveContext *_localctx = _tracker.createInstance<Disable_portfaults_directiveContext>(_ctx, getState());
   enterRule(_localctx, 130, SV3_1aPpParser::RuleDisable_portfaults_directive);
@@ -6604,14 +6069,6 @@
     parserListener->exitEnable_portfaults_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Enable_portfaults_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEnable_portfaults_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Enable_portfaults_directive_one_lineContext* SV3_1aPpParser::enable_portfaults_directive_one_line() {
   Enable_portfaults_directive_one_lineContext *_localctx = _tracker.createInstance<Enable_portfaults_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 132, SV3_1aPpParser::RuleEnable_portfaults_directive_one_line);
@@ -6674,14 +6131,6 @@
     parserListener->exitEnable_portfaults_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Enable_portfaults_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEnable_portfaults_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Enable_portfaults_directiveContext* SV3_1aPpParser::enable_portfaults_directive() {
   Enable_portfaults_directiveContext *_localctx = _tracker.createInstance<Enable_portfaults_directiveContext>(_ctx, getState());
   enterRule(_localctx, 134, SV3_1aPpParser::RuleEnable_portfaults_directive);
@@ -6743,14 +6192,6 @@
     parserListener->exitNosuppress_faults_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Nosuppress_faults_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNosuppress_faults_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Nosuppress_faults_directive_one_lineContext* SV3_1aPpParser::nosuppress_faults_directive_one_line() {
   Nosuppress_faults_directive_one_lineContext *_localctx = _tracker.createInstance<Nosuppress_faults_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 136, SV3_1aPpParser::RuleNosuppress_faults_directive_one_line);
@@ -6813,14 +6254,6 @@
     parserListener->exitNosuppress_faults_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Nosuppress_faults_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNosuppress_faults_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Nosuppress_faults_directiveContext* SV3_1aPpParser::nosuppress_faults_directive() {
   Nosuppress_faults_directiveContext *_localctx = _tracker.createInstance<Nosuppress_faults_directiveContext>(_ctx, getState());
   enterRule(_localctx, 138, SV3_1aPpParser::RuleNosuppress_faults_directive);
@@ -6882,14 +6315,6 @@
     parserListener->exitSuppress_faults_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Suppress_faults_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSuppress_faults_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Suppress_faults_directive_one_lineContext* SV3_1aPpParser::suppress_faults_directive_one_line() {
   Suppress_faults_directive_one_lineContext *_localctx = _tracker.createInstance<Suppress_faults_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 140, SV3_1aPpParser::RuleSuppress_faults_directive_one_line);
@@ -6952,14 +6377,6 @@
     parserListener->exitSuppress_faults_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Suppress_faults_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSuppress_faults_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Suppress_faults_directiveContext* SV3_1aPpParser::suppress_faults_directive() {
   Suppress_faults_directiveContext *_localctx = _tracker.createInstance<Suppress_faults_directiveContext>(_ctx, getState());
   enterRule(_localctx, 142, SV3_1aPpParser::RuleSuppress_faults_directive);
@@ -7021,14 +6438,6 @@
     parserListener->exitSigned_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Signed_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSigned_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Signed_directive_one_lineContext* SV3_1aPpParser::signed_directive_one_line() {
   Signed_directive_one_lineContext *_localctx = _tracker.createInstance<Signed_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 144, SV3_1aPpParser::RuleSigned_directive_one_line);
@@ -7091,14 +6500,6 @@
     parserListener->exitSigned_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Signed_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSigned_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Signed_directiveContext* SV3_1aPpParser::signed_directive() {
   Signed_directiveContext *_localctx = _tracker.createInstance<Signed_directiveContext>(_ctx, getState());
   enterRule(_localctx, 146, SV3_1aPpParser::RuleSigned_directive);
@@ -7160,14 +6561,6 @@
     parserListener->exitUnsigned_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Unsigned_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUnsigned_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Unsigned_directive_one_lineContext* SV3_1aPpParser::unsigned_directive_one_line() {
   Unsigned_directive_one_lineContext *_localctx = _tracker.createInstance<Unsigned_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 148, SV3_1aPpParser::RuleUnsigned_directive_one_line);
@@ -7230,14 +6623,6 @@
     parserListener->exitUnsigned_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Unsigned_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUnsigned_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Unsigned_directiveContext* SV3_1aPpParser::unsigned_directive() {
   Unsigned_directiveContext *_localctx = _tracker.createInstance<Unsigned_directiveContext>(_ctx, getState());
   enterRule(_localctx, 150, SV3_1aPpParser::RuleUnsigned_directive);
@@ -7299,14 +6684,6 @@
     parserListener->exitRemove_gatename_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Remove_gatename_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitRemove_gatename_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Remove_gatename_directive_one_lineContext* SV3_1aPpParser::remove_gatename_directive_one_line() {
   Remove_gatename_directive_one_lineContext *_localctx = _tracker.createInstance<Remove_gatename_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 152, SV3_1aPpParser::RuleRemove_gatename_directive_one_line);
@@ -7369,14 +6746,6 @@
     parserListener->exitRemove_gatename_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Remove_gatename_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitRemove_gatename_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Remove_gatename_directiveContext* SV3_1aPpParser::remove_gatename_directive() {
   Remove_gatename_directiveContext *_localctx = _tracker.createInstance<Remove_gatename_directiveContext>(_ctx, getState());
   enterRule(_localctx, 154, SV3_1aPpParser::RuleRemove_gatename_directive);
@@ -7438,14 +6807,6 @@
     parserListener->exitNoremove_gatenames_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noremove_gatenames_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoremove_gatenames_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noremove_gatenames_directive_one_lineContext* SV3_1aPpParser::noremove_gatenames_directive_one_line() {
   Noremove_gatenames_directive_one_lineContext *_localctx = _tracker.createInstance<Noremove_gatenames_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 156, SV3_1aPpParser::RuleNoremove_gatenames_directive_one_line);
@@ -7508,14 +6869,6 @@
     parserListener->exitNoremove_gatenames_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noremove_gatenames_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoremove_gatenames_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noremove_gatenames_directiveContext* SV3_1aPpParser::noremove_gatenames_directive() {
   Noremove_gatenames_directiveContext *_localctx = _tracker.createInstance<Noremove_gatenames_directiveContext>(_ctx, getState());
   enterRule(_localctx, 158, SV3_1aPpParser::RuleNoremove_gatenames_directive);
@@ -7577,14 +6930,6 @@
     parserListener->exitRemove_netname_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Remove_netname_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitRemove_netname_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Remove_netname_directive_one_lineContext* SV3_1aPpParser::remove_netname_directive_one_line() {
   Remove_netname_directive_one_lineContext *_localctx = _tracker.createInstance<Remove_netname_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 160, SV3_1aPpParser::RuleRemove_netname_directive_one_line);
@@ -7647,14 +6992,6 @@
     parserListener->exitRemove_netname_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Remove_netname_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitRemove_netname_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Remove_netname_directiveContext* SV3_1aPpParser::remove_netname_directive() {
   Remove_netname_directiveContext *_localctx = _tracker.createInstance<Remove_netname_directiveContext>(_ctx, getState());
   enterRule(_localctx, 162, SV3_1aPpParser::RuleRemove_netname_directive);
@@ -7716,14 +7053,6 @@
     parserListener->exitNoremove_netnames_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noremove_netnames_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoremove_netnames_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noremove_netnames_directive_one_lineContext* SV3_1aPpParser::noremove_netnames_directive_one_line() {
   Noremove_netnames_directive_one_lineContext *_localctx = _tracker.createInstance<Noremove_netnames_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 164, SV3_1aPpParser::RuleNoremove_netnames_directive_one_line);
@@ -7786,14 +7115,6 @@
     parserListener->exitNoremove_netnames_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noremove_netnames_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoremove_netnames_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noremove_netnames_directiveContext* SV3_1aPpParser::noremove_netnames_directive() {
   Noremove_netnames_directiveContext *_localctx = _tracker.createInstance<Noremove_netnames_directiveContext>(_ctx, getState());
   enterRule(_localctx, 166, SV3_1aPpParser::RuleNoremove_netnames_directive);
@@ -7855,14 +7176,6 @@
     parserListener->exitAccelerate_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Accelerate_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitAccelerate_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Accelerate_directive_one_lineContext* SV3_1aPpParser::accelerate_directive_one_line() {
   Accelerate_directive_one_lineContext *_localctx = _tracker.createInstance<Accelerate_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 168, SV3_1aPpParser::RuleAccelerate_directive_one_line);
@@ -7925,14 +7238,6 @@
     parserListener->exitAccelerate_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Accelerate_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitAccelerate_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Accelerate_directiveContext* SV3_1aPpParser::accelerate_directive() {
   Accelerate_directiveContext *_localctx = _tracker.createInstance<Accelerate_directiveContext>(_ctx, getState());
   enterRule(_localctx, 170, SV3_1aPpParser::RuleAccelerate_directive);
@@ -7994,14 +7299,6 @@
     parserListener->exitNoaccelerate_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noaccelerate_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoaccelerate_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noaccelerate_directive_one_lineContext* SV3_1aPpParser::noaccelerate_directive_one_line() {
   Noaccelerate_directive_one_lineContext *_localctx = _tracker.createInstance<Noaccelerate_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 172, SV3_1aPpParser::RuleNoaccelerate_directive_one_line);
@@ -8064,14 +7361,6 @@
     parserListener->exitNoaccelerate_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Noaccelerate_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNoaccelerate_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Noaccelerate_directiveContext* SV3_1aPpParser::noaccelerate_directive() {
   Noaccelerate_directiveContext *_localctx = _tracker.createInstance<Noaccelerate_directiveContext>(_ctx, getState());
   enterRule(_localctx, 174, SV3_1aPpParser::RuleNoaccelerate_directive);
@@ -8133,14 +7422,6 @@
     parserListener->exitDefault_trireg_strenght_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_trireg_strenght_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_trireg_strenght_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_trireg_strenght_directive_one_lineContext* SV3_1aPpParser::default_trireg_strenght_directive_one_line() {
   Default_trireg_strenght_directive_one_lineContext *_localctx = _tracker.createInstance<Default_trireg_strenght_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 176, SV3_1aPpParser::RuleDefault_trireg_strenght_directive_one_line);
@@ -8211,14 +7492,6 @@
     parserListener->exitDefault_trireg_strenght_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_trireg_strenght_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_trireg_strenght_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_trireg_strenght_directiveContext* SV3_1aPpParser::default_trireg_strenght_directive() {
   Default_trireg_strenght_directiveContext *_localctx = _tracker.createInstance<Default_trireg_strenght_directiveContext>(_ctx, getState());
   enterRule(_localctx, 178, SV3_1aPpParser::RuleDefault_trireg_strenght_directive);
@@ -8284,14 +7557,6 @@
     parserListener->exitDefault_decay_time_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_decay_time_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_decay_time_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_decay_time_directive_one_lineContext* SV3_1aPpParser::default_decay_time_directive_one_line() {
   Default_decay_time_directive_one_lineContext *_localctx = _tracker.createInstance<Default_decay_time_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 180, SV3_1aPpParser::RuleDefault_decay_time_directive_one_line);
@@ -8370,14 +7635,6 @@
     parserListener->exitDefault_decay_time_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_decay_time_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_decay_time_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_decay_time_directiveContext* SV3_1aPpParser::default_decay_time_directive() {
   Default_decay_time_directiveContext *_localctx = _tracker.createInstance<Default_decay_time_directiveContext>(_ctx, getState());
   enterRule(_localctx, 182, SV3_1aPpParser::RuleDefault_decay_time_directive);
@@ -8465,14 +7722,6 @@
     parserListener->exitUnconnected_drive_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Unconnected_drive_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUnconnected_drive_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Unconnected_drive_directive_one_lineContext* SV3_1aPpParser::unconnected_drive_directive_one_line() {
   Unconnected_drive_directive_one_lineContext *_localctx = _tracker.createInstance<Unconnected_drive_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 184, SV3_1aPpParser::RuleUnconnected_drive_directive_one_line);
@@ -8543,14 +7792,6 @@
     parserListener->exitUnconnected_drive_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Unconnected_drive_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUnconnected_drive_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Unconnected_drive_directiveContext* SV3_1aPpParser::unconnected_drive_directive() {
   Unconnected_drive_directiveContext *_localctx = _tracker.createInstance<Unconnected_drive_directiveContext>(_ctx, getState());
   enterRule(_localctx, 186, SV3_1aPpParser::RuleUnconnected_drive_directive);
@@ -8616,14 +7857,6 @@
     parserListener->exitNounconnected_drive_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Nounconnected_drive_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNounconnected_drive_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Nounconnected_drive_directive_one_lineContext* SV3_1aPpParser::nounconnected_drive_directive_one_line() {
   Nounconnected_drive_directive_one_lineContext *_localctx = _tracker.createInstance<Nounconnected_drive_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 188, SV3_1aPpParser::RuleNounconnected_drive_directive_one_line);
@@ -8686,14 +7919,6 @@
     parserListener->exitNounconnected_drive_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Nounconnected_drive_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitNounconnected_drive_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Nounconnected_drive_directiveContext* SV3_1aPpParser::nounconnected_drive_directive() {
   Nounconnected_drive_directiveContext *_localctx = _tracker.createInstance<Nounconnected_drive_directiveContext>(_ctx, getState());
   enterRule(_localctx, 190, SV3_1aPpParser::RuleNounconnected_drive_directive);
@@ -8755,14 +7980,6 @@
     parserListener->exitDelay_mode_distributed_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_distributed_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_distributed_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_distributed_directive_one_lineContext* SV3_1aPpParser::delay_mode_distributed_directive_one_line() {
   Delay_mode_distributed_directive_one_lineContext *_localctx = _tracker.createInstance<Delay_mode_distributed_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 192, SV3_1aPpParser::RuleDelay_mode_distributed_directive_one_line);
@@ -8825,14 +8042,6 @@
     parserListener->exitDelay_mode_distributed_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_distributed_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_distributed_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_distributed_directiveContext* SV3_1aPpParser::delay_mode_distributed_directive() {
   Delay_mode_distributed_directiveContext *_localctx = _tracker.createInstance<Delay_mode_distributed_directiveContext>(_ctx, getState());
   enterRule(_localctx, 194, SV3_1aPpParser::RuleDelay_mode_distributed_directive);
@@ -8894,14 +8103,6 @@
     parserListener->exitDelay_mode_path_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_path_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_path_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_path_directive_one_lineContext* SV3_1aPpParser::delay_mode_path_directive_one_line() {
   Delay_mode_path_directive_one_lineContext *_localctx = _tracker.createInstance<Delay_mode_path_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 196, SV3_1aPpParser::RuleDelay_mode_path_directive_one_line);
@@ -8964,14 +8165,6 @@
     parserListener->exitDelay_mode_path_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_path_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_path_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_path_directiveContext* SV3_1aPpParser::delay_mode_path_directive() {
   Delay_mode_path_directiveContext *_localctx = _tracker.createInstance<Delay_mode_path_directiveContext>(_ctx, getState());
   enterRule(_localctx, 198, SV3_1aPpParser::RuleDelay_mode_path_directive);
@@ -9033,14 +8226,6 @@
     parserListener->exitDelay_mode_unit_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_unit_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_unit_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_unit_directive_one_lineContext* SV3_1aPpParser::delay_mode_unit_directive_one_line() {
   Delay_mode_unit_directive_one_lineContext *_localctx = _tracker.createInstance<Delay_mode_unit_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 200, SV3_1aPpParser::RuleDelay_mode_unit_directive_one_line);
@@ -9103,14 +8288,6 @@
     parserListener->exitDelay_mode_unit_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_unit_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_unit_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_unit_directiveContext* SV3_1aPpParser::delay_mode_unit_directive() {
   Delay_mode_unit_directiveContext *_localctx = _tracker.createInstance<Delay_mode_unit_directiveContext>(_ctx, getState());
   enterRule(_localctx, 202, SV3_1aPpParser::RuleDelay_mode_unit_directive);
@@ -9172,14 +8349,6 @@
     parserListener->exitDelay_mode_zero_directive_one_line(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_zero_directive_one_lineContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_zero_directive_one_line(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_zero_directive_one_lineContext* SV3_1aPpParser::delay_mode_zero_directive_one_line() {
   Delay_mode_zero_directive_one_lineContext *_localctx = _tracker.createInstance<Delay_mode_zero_directive_one_lineContext>(_ctx, getState());
   enterRule(_localctx, 204, SV3_1aPpParser::RuleDelay_mode_zero_directive_one_line);
@@ -9242,14 +8411,6 @@
     parserListener->exitDelay_mode_zero_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Delay_mode_zero_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDelay_mode_zero_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Delay_mode_zero_directiveContext* SV3_1aPpParser::delay_mode_zero_directive() {
   Delay_mode_zero_directiveContext *_localctx = _tracker.createInstance<Delay_mode_zero_directiveContext>(_ctx, getState());
   enterRule(_localctx, 206, SV3_1aPpParser::RuleDelay_mode_zero_directive);
@@ -9299,14 +8460,6 @@
     parserListener->exitUndefineall_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Undefineall_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitUndefineall_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Undefineall_directiveContext* SV3_1aPpParser::undefineall_directive() {
   Undefineall_directiveContext *_localctx = _tracker.createInstance<Undefineall_directiveContext>(_ctx, getState());
   enterRule(_localctx, 208, SV3_1aPpParser::RuleUndefineall_directive);
@@ -9356,14 +8509,6 @@
     parserListener->exitModule(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::ModuleContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitModule(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::ModuleContext* SV3_1aPpParser::module() {
   ModuleContext *_localctx = _tracker.createInstance<ModuleContext>(_ctx, getState());
   enterRule(_localctx, 210, SV3_1aPpParser::RuleModule);
@@ -9413,14 +8558,6 @@
     parserListener->exitEndmodule(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndmoduleContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndmodule(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndmoduleContext* SV3_1aPpParser::endmodule() {
   EndmoduleContext *_localctx = _tracker.createInstance<EndmoduleContext>(_ctx, getState());
   enterRule(_localctx, 212, SV3_1aPpParser::RuleEndmodule);
@@ -9470,14 +8607,6 @@
     parserListener->exitSv_interface(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Sv_interfaceContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSv_interface(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Sv_interfaceContext* SV3_1aPpParser::sv_interface() {
   Sv_interfaceContext *_localctx = _tracker.createInstance<Sv_interfaceContext>(_ctx, getState());
   enterRule(_localctx, 214, SV3_1aPpParser::RuleSv_interface);
@@ -9527,14 +8656,6 @@
     parserListener->exitEndinterface(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndinterfaceContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndinterface(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndinterfaceContext* SV3_1aPpParser::endinterface() {
   EndinterfaceContext *_localctx = _tracker.createInstance<EndinterfaceContext>(_ctx, getState());
   enterRule(_localctx, 216, SV3_1aPpParser::RuleEndinterface);
@@ -9584,14 +8705,6 @@
     parserListener->exitProgram(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::ProgramContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitProgram(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::ProgramContext* SV3_1aPpParser::program() {
   ProgramContext *_localctx = _tracker.createInstance<ProgramContext>(_ctx, getState());
   enterRule(_localctx, 218, SV3_1aPpParser::RuleProgram);
@@ -9641,14 +8754,6 @@
     parserListener->exitEndprogram(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndprogramContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndprogram(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndprogramContext* SV3_1aPpParser::endprogram() {
   EndprogramContext *_localctx = _tracker.createInstance<EndprogramContext>(_ctx, getState());
   enterRule(_localctx, 220, SV3_1aPpParser::RuleEndprogram);
@@ -9698,14 +8803,6 @@
     parserListener->exitPrimitive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::PrimitiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitPrimitive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::PrimitiveContext* SV3_1aPpParser::primitive() {
   PrimitiveContext *_localctx = _tracker.createInstance<PrimitiveContext>(_ctx, getState());
   enterRule(_localctx, 222, SV3_1aPpParser::RulePrimitive);
@@ -9755,14 +8852,6 @@
     parserListener->exitEndprimitive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndprimitiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndprimitive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndprimitiveContext* SV3_1aPpParser::endprimitive() {
   EndprimitiveContext *_localctx = _tracker.createInstance<EndprimitiveContext>(_ctx, getState());
   enterRule(_localctx, 224, SV3_1aPpParser::RuleEndprimitive);
@@ -9812,14 +8901,6 @@
     parserListener->exitSv_package(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Sv_packageContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSv_package(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Sv_packageContext* SV3_1aPpParser::sv_package() {
   Sv_packageContext *_localctx = _tracker.createInstance<Sv_packageContext>(_ctx, getState());
   enterRule(_localctx, 226, SV3_1aPpParser::RuleSv_package);
@@ -9869,14 +8950,6 @@
     parserListener->exitEndpackage(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndpackageContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndpackage(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndpackageContext* SV3_1aPpParser::endpackage() {
   EndpackageContext *_localctx = _tracker.createInstance<EndpackageContext>(_ctx, getState());
   enterRule(_localctx, 228, SV3_1aPpParser::RuleEndpackage);
@@ -9926,14 +8999,6 @@
     parserListener->exitChecker(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::CheckerContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitChecker(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::CheckerContext* SV3_1aPpParser::checker() {
   CheckerContext *_localctx = _tracker.createInstance<CheckerContext>(_ctx, getState());
   enterRule(_localctx, 230, SV3_1aPpParser::RuleChecker);
@@ -9983,14 +9048,6 @@
     parserListener->exitEndchecker(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndcheckerContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndchecker(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndcheckerContext* SV3_1aPpParser::endchecker() {
   EndcheckerContext *_localctx = _tracker.createInstance<EndcheckerContext>(_ctx, getState());
   enterRule(_localctx, 232, SV3_1aPpParser::RuleEndchecker);
@@ -10040,14 +9097,6 @@
     parserListener->exitConfig(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::ConfigContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitConfig(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::ConfigContext* SV3_1aPpParser::config() {
   ConfigContext *_localctx = _tracker.createInstance<ConfigContext>(_ctx, getState());
   enterRule(_localctx, 234, SV3_1aPpParser::RuleConfig);
@@ -10097,14 +9146,6 @@
     parserListener->exitEndconfig(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::EndconfigContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEndconfig(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::EndconfigContext* SV3_1aPpParser::endconfig() {
   EndconfigContext *_localctx = _tracker.createInstance<EndconfigContext>(_ctx, getState());
   enterRule(_localctx, 236, SV3_1aPpParser::RuleEndconfig);
@@ -10174,14 +9215,6 @@
     parserListener->exitDefine_directive(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Define_directiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefine_directive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Define_directiveContext* SV3_1aPpParser::define_directive() {
   Define_directiveContext *_localctx = _tracker.createInstance<Define_directiveContext>(_ctx, getState());
   enterRule(_localctx, 238, SV3_1aPpParser::RuleDefine_directive);
@@ -10277,14 +9310,6 @@
     parserListener->exitMultiline_no_args_macro_definition(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Multiline_no_args_macro_definitionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMultiline_no_args_macro_definition(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Multiline_no_args_macro_definitionContext* SV3_1aPpParser::multiline_no_args_macro_definition() {
   Multiline_no_args_macro_definitionContext *_localctx = _tracker.createInstance<Multiline_no_args_macro_definitionContext>(_ctx, getState());
   enterRule(_localctx, 240, SV3_1aPpParser::RuleMultiline_no_args_macro_definition);
@@ -10387,14 +9412,6 @@
     parserListener->exitMultiline_args_macro_definition(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Multiline_args_macro_definitionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMultiline_args_macro_definition(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Multiline_args_macro_definitionContext* SV3_1aPpParser::multiline_args_macro_definition() {
   Multiline_args_macro_definitionContext *_localctx = _tracker.createInstance<Multiline_args_macro_definitionContext>(_ctx, getState());
   enterRule(_localctx, 242, SV3_1aPpParser::RuleMultiline_args_macro_definition);
@@ -10503,14 +9520,6 @@
     parserListener->exitSimple_no_args_macro_definition(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Simple_no_args_macro_definitionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSimple_no_args_macro_definition(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Simple_no_args_macro_definitionContext* SV3_1aPpParser::simple_no_args_macro_definition() {
   Simple_no_args_macro_definitionContext *_localctx = _tracker.createInstance<Simple_no_args_macro_definitionContext>(_ctx, getState());
   enterRule(_localctx, 244, SV3_1aPpParser::RuleSimple_no_args_macro_definition);
@@ -10659,14 +9668,6 @@
     parserListener->exitSimple_args_macro_definition(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Simple_args_macro_definitionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSimple_args_macro_definition(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Simple_args_macro_definitionContext* SV3_1aPpParser::simple_args_macro_definition() {
   Simple_args_macro_definitionContext *_localctx = _tracker.createInstance<Simple_args_macro_definitionContext>(_ctx, getState());
   enterRule(_localctx, 246, SV3_1aPpParser::RuleSimple_args_macro_definition);
@@ -10799,14 +9800,6 @@
     parserListener->exitIdentifier_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Identifier_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitIdentifier_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Identifier_in_macro_bodyContext* SV3_1aPpParser::identifier_in_macro_body() {
   Identifier_in_macro_bodyContext *_localctx = _tracker.createInstance<Identifier_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 248, SV3_1aPpParser::RuleIdentifier_in_macro_body);
@@ -10902,14 +9895,6 @@
     parserListener->exitSimple_no_args_macro_definition_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Simple_no_args_macro_definition_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSimple_no_args_macro_definition_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Simple_no_args_macro_definition_in_macro_bodyContext* SV3_1aPpParser::simple_no_args_macro_definition_in_macro_body() {
   Simple_no_args_macro_definition_in_macro_bodyContext *_localctx = _tracker.createInstance<Simple_no_args_macro_definition_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 250, SV3_1aPpParser::RuleSimple_no_args_macro_definition_in_macro_body);
@@ -11086,14 +10071,6 @@
     parserListener->exitSimple_args_macro_definition_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Simple_args_macro_definition_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSimple_args_macro_definition_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Simple_args_macro_definition_in_macro_bodyContext* SV3_1aPpParser::simple_args_macro_definition_in_macro_body() {
   Simple_args_macro_definition_in_macro_bodyContext *_localctx = _tracker.createInstance<Simple_args_macro_definition_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 252, SV3_1aPpParser::RuleSimple_args_macro_definition_in_macro_body);
@@ -11452,14 +10429,6 @@
     parserListener->exitDirective_in_macro(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Directive_in_macroContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDirective_in_macro(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Directive_in_macroContext* SV3_1aPpParser::directive_in_macro() {
   Directive_in_macroContext *_localctx = _tracker.createInstance<Directive_in_macroContext>(_ctx, getState());
   enterRule(_localctx, 254, SV3_1aPpParser::RuleDirective_in_macro);
@@ -11988,14 +10957,6 @@
     parserListener->exitMacro_arguments(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Macro_argumentsContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMacro_arguments(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Macro_argumentsContext* SV3_1aPpParser::macro_arguments() {
   Macro_argumentsContext *_localctx = _tracker.createInstance<Macro_argumentsContext>(_ctx, getState());
   enterRule(_localctx, 256, SV3_1aPpParser::RuleMacro_arguments);
@@ -12150,14 +11111,6 @@
     parserListener->exitEscaped_macro_definition_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Escaped_macro_definition_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEscaped_macro_definition_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Escaped_macro_definition_bodyContext* SV3_1aPpParser::escaped_macro_definition_body() {
   Escaped_macro_definition_bodyContext *_localctx = _tracker.createInstance<Escaped_macro_definition_bodyContext>(_ctx, getState());
   enterRule(_localctx, 258, SV3_1aPpParser::RuleEscaped_macro_definition_body);
@@ -12450,14 +11403,6 @@
     parserListener->exitEscaped_macro_definition_body_alt1(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Escaped_macro_definition_body_alt1Context::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEscaped_macro_definition_body_alt1(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Escaped_macro_definition_body_alt1Context* SV3_1aPpParser::escaped_macro_definition_body_alt1() {
   Escaped_macro_definition_body_alt1Context *_localctx = _tracker.createInstance<Escaped_macro_definition_body_alt1Context>(_ctx, getState());
   enterRule(_localctx, 260, SV3_1aPpParser::RuleEscaped_macro_definition_body_alt1);
@@ -12938,14 +11883,6 @@
     parserListener->exitEscaped_macro_definition_body_alt2(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Escaped_macro_definition_body_alt2Context::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEscaped_macro_definition_body_alt2(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Escaped_macro_definition_body_alt2Context* SV3_1aPpParser::escaped_macro_definition_body_alt2() {
   Escaped_macro_definition_body_alt2Context *_localctx = _tracker.createInstance<Escaped_macro_definition_body_alt2Context>(_ctx, getState());
   enterRule(_localctx, 262, SV3_1aPpParser::RuleEscaped_macro_definition_body_alt2);
@@ -13426,14 +12363,6 @@
     parserListener->exitSimple_macro_definition_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Simple_macro_definition_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSimple_macro_definition_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Simple_macro_definition_bodyContext* SV3_1aPpParser::simple_macro_definition_body() {
   Simple_macro_definition_bodyContext *_localctx = _tracker.createInstance<Simple_macro_definition_bodyContext>(_ctx, getState());
   enterRule(_localctx, 264, SV3_1aPpParser::RuleSimple_macro_definition_body);
@@ -13868,14 +12797,6 @@
     parserListener->exitSimple_macro_definition_body_in_macro_body(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Simple_macro_definition_body_in_macro_bodyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitSimple_macro_definition_body_in_macro_body(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Simple_macro_definition_body_in_macro_bodyContext* SV3_1aPpParser::simple_macro_definition_body_in_macro_body() {
   Simple_macro_definition_body_in_macro_bodyContext *_localctx = _tracker.createInstance<Simple_macro_definition_body_in_macro_bodyContext>(_ctx, getState());
   enterRule(_localctx, 266, SV3_1aPpParser::RuleSimple_macro_definition_body_in_macro_body);
@@ -14162,14 +13083,6 @@
     parserListener->exitPragma_expression(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Pragma_expressionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitPragma_expression(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Pragma_expressionContext* SV3_1aPpParser::pragma_expression() {
   Pragma_expressionContext *_localctx = _tracker.createInstance<Pragma_expressionContext>(_ctx, getState());
   enterRule(_localctx, 268, SV3_1aPpParser::RulePragma_expression);
@@ -14412,14 +13325,6 @@
     parserListener->exitMacro_arg(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Macro_argContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitMacro_arg(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Macro_argContext* SV3_1aPpParser::macro_arg() {
   Macro_argContext *_localctx = _tracker.createInstance<Macro_argContext>(_ctx, getState());
   enterRule(_localctx, 270, SV3_1aPpParser::RuleMacro_arg);
@@ -14737,14 +13642,6 @@
     parserListener->exitPaired_parens(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Paired_parensContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitPaired_parens(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Paired_parensContext* SV3_1aPpParser::paired_parens() {
   Paired_parensContext *_localctx = _tracker.createInstance<Paired_parensContext>(_ctx, getState());
   enterRule(_localctx, 272, SV3_1aPpParser::RulePaired_parens);
@@ -15309,14 +14206,6 @@
     parserListener->exitText_blob(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Text_blobContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitText_blob(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Text_blobContext* SV3_1aPpParser::text_blob() {
   Text_blobContext *_localctx = _tracker.createInstance<Text_blobContext>(_ctx, getState());
   enterRule(_localctx, 274, SV3_1aPpParser::RuleText_blob);
@@ -15544,14 +14433,6 @@
     parserListener->exitString(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::StringContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitString(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::StringContext* SV3_1aPpParser::string() {
   StringContext *_localctx = _tracker.createInstance<StringContext>(_ctx, getState());
   enterRule(_localctx, 276, SV3_1aPpParser::RuleString);
@@ -15601,14 +14482,6 @@
     parserListener->exitEscaped_identifier(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Escaped_identifierContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitEscaped_identifier(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Escaped_identifierContext* SV3_1aPpParser::escaped_identifier() {
   Escaped_identifierContext *_localctx = _tracker.createInstance<Escaped_identifierContext>(_ctx, getState());
   enterRule(_localctx, 278, SV3_1aPpParser::RuleEscaped_identifier);
@@ -15706,14 +14579,6 @@
     parserListener->exitDefault_value(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::Default_valueContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitDefault_value(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::Default_valueContext* SV3_1aPpParser::default_value() {
   Default_valueContext *_localctx = _tracker.createInstance<Default_valueContext>(_ctx, getState());
   enterRule(_localctx, 280, SV3_1aPpParser::RuleDefault_value);
@@ -15934,14 +14799,6 @@
     parserListener->exitString_blob(this);
 }
 
-
-antlrcpp::Any SV3_1aPpParser::String_blobContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aPpParserVisitor*>(visitor))
-    return parserVisitor->visitString_blob(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aPpParser::String_blobContext* SV3_1aPpParser::string_blob() {
   String_blobContext *_localctx = _tracker.createInstance<String_blobContext>(_ctx, getState());
   enterRule(_localctx, 282, SV3_1aPpParser::RuleString_blob);
diff --git a/src/parser/SV3_1aPpParser.h b/src/parser/SV3_1aPpParser.h
index 0547e44..4e7fd4d 100644
--- a/src/parser/SV3_1aPpParser.h
+++ b/src/parser/SV3_1aPpParser.h
@@ -262,8 +262,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -349,8 +347,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -382,8 +378,6 @@
     antlr4::tree::TerminalNode* Spaces(size_t i);
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
   };
 
   class  MacroInstanceNoArgsContext : public Macro_instanceContext {
@@ -394,8 +388,6 @@
     antlr4::tree::TerminalNode *Macro_Escaped_identifier();
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
   };
 
   Macro_instanceContext* macro_instance();
@@ -411,8 +403,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -429,8 +419,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -445,8 +433,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -460,8 +446,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -475,8 +459,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -494,8 +476,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -512,8 +492,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -532,8 +510,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -550,8 +526,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -570,8 +544,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -588,8 +560,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -605,8 +575,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -620,8 +588,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -635,8 +601,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -653,8 +617,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -669,8 +631,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -688,8 +648,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -716,8 +674,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -735,8 +691,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -754,8 +708,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -782,8 +734,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -801,8 +751,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -820,8 +768,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -839,8 +785,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -858,8 +802,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -877,8 +819,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -896,8 +836,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -915,8 +853,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -934,8 +870,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -953,8 +887,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -968,8 +900,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -988,8 +918,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1006,8 +934,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1024,8 +950,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1039,8 +963,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1057,8 +979,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1074,8 +994,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1092,8 +1010,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1107,8 +1023,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1125,8 +1039,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1146,8 +1058,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1164,8 +1074,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1179,8 +1087,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1197,8 +1103,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1212,8 +1116,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1230,8 +1132,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1245,8 +1145,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1263,8 +1161,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1278,8 +1174,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1296,8 +1190,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1311,8 +1203,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1329,8 +1219,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1344,8 +1232,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1362,8 +1248,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1377,8 +1261,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1395,8 +1277,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1410,8 +1290,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1428,8 +1306,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1443,8 +1319,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1459,8 +1333,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1476,8 +1348,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1494,8 +1364,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1509,8 +1377,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1527,8 +1393,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1542,8 +1406,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1560,8 +1422,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1575,8 +1435,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1593,8 +1451,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1608,8 +1464,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1626,8 +1480,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1641,8 +1493,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1659,8 +1509,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1674,8 +1522,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1692,8 +1538,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1707,8 +1551,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1725,8 +1567,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1740,8 +1580,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1758,8 +1596,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1773,8 +1609,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1791,8 +1625,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1806,8 +1638,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1824,8 +1654,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1839,8 +1667,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1857,8 +1683,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1872,8 +1696,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1890,8 +1712,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1907,8 +1727,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1925,8 +1743,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1944,8 +1760,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1962,8 +1776,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1979,8 +1791,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -1997,8 +1807,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2012,8 +1820,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2030,8 +1836,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2045,8 +1849,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2063,8 +1865,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2078,8 +1878,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2096,8 +1894,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2111,8 +1907,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2129,8 +1923,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2144,8 +1936,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2159,8 +1949,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2174,8 +1962,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2189,8 +1975,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2204,8 +1988,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2219,8 +2001,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2234,8 +2014,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2249,8 +2027,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2264,8 +2040,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2279,8 +2053,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2294,8 +2066,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2309,8 +2079,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2324,8 +2092,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2339,8 +2105,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2354,8 +2118,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2369,8 +2131,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2389,8 +2149,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2409,8 +2167,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2430,8 +2186,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2452,8 +2206,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2475,8 +2227,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2493,8 +2243,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2514,8 +2262,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2535,8 +2281,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2611,8 +2355,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2637,8 +2379,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2653,8 +2393,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2725,8 +2463,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2797,8 +2533,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2867,8 +2601,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2933,8 +2665,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2965,8 +2695,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -2996,8 +2724,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -3048,8 +2774,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -3087,8 +2811,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -3102,8 +2824,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -3117,8 +2837,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -3144,8 +2862,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -3178,8 +2894,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
diff --git a/src/parser/SV3_1aPpParserBaseVisitor.cpp b/src/parser/SV3_1aPpParserBaseVisitor.cpp
deleted file mode 100644
index 945f779..0000000
--- a/src/parser/SV3_1aPpParserBaseVisitor.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aPpParser.g4 by ANTLR 4.7.2
-
-
-#include "SV3_1aPpParserBaseVisitor.h"
-
-
diff --git a/src/parser/SV3_1aPpParserBaseVisitor.h b/src/parser/SV3_1aPpParserBaseVisitor.h
deleted file mode 100644
index 690777d..0000000
--- a/src/parser/SV3_1aPpParserBaseVisitor.h
+++ /dev/null
@@ -1,592 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aPpParser.g4 by ANTLR 4.7.2
-
-#pragma once
-
-
-#include "antlr4-runtime.h"
-#include "SV3_1aPpParserVisitor.h"
-
-
-/**
- * This class provides an empty implementation of SV3_1aPpParserVisitor, which can be
- * extended to create a visitor which only needs to handle a subset of the available methods.
- */
-class  SV3_1aPpParserBaseVisitor : public SV3_1aPpParserVisitor {
-public:
-
-  virtual antlrcpp::Any visitSource_text(SV3_1aPpParser::Source_textContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDescription(SV3_1aPpParser::DescriptionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMacroInstanceWithArgs(SV3_1aPpParser::MacroInstanceWithArgsContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMacroInstanceNoArgs(SV3_1aPpParser::MacroInstanceNoArgsContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUnterminated_string(SV3_1aPpParser::Unterminated_stringContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMacro_actual_args(SV3_1aPpParser::Macro_actual_argsContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitComments(SV3_1aPpParser::CommentsContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNumber(SV3_1aPpParser::NumberContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPound_delay(SV3_1aPpParser::Pound_delayContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMacro_definition(SV3_1aPpParser::Macro_definitionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitInclude_directive_one_line(SV3_1aPpParser::Include_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitInclude_directive(SV3_1aPpParser::Include_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitLine_directive_one_line(SV3_1aPpParser::Line_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitLine_directive(SV3_1aPpParser::Line_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_nettype_directive_one_line(SV3_1aPpParser::Default_nettype_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_nettype_directive(SV3_1aPpParser::Default_nettype_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSv_file_directive(SV3_1aPpParser::Sv_file_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSv_line_directive(SV3_1aPpParser::Sv_line_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitTimescale_directive_one_line(SV3_1aPpParser::Timescale_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitTimescale_directive(SV3_1aPpParser::Timescale_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUndef_directive(SV3_1aPpParser::Undef_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIfdef_directive_one_line(SV3_1aPpParser::Ifdef_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIfdef_directive(SV3_1aPpParser::Ifdef_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIfdef_directive_in_macro_body(SV3_1aPpParser::Ifdef_directive_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIfndef_directive_one_line(SV3_1aPpParser::Ifndef_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIfndef_directive(SV3_1aPpParser::Ifndef_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIfndef_directive_in_macro_body(SV3_1aPpParser::Ifndef_directive_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElsif_directive_one_line(SV3_1aPpParser::Elsif_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElsif_directive(SV3_1aPpParser::Elsif_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElsif_directive_in_macro_body(SV3_1aPpParser::Elsif_directive_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElseif_directive_one_line(SV3_1aPpParser::Elseif_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElseif_directive(SV3_1aPpParser::Elseif_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElseif_directive_in_macro_body(SV3_1aPpParser::Elseif_directive_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElse_directive_one_line(SV3_1aPpParser::Else_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitElse_directive(SV3_1aPpParser::Else_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndif_directive_one_line(SV3_1aPpParser::Endif_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndif_directive(SV3_1aPpParser::Endif_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitResetall_directive_one_line(SV3_1aPpParser::Resetall_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitResetall_directive(SV3_1aPpParser::Resetall_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitBegin_keywords_directive_one_line(SV3_1aPpParser::Begin_keywords_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitBegin_keywords_directive(SV3_1aPpParser::Begin_keywords_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEnd_keywords_directive_one_line(SV3_1aPpParser::End_keywords_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEnd_keywords_directive(SV3_1aPpParser::End_keywords_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPragma_directive_one_line(SV3_1aPpParser::Pragma_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPragma_directive(SV3_1aPpParser::Pragma_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitCelldefine_directive_one_line(SV3_1aPpParser::Celldefine_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitCelldefine_directive(SV3_1aPpParser::Celldefine_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndcelldefine_directive_one_line(SV3_1aPpParser::Endcelldefine_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndcelldefine_directive(SV3_1aPpParser::Endcelldefine_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitProtect_directive_one_line(SV3_1aPpParser::Protect_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitProtect_directive(SV3_1aPpParser::Protect_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprotect_directive_one_line(SV3_1aPpParser::Endprotect_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprotect_directive(SV3_1aPpParser::Endprotect_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitProtected_directive_one_line(SV3_1aPpParser::Protected_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitProtected_directive(SV3_1aPpParser::Protected_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprotected_directive_one_line(SV3_1aPpParser::Endprotected_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprotected_directive(SV3_1aPpParser::Endprotected_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitExpand_vectornets_directive_one_line(SV3_1aPpParser::Expand_vectornets_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitExpand_vectornets_directive(SV3_1aPpParser::Expand_vectornets_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoexpand_vectornets_directive_one_line(SV3_1aPpParser::Noexpand_vectornets_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoexpand_vectornets_directive(SV3_1aPpParser::Noexpand_vectornets_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitAutoexpand_vectornets_directive_one_line(SV3_1aPpParser::Autoexpand_vectornets_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitAutoexpand_vectornets_directive(SV3_1aPpParser::Autoexpand_vectornets_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUselib_directive_one_line(SV3_1aPpParser::Uselib_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUselib_directive(SV3_1aPpParser::Uselib_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDisable_portfaults_directive_one_line(SV3_1aPpParser::Disable_portfaults_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDisable_portfaults_directive(SV3_1aPpParser::Disable_portfaults_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEnable_portfaults_directive_one_line(SV3_1aPpParser::Enable_portfaults_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEnable_portfaults_directive(SV3_1aPpParser::Enable_portfaults_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNosuppress_faults_directive_one_line(SV3_1aPpParser::Nosuppress_faults_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNosuppress_faults_directive(SV3_1aPpParser::Nosuppress_faults_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSuppress_faults_directive_one_line(SV3_1aPpParser::Suppress_faults_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSuppress_faults_directive(SV3_1aPpParser::Suppress_faults_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSigned_directive_one_line(SV3_1aPpParser::Signed_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSigned_directive(SV3_1aPpParser::Signed_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUnsigned_directive_one_line(SV3_1aPpParser::Unsigned_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUnsigned_directive(SV3_1aPpParser::Unsigned_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitRemove_gatename_directive_one_line(SV3_1aPpParser::Remove_gatename_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitRemove_gatename_directive(SV3_1aPpParser::Remove_gatename_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoremove_gatenames_directive_one_line(SV3_1aPpParser::Noremove_gatenames_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoremove_gatenames_directive(SV3_1aPpParser::Noremove_gatenames_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitRemove_netname_directive_one_line(SV3_1aPpParser::Remove_netname_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitRemove_netname_directive(SV3_1aPpParser::Remove_netname_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoremove_netnames_directive_one_line(SV3_1aPpParser::Noremove_netnames_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoremove_netnames_directive(SV3_1aPpParser::Noremove_netnames_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitAccelerate_directive_one_line(SV3_1aPpParser::Accelerate_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitAccelerate_directive(SV3_1aPpParser::Accelerate_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoaccelerate_directive_one_line(SV3_1aPpParser::Noaccelerate_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNoaccelerate_directive(SV3_1aPpParser::Noaccelerate_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_trireg_strenght_directive_one_line(SV3_1aPpParser::Default_trireg_strenght_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_trireg_strenght_directive(SV3_1aPpParser::Default_trireg_strenght_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_decay_time_directive_one_line(SV3_1aPpParser::Default_decay_time_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_decay_time_directive(SV3_1aPpParser::Default_decay_time_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUnconnected_drive_directive_one_line(SV3_1aPpParser::Unconnected_drive_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUnconnected_drive_directive(SV3_1aPpParser::Unconnected_drive_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNounconnected_drive_directive_one_line(SV3_1aPpParser::Nounconnected_drive_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitNounconnected_drive_directive(SV3_1aPpParser::Nounconnected_drive_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_distributed_directive_one_line(SV3_1aPpParser::Delay_mode_distributed_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_distributed_directive(SV3_1aPpParser::Delay_mode_distributed_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_path_directive_one_line(SV3_1aPpParser::Delay_mode_path_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_path_directive(SV3_1aPpParser::Delay_mode_path_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_unit_directive_one_line(SV3_1aPpParser::Delay_mode_unit_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_unit_directive(SV3_1aPpParser::Delay_mode_unit_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_zero_directive_one_line(SV3_1aPpParser::Delay_mode_zero_directive_one_lineContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDelay_mode_zero_directive(SV3_1aPpParser::Delay_mode_zero_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitUndefineall_directive(SV3_1aPpParser::Undefineall_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitModule(SV3_1aPpParser::ModuleContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndmodule(SV3_1aPpParser::EndmoduleContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSv_interface(SV3_1aPpParser::Sv_interfaceContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndinterface(SV3_1aPpParser::EndinterfaceContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitProgram(SV3_1aPpParser::ProgramContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprogram(SV3_1aPpParser::EndprogramContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPrimitive(SV3_1aPpParser::PrimitiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprimitive(SV3_1aPpParser::EndprimitiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSv_package(SV3_1aPpParser::Sv_packageContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndpackage(SV3_1aPpParser::EndpackageContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitChecker(SV3_1aPpParser::CheckerContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndchecker(SV3_1aPpParser::EndcheckerContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitConfig(SV3_1aPpParser::ConfigContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndconfig(SV3_1aPpParser::EndconfigContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefine_directive(SV3_1aPpParser::Define_directiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMultiline_no_args_macro_definition(SV3_1aPpParser::Multiline_no_args_macro_definitionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMultiline_args_macro_definition(SV3_1aPpParser::Multiline_args_macro_definitionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSimple_no_args_macro_definition(SV3_1aPpParser::Simple_no_args_macro_definitionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSimple_args_macro_definition(SV3_1aPpParser::Simple_args_macro_definitionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitIdentifier_in_macro_body(SV3_1aPpParser::Identifier_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSimple_no_args_macro_definition_in_macro_body(SV3_1aPpParser::Simple_no_args_macro_definition_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSimple_args_macro_definition_in_macro_body(SV3_1aPpParser::Simple_args_macro_definition_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDirective_in_macro(SV3_1aPpParser::Directive_in_macroContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMacro_arguments(SV3_1aPpParser::Macro_argumentsContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEscaped_macro_definition_body(SV3_1aPpParser::Escaped_macro_definition_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEscaped_macro_definition_body_alt1(SV3_1aPpParser::Escaped_macro_definition_body_alt1Context *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEscaped_macro_definition_body_alt2(SV3_1aPpParser::Escaped_macro_definition_body_alt2Context *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSimple_macro_definition_body(SV3_1aPpParser::Simple_macro_definition_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSimple_macro_definition_body_in_macro_body(SV3_1aPpParser::Simple_macro_definition_body_in_macro_bodyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPragma_expression(SV3_1aPpParser::Pragma_expressionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitMacro_arg(SV3_1aPpParser::Macro_argContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPaired_parens(SV3_1aPpParser::Paired_parensContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitText_blob(SV3_1aPpParser::Text_blobContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitString(SV3_1aPpParser::StringContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEscaped_identifier(SV3_1aPpParser::Escaped_identifierContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDefault_value(SV3_1aPpParser::Default_valueContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitString_blob(SV3_1aPpParser::String_blobContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-
-};
-
diff --git a/src/parser/SV3_1aPpParserVisitor.cpp b/src/parser/SV3_1aPpParserVisitor.cpp
deleted file mode 100644
index baf05df..0000000
--- a/src/parser/SV3_1aPpParserVisitor.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aPpParser.g4 by ANTLR 4.7.2
-
-
-#include "SV3_1aPpParserVisitor.h"
-
-
diff --git a/src/parser/SV3_1aPpParserVisitor.h b/src/parser/SV3_1aPpParserVisitor.h
deleted file mode 100644
index 6f39195..0000000
--- a/src/parser/SV3_1aPpParserVisitor.h
+++ /dev/null
@@ -1,310 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aPpParser.g4 by ANTLR 4.7.2
-
-#pragma once
-
-
-#include "antlr4-runtime.h"
-#include "SV3_1aPpParser.h"
-
-
-
-/**
- * This class defines an abstract visitor for a parse tree
- * produced by SV3_1aPpParser.
- */
-class  SV3_1aPpParserVisitor : public antlr4::tree::AbstractParseTreeVisitor {
-public:
-
-  /**
-   * Visit parse trees produced by SV3_1aPpParser.
-   */
-    virtual antlrcpp::Any visitSource_text(SV3_1aPpParser::Source_textContext *context) = 0;
-
-    virtual antlrcpp::Any visitDescription(SV3_1aPpParser::DescriptionContext *context) = 0;
-
-    virtual antlrcpp::Any visitMacroInstanceWithArgs(SV3_1aPpParser::MacroInstanceWithArgsContext *context) = 0;
-
-    virtual antlrcpp::Any visitMacroInstanceNoArgs(SV3_1aPpParser::MacroInstanceNoArgsContext *context) = 0;
-
-    virtual antlrcpp::Any visitUnterminated_string(SV3_1aPpParser::Unterminated_stringContext *context) = 0;
-
-    virtual antlrcpp::Any visitMacro_actual_args(SV3_1aPpParser::Macro_actual_argsContext *context) = 0;
-
-    virtual antlrcpp::Any visitComments(SV3_1aPpParser::CommentsContext *context) = 0;
-
-    virtual antlrcpp::Any visitNumber(SV3_1aPpParser::NumberContext *context) = 0;
-
-    virtual antlrcpp::Any visitPound_delay(SV3_1aPpParser::Pound_delayContext *context) = 0;
-
-    virtual antlrcpp::Any visitMacro_definition(SV3_1aPpParser::Macro_definitionContext *context) = 0;
-
-    virtual antlrcpp::Any visitInclude_directive_one_line(SV3_1aPpParser::Include_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitInclude_directive(SV3_1aPpParser::Include_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitLine_directive_one_line(SV3_1aPpParser::Line_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitLine_directive(SV3_1aPpParser::Line_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_nettype_directive_one_line(SV3_1aPpParser::Default_nettype_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_nettype_directive(SV3_1aPpParser::Default_nettype_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitSv_file_directive(SV3_1aPpParser::Sv_file_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitSv_line_directive(SV3_1aPpParser::Sv_line_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitTimescale_directive_one_line(SV3_1aPpParser::Timescale_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitTimescale_directive(SV3_1aPpParser::Timescale_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitUndef_directive(SV3_1aPpParser::Undef_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitIfdef_directive_one_line(SV3_1aPpParser::Ifdef_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitIfdef_directive(SV3_1aPpParser::Ifdef_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitIfdef_directive_in_macro_body(SV3_1aPpParser::Ifdef_directive_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitIfndef_directive_one_line(SV3_1aPpParser::Ifndef_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitIfndef_directive(SV3_1aPpParser::Ifndef_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitIfndef_directive_in_macro_body(SV3_1aPpParser::Ifndef_directive_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitElsif_directive_one_line(SV3_1aPpParser::Elsif_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitElsif_directive(SV3_1aPpParser::Elsif_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitElsif_directive_in_macro_body(SV3_1aPpParser::Elsif_directive_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitElseif_directive_one_line(SV3_1aPpParser::Elseif_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitElseif_directive(SV3_1aPpParser::Elseif_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitElseif_directive_in_macro_body(SV3_1aPpParser::Elseif_directive_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitElse_directive_one_line(SV3_1aPpParser::Else_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitElse_directive(SV3_1aPpParser::Else_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndif_directive_one_line(SV3_1aPpParser::Endif_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndif_directive(SV3_1aPpParser::Endif_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitResetall_directive_one_line(SV3_1aPpParser::Resetall_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitResetall_directive(SV3_1aPpParser::Resetall_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitBegin_keywords_directive_one_line(SV3_1aPpParser::Begin_keywords_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitBegin_keywords_directive(SV3_1aPpParser::Begin_keywords_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEnd_keywords_directive_one_line(SV3_1aPpParser::End_keywords_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitEnd_keywords_directive(SV3_1aPpParser::End_keywords_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitPragma_directive_one_line(SV3_1aPpParser::Pragma_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitPragma_directive(SV3_1aPpParser::Pragma_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitCelldefine_directive_one_line(SV3_1aPpParser::Celldefine_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitCelldefine_directive(SV3_1aPpParser::Celldefine_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndcelldefine_directive_one_line(SV3_1aPpParser::Endcelldefine_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndcelldefine_directive(SV3_1aPpParser::Endcelldefine_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitProtect_directive_one_line(SV3_1aPpParser::Protect_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitProtect_directive(SV3_1aPpParser::Protect_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprotect_directive_one_line(SV3_1aPpParser::Endprotect_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprotect_directive(SV3_1aPpParser::Endprotect_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitProtected_directive_one_line(SV3_1aPpParser::Protected_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitProtected_directive(SV3_1aPpParser::Protected_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprotected_directive_one_line(SV3_1aPpParser::Endprotected_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprotected_directive(SV3_1aPpParser::Endprotected_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitExpand_vectornets_directive_one_line(SV3_1aPpParser::Expand_vectornets_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitExpand_vectornets_directive(SV3_1aPpParser::Expand_vectornets_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoexpand_vectornets_directive_one_line(SV3_1aPpParser::Noexpand_vectornets_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoexpand_vectornets_directive(SV3_1aPpParser::Noexpand_vectornets_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitAutoexpand_vectornets_directive_one_line(SV3_1aPpParser::Autoexpand_vectornets_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitAutoexpand_vectornets_directive(SV3_1aPpParser::Autoexpand_vectornets_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitUselib_directive_one_line(SV3_1aPpParser::Uselib_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitUselib_directive(SV3_1aPpParser::Uselib_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDisable_portfaults_directive_one_line(SV3_1aPpParser::Disable_portfaults_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDisable_portfaults_directive(SV3_1aPpParser::Disable_portfaults_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEnable_portfaults_directive_one_line(SV3_1aPpParser::Enable_portfaults_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitEnable_portfaults_directive(SV3_1aPpParser::Enable_portfaults_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitNosuppress_faults_directive_one_line(SV3_1aPpParser::Nosuppress_faults_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitNosuppress_faults_directive(SV3_1aPpParser::Nosuppress_faults_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitSuppress_faults_directive_one_line(SV3_1aPpParser::Suppress_faults_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitSuppress_faults_directive(SV3_1aPpParser::Suppress_faults_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitSigned_directive_one_line(SV3_1aPpParser::Signed_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitSigned_directive(SV3_1aPpParser::Signed_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitUnsigned_directive_one_line(SV3_1aPpParser::Unsigned_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitUnsigned_directive(SV3_1aPpParser::Unsigned_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitRemove_gatename_directive_one_line(SV3_1aPpParser::Remove_gatename_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitRemove_gatename_directive(SV3_1aPpParser::Remove_gatename_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoremove_gatenames_directive_one_line(SV3_1aPpParser::Noremove_gatenames_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoremove_gatenames_directive(SV3_1aPpParser::Noremove_gatenames_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitRemove_netname_directive_one_line(SV3_1aPpParser::Remove_netname_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitRemove_netname_directive(SV3_1aPpParser::Remove_netname_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoremove_netnames_directive_one_line(SV3_1aPpParser::Noremove_netnames_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoremove_netnames_directive(SV3_1aPpParser::Noremove_netnames_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitAccelerate_directive_one_line(SV3_1aPpParser::Accelerate_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitAccelerate_directive(SV3_1aPpParser::Accelerate_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoaccelerate_directive_one_line(SV3_1aPpParser::Noaccelerate_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitNoaccelerate_directive(SV3_1aPpParser::Noaccelerate_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_trireg_strenght_directive_one_line(SV3_1aPpParser::Default_trireg_strenght_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_trireg_strenght_directive(SV3_1aPpParser::Default_trireg_strenght_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_decay_time_directive_one_line(SV3_1aPpParser::Default_decay_time_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_decay_time_directive(SV3_1aPpParser::Default_decay_time_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitUnconnected_drive_directive_one_line(SV3_1aPpParser::Unconnected_drive_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitUnconnected_drive_directive(SV3_1aPpParser::Unconnected_drive_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitNounconnected_drive_directive_one_line(SV3_1aPpParser::Nounconnected_drive_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitNounconnected_drive_directive(SV3_1aPpParser::Nounconnected_drive_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_distributed_directive_one_line(SV3_1aPpParser::Delay_mode_distributed_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_distributed_directive(SV3_1aPpParser::Delay_mode_distributed_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_path_directive_one_line(SV3_1aPpParser::Delay_mode_path_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_path_directive(SV3_1aPpParser::Delay_mode_path_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_unit_directive_one_line(SV3_1aPpParser::Delay_mode_unit_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_unit_directive(SV3_1aPpParser::Delay_mode_unit_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_zero_directive_one_line(SV3_1aPpParser::Delay_mode_zero_directive_one_lineContext *context) = 0;
-
-    virtual antlrcpp::Any visitDelay_mode_zero_directive(SV3_1aPpParser::Delay_mode_zero_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitUndefineall_directive(SV3_1aPpParser::Undefineall_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitModule(SV3_1aPpParser::ModuleContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndmodule(SV3_1aPpParser::EndmoduleContext *context) = 0;
-
-    virtual antlrcpp::Any visitSv_interface(SV3_1aPpParser::Sv_interfaceContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndinterface(SV3_1aPpParser::EndinterfaceContext *context) = 0;
-
-    virtual antlrcpp::Any visitProgram(SV3_1aPpParser::ProgramContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprogram(SV3_1aPpParser::EndprogramContext *context) = 0;
-
-    virtual antlrcpp::Any visitPrimitive(SV3_1aPpParser::PrimitiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprimitive(SV3_1aPpParser::EndprimitiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitSv_package(SV3_1aPpParser::Sv_packageContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndpackage(SV3_1aPpParser::EndpackageContext *context) = 0;
-
-    virtual antlrcpp::Any visitChecker(SV3_1aPpParser::CheckerContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndchecker(SV3_1aPpParser::EndcheckerContext *context) = 0;
-
-    virtual antlrcpp::Any visitConfig(SV3_1aPpParser::ConfigContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndconfig(SV3_1aPpParser::EndconfigContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefine_directive(SV3_1aPpParser::Define_directiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitMultiline_no_args_macro_definition(SV3_1aPpParser::Multiline_no_args_macro_definitionContext *context) = 0;
-
-    virtual antlrcpp::Any visitMultiline_args_macro_definition(SV3_1aPpParser::Multiline_args_macro_definitionContext *context) = 0;
-
-    virtual antlrcpp::Any visitSimple_no_args_macro_definition(SV3_1aPpParser::Simple_no_args_macro_definitionContext *context) = 0;
-
-    virtual antlrcpp::Any visitSimple_args_macro_definition(SV3_1aPpParser::Simple_args_macro_definitionContext *context) = 0;
-
-    virtual antlrcpp::Any visitIdentifier_in_macro_body(SV3_1aPpParser::Identifier_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitSimple_no_args_macro_definition_in_macro_body(SV3_1aPpParser::Simple_no_args_macro_definition_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitSimple_args_macro_definition_in_macro_body(SV3_1aPpParser::Simple_args_macro_definition_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitDirective_in_macro(SV3_1aPpParser::Directive_in_macroContext *context) = 0;
-
-    virtual antlrcpp::Any visitMacro_arguments(SV3_1aPpParser::Macro_argumentsContext *context) = 0;
-
-    virtual antlrcpp::Any visitEscaped_macro_definition_body(SV3_1aPpParser::Escaped_macro_definition_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitEscaped_macro_definition_body_alt1(SV3_1aPpParser::Escaped_macro_definition_body_alt1Context *context) = 0;
-
-    virtual antlrcpp::Any visitEscaped_macro_definition_body_alt2(SV3_1aPpParser::Escaped_macro_definition_body_alt2Context *context) = 0;
-
-    virtual antlrcpp::Any visitSimple_macro_definition_body(SV3_1aPpParser::Simple_macro_definition_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitSimple_macro_definition_body_in_macro_body(SV3_1aPpParser::Simple_macro_definition_body_in_macro_bodyContext *context) = 0;
-
-    virtual antlrcpp::Any visitPragma_expression(SV3_1aPpParser::Pragma_expressionContext *context) = 0;
-
-    virtual antlrcpp::Any visitMacro_arg(SV3_1aPpParser::Macro_argContext *context) = 0;
-
-    virtual antlrcpp::Any visitPaired_parens(SV3_1aPpParser::Paired_parensContext *context) = 0;
-
-    virtual antlrcpp::Any visitText_blob(SV3_1aPpParser::Text_blobContext *context) = 0;
-
-    virtual antlrcpp::Any visitString(SV3_1aPpParser::StringContext *context) = 0;
-
-    virtual antlrcpp::Any visitEscaped_identifier(SV3_1aPpParser::Escaped_identifierContext *context) = 0;
-
-    virtual antlrcpp::Any visitDefault_value(SV3_1aPpParser::Default_valueContext *context) = 0;
-
-    virtual antlrcpp::Any visitString_blob(SV3_1aPpParser::String_blobContext *context) = 0;
-
-
-};
-
diff --git a/src/parser/SV3_1aSplitterParser.cpp b/src/parser/SV3_1aSplitterParser.cpp
index a4e159d..a098ff9 100644
--- a/src/parser/SV3_1aSplitterParser.cpp
+++ b/src/parser/SV3_1aSplitterParser.cpp
@@ -3,7 +3,6 @@
 
 
 #include "SV3_1aSplitterParserListener.h"
-#include "SV3_1aSplitterParserVisitor.h"
 
 #include "SV3_1aSplitterParser.h"
 
@@ -63,14 +62,6 @@
     parserListener->exitSource_text(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::Source_textContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitSource_text(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::Source_textContext* SV3_1aSplitterParser::source_text() {
   Source_textContext *_localctx = _tracker.createInstance<Source_textContext>(_ctx, getState());
   enterRule(_localctx, 0, SV3_1aSplitterParser::RuleSource_text);
@@ -200,14 +191,6 @@
     parserListener->exitDescription(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::DescriptionContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitDescription(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::DescriptionContext* SV3_1aSplitterParser::description() {
   DescriptionContext *_localctx = _tracker.createInstance<DescriptionContext>(_ctx, getState());
   enterRule(_localctx, 2, SV3_1aSplitterParser::RuleDescription);
@@ -365,14 +348,6 @@
     parserListener->exitModule(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::ModuleContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitModule(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::ModuleContext* SV3_1aSplitterParser::module() {
   ModuleContext *_localctx = _tracker.createInstance<ModuleContext>(_ctx, getState());
   enterRule(_localctx, 4, SV3_1aSplitterParser::RuleModule);
@@ -422,14 +397,6 @@
     parserListener->exitEndmodule(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndmoduleContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndmodule(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndmoduleContext* SV3_1aSplitterParser::endmodule() {
   EndmoduleContext *_localctx = _tracker.createInstance<EndmoduleContext>(_ctx, getState());
   enterRule(_localctx, 6, SV3_1aSplitterParser::RuleEndmodule);
@@ -479,14 +446,6 @@
     parserListener->exitSv_interface(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::Sv_interfaceContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitSv_interface(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::Sv_interfaceContext* SV3_1aSplitterParser::sv_interface() {
   Sv_interfaceContext *_localctx = _tracker.createInstance<Sv_interfaceContext>(_ctx, getState());
   enterRule(_localctx, 8, SV3_1aSplitterParser::RuleSv_interface);
@@ -536,14 +495,6 @@
     parserListener->exitEndinterface(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndinterfaceContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndinterface(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndinterfaceContext* SV3_1aSplitterParser::endinterface() {
   EndinterfaceContext *_localctx = _tracker.createInstance<EndinterfaceContext>(_ctx, getState());
   enterRule(_localctx, 10, SV3_1aSplitterParser::RuleEndinterface);
@@ -593,14 +544,6 @@
     parserListener->exitProgram(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::ProgramContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitProgram(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::ProgramContext* SV3_1aSplitterParser::program() {
   ProgramContext *_localctx = _tracker.createInstance<ProgramContext>(_ctx, getState());
   enterRule(_localctx, 12, SV3_1aSplitterParser::RuleProgram);
@@ -650,14 +593,6 @@
     parserListener->exitEndprogram(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndprogramContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndprogram(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndprogramContext* SV3_1aSplitterParser::endprogram() {
   EndprogramContext *_localctx = _tracker.createInstance<EndprogramContext>(_ctx, getState());
   enterRule(_localctx, 14, SV3_1aSplitterParser::RuleEndprogram);
@@ -707,14 +642,6 @@
     parserListener->exitPrimitive(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::PrimitiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitPrimitive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::PrimitiveContext* SV3_1aSplitterParser::primitive() {
   PrimitiveContext *_localctx = _tracker.createInstance<PrimitiveContext>(_ctx, getState());
   enterRule(_localctx, 16, SV3_1aSplitterParser::RulePrimitive);
@@ -764,14 +691,6 @@
     parserListener->exitEndprimitive(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndprimitiveContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndprimitive(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndprimitiveContext* SV3_1aSplitterParser::endprimitive() {
   EndprimitiveContext *_localctx = _tracker.createInstance<EndprimitiveContext>(_ctx, getState());
   enterRule(_localctx, 18, SV3_1aSplitterParser::RuleEndprimitive);
@@ -821,14 +740,6 @@
     parserListener->exitSv_package(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::Sv_packageContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitSv_package(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::Sv_packageContext* SV3_1aSplitterParser::sv_package() {
   Sv_packageContext *_localctx = _tracker.createInstance<Sv_packageContext>(_ctx, getState());
   enterRule(_localctx, 20, SV3_1aSplitterParser::RuleSv_package);
@@ -878,14 +789,6 @@
     parserListener->exitEndpackage(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndpackageContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndpackage(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndpackageContext* SV3_1aSplitterParser::endpackage() {
   EndpackageContext *_localctx = _tracker.createInstance<EndpackageContext>(_ctx, getState());
   enterRule(_localctx, 22, SV3_1aSplitterParser::RuleEndpackage);
@@ -935,14 +838,6 @@
     parserListener->exitChecker(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::CheckerContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitChecker(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::CheckerContext* SV3_1aSplitterParser::checker() {
   CheckerContext *_localctx = _tracker.createInstance<CheckerContext>(_ctx, getState());
   enterRule(_localctx, 24, SV3_1aSplitterParser::RuleChecker);
@@ -992,14 +887,6 @@
     parserListener->exitEndchecker(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndcheckerContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndchecker(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndcheckerContext* SV3_1aSplitterParser::endchecker() {
   EndcheckerContext *_localctx = _tracker.createInstance<EndcheckerContext>(_ctx, getState());
   enterRule(_localctx, 26, SV3_1aSplitterParser::RuleEndchecker);
@@ -1049,14 +936,6 @@
     parserListener->exitConfig(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::ConfigContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitConfig(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::ConfigContext* SV3_1aSplitterParser::config() {
   ConfigContext *_localctx = _tracker.createInstance<ConfigContext>(_ctx, getState());
   enterRule(_localctx, 28, SV3_1aSplitterParser::RuleConfig);
@@ -1106,14 +985,6 @@
     parserListener->exitEndconfig(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::EndconfigContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitEndconfig(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::EndconfigContext* SV3_1aSplitterParser::endconfig() {
   EndconfigContext *_localctx = _tracker.createInstance<EndconfigContext>(_ctx, getState());
   enterRule(_localctx, 30, SV3_1aSplitterParser::RuleEndconfig);
@@ -1163,14 +1034,6 @@
     parserListener->exitAny(this);
 }
 
-
-antlrcpp::Any SV3_1aSplitterParser::AnyContext::accept(tree::ParseTreeVisitor *visitor) {
-  if (auto parserVisitor = dynamic_cast<SV3_1aSplitterParserVisitor*>(visitor))
-    return parserVisitor->visitAny(this);
-  else
-    return visitor->visitChildren(this);
-}
-
 SV3_1aSplitterParser::AnyContext* SV3_1aSplitterParser::any() {
   AnyContext *_localctx = _tracker.createInstance<AnyContext>(_ctx, getState());
   enterRule(_localctx, 32, SV3_1aSplitterParser::RuleAny);
diff --git a/src/parser/SV3_1aSplitterParser.h b/src/parser/SV3_1aSplitterParser.h
index b879dd2..7d44302 100644
--- a/src/parser/SV3_1aSplitterParser.h
+++ b/src/parser/SV3_1aSplitterParser.h
@@ -63,8 +63,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -92,8 +90,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -107,8 +103,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -122,8 +116,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -137,8 +129,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -152,8 +142,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -167,8 +155,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -182,8 +168,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -197,8 +181,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -212,8 +194,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -227,8 +207,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -242,8 +220,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -257,8 +233,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -272,8 +246,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -287,8 +259,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -302,8 +272,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
@@ -317,8 +285,6 @@
 
     virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
     virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
-
-    virtual antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
    
   };
 
diff --git a/src/parser/SV3_1aSplitterParserBaseVisitor.cpp b/src/parser/SV3_1aSplitterParserBaseVisitor.cpp
deleted file mode 100644
index 1d17a79..0000000
--- a/src/parser/SV3_1aSplitterParserBaseVisitor.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aSplitterParser.g4 by ANTLR 4.7.2
-
-
-#include "SV3_1aSplitterParserBaseVisitor.h"
-
-
diff --git a/src/parser/SV3_1aSplitterParserBaseVisitor.h b/src/parser/SV3_1aSplitterParserBaseVisitor.h
deleted file mode 100644
index 8239f03..0000000
--- a/src/parser/SV3_1aSplitterParserBaseVisitor.h
+++ /dev/null
@@ -1,88 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aSplitterParser.g4 by ANTLR 4.7.2
-
-#pragma once
-
-
-#include "antlr4-runtime.h"
-#include "SV3_1aSplitterParserVisitor.h"
-
-
-/**
- * This class provides an empty implementation of SV3_1aSplitterParserVisitor, which can be
- * extended to create a visitor which only needs to handle a subset of the available methods.
- */
-class  SV3_1aSplitterParserBaseVisitor : public SV3_1aSplitterParserVisitor {
-public:
-
-  virtual antlrcpp::Any visitSource_text(SV3_1aSplitterParser::Source_textContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitDescription(SV3_1aSplitterParser::DescriptionContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitModule(SV3_1aSplitterParser::ModuleContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndmodule(SV3_1aSplitterParser::EndmoduleContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSv_interface(SV3_1aSplitterParser::Sv_interfaceContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndinterface(SV3_1aSplitterParser::EndinterfaceContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitProgram(SV3_1aSplitterParser::ProgramContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprogram(SV3_1aSplitterParser::EndprogramContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitPrimitive(SV3_1aSplitterParser::PrimitiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndprimitive(SV3_1aSplitterParser::EndprimitiveContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitSv_package(SV3_1aSplitterParser::Sv_packageContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndpackage(SV3_1aSplitterParser::EndpackageContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitChecker(SV3_1aSplitterParser::CheckerContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndchecker(SV3_1aSplitterParser::EndcheckerContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitConfig(SV3_1aSplitterParser::ConfigContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitEndconfig(SV3_1aSplitterParser::EndconfigContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-  virtual antlrcpp::Any visitAny(SV3_1aSplitterParser::AnyContext *ctx) override {
-    return visitChildren(ctx);
-  }
-
-
-};
-
diff --git a/src/parser/SV3_1aSplitterParserVisitor.cpp b/src/parser/SV3_1aSplitterParserVisitor.cpp
deleted file mode 100644
index 88034b3..0000000
--- a/src/parser/SV3_1aSplitterParserVisitor.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aSplitterParser.g4 by ANTLR 4.7.2
-
-
-#include "SV3_1aSplitterParserVisitor.h"
-
-
diff --git a/src/parser/SV3_1aSplitterParserVisitor.h b/src/parser/SV3_1aSplitterParserVisitor.h
deleted file mode 100644
index 7ab7624..0000000
--- a/src/parser/SV3_1aSplitterParserVisitor.h
+++ /dev/null
@@ -1,58 +0,0 @@
-
-// Generated from /home/alain/Surelog/grammar/SV3_1aSplitterParser.g4 by ANTLR 4.7.2
-
-#pragma once
-
-
-#include "antlr4-runtime.h"
-#include "SV3_1aSplitterParser.h"
-
-
-
-/**
- * This class defines an abstract visitor for a parse tree
- * produced by SV3_1aSplitterParser.
- */
-class  SV3_1aSplitterParserVisitor : public antlr4::tree::AbstractParseTreeVisitor {
-public:
-
-  /**
-   * Visit parse trees produced by SV3_1aSplitterParser.
-   */
-    virtual antlrcpp::Any visitSource_text(SV3_1aSplitterParser::Source_textContext *context) = 0;
-
-    virtual antlrcpp::Any visitDescription(SV3_1aSplitterParser::DescriptionContext *context) = 0;
-
-    virtual antlrcpp::Any visitModule(SV3_1aSplitterParser::ModuleContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndmodule(SV3_1aSplitterParser::EndmoduleContext *context) = 0;
-
-    virtual antlrcpp::Any visitSv_interface(SV3_1aSplitterParser::Sv_interfaceContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndinterface(SV3_1aSplitterParser::EndinterfaceContext *context) = 0;
-
-    virtual antlrcpp::Any visitProgram(SV3_1aSplitterParser::ProgramContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprogram(SV3_1aSplitterParser::EndprogramContext *context) = 0;
-
-    virtual antlrcpp::Any visitPrimitive(SV3_1aSplitterParser::PrimitiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndprimitive(SV3_1aSplitterParser::EndprimitiveContext *context) = 0;
-
-    virtual antlrcpp::Any visitSv_package(SV3_1aSplitterParser::Sv_packageContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndpackage(SV3_1aSplitterParser::EndpackageContext *context) = 0;
-
-    virtual antlrcpp::Any visitChecker(SV3_1aSplitterParser::CheckerContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndchecker(SV3_1aSplitterParser::EndcheckerContext *context) = 0;
-
-    virtual antlrcpp::Any visitConfig(SV3_1aSplitterParser::ConfigContext *context) = 0;
-
-    virtual antlrcpp::Any visitEndconfig(SV3_1aSplitterParser::EndconfigContext *context) = 0;
-
-    virtual antlrcpp::Any visitAny(SV3_1aSplitterParser::AnyContext *context) = 0;
-
-
-};
-
