diff --git a/CMakeLists.txt b/CMakeLists.txt
index 82158273418..44483c08e3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -242,6 +242,8 @@ else()
   message(STATUS "IPO / LTO not supported: <${error}>")
 endif()
 
+find_program(SED sed gsed)
+
 add_subdirectory(src)
 add_subdirectory(regression)
 add_subdirectory(unit)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 56a24ce765e..5dcabe801f2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -41,10 +41,15 @@ macro(generic_bison name)
         COMPILE_FLAGS "${bison_warnings_as_errors} -pyy${name}"
     )
     set(renamed_parser_header "${CMAKE_CURRENT_BINARY_DIR}/${bison_header}")
-    add_custom_command(OUTPUT "${renamed_parser_header}"
-        COMMAND "${CMAKE_COMMAND}" -E copy "${BISON_parser_OUTPUT_HEADER}" "${renamed_parser_header}"
-        MAIN_DEPENDENCY "${BISON_parser_OUTPUT_HEADER}"
-    )
+    if(${SED} STREQUAL "SED-NOTFOUND")
+      add_custom_command(OUTPUT "${renamed_parser_header}"
+          COMMAND "${CMAKE_COMMAND}" -E copy "${BISON_parser_OUTPUT_HEADER}" "${renamed_parser_header}"
+          MAIN_DEPENDENCY "${BISON_parser_OUTPUT_HEADER}")
+    else()
+      add_custom_command(OUTPUT "${renamed_parser_header}"
+          COMMAND ${SED} -e "s,enum yytokentype,enum yytokentype_${name}," <${BISON_parser_OUTPUT_HEADER} >${renamed_parser_header}
+          MAIN_DEPENDENCY "${BISON_parser_OUTPUT_HEADER}")
+    endif()
     list(REMOVE_ITEM BISON_parser_OUTPUTS "${BISON_parser_OUTPUT_HEADER}")
     list(APPEND BISON_parser_OUTPUTS "${renamed_parser_header}")
 endmacro(generic_bison)
diff --git a/src/ansi-c/Makefile b/src/ansi-c/Makefile
index 20ca043e900..9c331460a69 100644
--- a/src/ansi-c/Makefile
+++ b/src/ansi-c/Makefile
@@ -87,6 +87,9 @@ all: ansi-c$(LIBEXT)
 
 ansi_c_y.tab.cpp: parser.y
 	$(YACC) $(YFLAGS) -pyyansi_c parser.y --defines=ansi_c_y.tab.h -o $@
+	$(SED) -e's,enum yytokentype,enum yytokentype_ansi,' \
+	  <ansi_c_y.tab.h >ansi_c_y.tab.h.tmp && \
+	  mv ansi_c_y.tab.h.tmp ansi_c_y.tab.h
 
 ansi_c_y.tab.h: ansi_c_y.tab.cpp
 
diff --git a/src/common b/src/common
index bf4190c5bd5..71ac0a56caa 100644
--- a/src/common
+++ b/src/common
@@ -98,6 +98,9 @@ endif
 ifeq ($(origin LEX),default)
   LEX    = flex
 endif
+ifeq ($(origin SED),default)
+  SED   = sed
+endif
 
 else ifeq ($(BUILD_ENV_),Cygwin)
   # use these for Cygwin:
@@ -130,6 +133,9 @@ endif
 ifeq ($(origin LEX),default)
   LEX    = flex
 endif
+ifeq ($(origin SED),default)
+  SED   = sed
+endif
 
 
 else ifeq ($(BUILD_ENV_),MSVC)
@@ -158,6 +164,10 @@ endif
 ifeq ($(origin LEX),default)
   LEX    = win_flex
 endif
+ifeq ($(origin SED),default)
+  # on MSVC there is no lto
+  SED   = rem
+endif
 
 
 else
diff --git a/src/jsil/Makefile b/src/jsil/Makefile
index b45d2c43ae9..75eb47d48a6 100644
--- a/src/jsil/Makefile
+++ b/src/jsil/Makefile
@@ -29,6 +29,9 @@ jsil$(LIBEXT): $(OBJ)
 
 jsil_y.tab.cpp: parser.y
 	$(YACC) $(YFLAGS) -pyyjsil parser.y --defines=jsil_y.tab.h -o $@
+	$(SED) -e's,enum yytokentype,enum yytokentype_jsil,' \
+	  <jsil_y.tab.h >jsil_y.tab.h.tmp && \
+	  mv jsil_y.tab.h.tmp jsil_y.tab.h
 
 jsil_y.tab.h: jsil_y.tab.cpp
 
diff --git a/src/statement-list/Makefile b/src/statement-list/Makefile
index b23de346064..54ec5aa771f 100644
--- a/src/statement-list/Makefile
+++ b/src/statement-list/Makefile
@@ -31,6 +31,9 @@ all: statement-list$(LIBEXT)
 
 statement_list_y.tab.cpp: parser.y
 	$(YACC) $(YFLAGS) -pyystatement_list parser.y --defines=statement_list_y.tab.h -o $@
+	$(SED) -e's,enum yytokentype,enum yytokentype_stmt,' \
+	  <statement_list_y.tab.h >statement_list_y.tab.h.tmp && \
+	  mv statement_list_y.tab.h.tmp statement_list_y.tab.h
 
 statement_list_y.tab.h: statement_list_y.tab.cpp