@@ -1086,7 +1086,21 @@ macro(ragel f)
10861086 DEPENDS ${i}
10871087 )
10881088 set (src ${src} ${o} )
1089- endmacro (ragel )
1089+ endmacro ()
1090+
1091+ ########################################
1092+ # MACRO re2c
1093+ ########################################
1094+
1095+ macro (re2c f )
1096+ set (i ${SDIR} /${f} )
1097+ set (o ${BDIR_PRIVATE} /${f} .cpp)
1098+ add_custom_command (OUTPUT ${o}
1099+ COMMAND pvt.cppan.demo.re2c.re2c -o ${o} ${i}
1100+ DEPENDS ${i}
1101+ )
1102+ set (src ${src} ${o} )
1103+ endmacro ()
10901104
10911105########################################
10921106# FUNCTION flex_bison
@@ -1103,18 +1117,29 @@ function(flex_bison lexer parser)
11031117 set (bison bison)
11041118 endif ()
11051119
1106- get_filename_component (d ${parser} DIRECTORY )
1107- execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${bdir} /${d} )
1120+ # parser
1121+ get_filename_component (name ${parser} NAME )
1122+
1123+ set (d ${bdir} /${name} )
1124+ execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${d} )
11081125
11091126 add_custom_command (OUTPUT
1110- ${bdir } /${parser }.cpp
1111- ${bdir } /${parser }.hpp
1112- COMMAND ${bison} ${FB_PARSER_ARGS} -o ${bdir } /${parser }.cpp --defines=${bdir }/${parser }.hpp ${SDIR} /${parser}
1127+ ${d } /${name }.cpp
1128+ ${d } /${name }.hpp
1129+ COMMAND ${bison} ${FB_PARSER_ARGS} -o ${d } /${name }.cpp --defines=${d }/${name }.hpp ${SDIR} /${parser}
11131130 DEPENDS ${bison} ${SDIR} /${parser}
1114- WORKING_DIRECTORY ${bdir} /${ d}
1131+ WORKING_DIRECTORY ${d}
11151132 )
1116- target_include_directories (${this} PRIVATE ${bdir} /${d} )
1133+ target_include_directories (${this} PRIVATE ${d} )
1134+
1135+ target_sources (${this} PRIVATE
1136+ ${d} /${name}.cpp
1137+ ${d} /${name}.hpp
1138+ )
1139+
1140+ set (parser_header ${d} /${name} .hpp)
11171141
1142+ # lexer
11181143 get_filename_component (d ${lexer} DIRECTORY )
11191144 execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${bdir} /${d} )
11201145
@@ -1123,14 +1148,12 @@ function(flex_bison lexer parser)
11231148 #${bdir}/${lexer}.h
11241149 #COMMAND ${flex} -o ${bdir}/${lexer}.cpp --header-file=${lexer}.h ${SDIR}/${lexer}
11251150 COMMAND ${flex} ${FB_LEXER_ARGS} -o ${bdir} /${lexer}.cpp ${SDIR} /${lexer}
1126- DEPENDS ${flex} ${SDIR} /${lexer} ${bdir} /${parser}.hpp
1151+ DEPENDS ${flex} ${SDIR} /${lexer} ${parser_header}
11271152 WORKING_DIRECTORY ${bdir}
11281153 )
11291154 target_include_directories (${this} PRIVATE ${bdir} /${d} )
11301155
11311156 target_sources (${this} PRIVATE
1132- ${bdir} /${parser}.cpp
1133- ${bdir} /${parser}.hpp
11341157 ${bdir} /${lexer}.cpp
11351158 #${bdir}/${lexer}.h
11361159 )
@@ -1153,20 +1176,22 @@ function(flex_bison_pair type name)
11531176
11541177 set (parser_include ${BDIR_PRIVATE} /${name} _parser.h)
11551178 set (parser_include_in ${parser_include} .in)
1156- file (WRITE ${parser_include_in} "
1157- #pragma once
1179+ file (WRITE ${parser_include_in} "#pragma once
11581180
1159- #define THIS_PARSER_NAME ${name}
1160- #define THIS_PARSER_NAME_UP ${name_upper}
1161- #define MY_PARSER ${parser_name}
1181+ #undef THIS_PARSER_NAME
1182+ #undef THIS_PARSER_NAME_UP
1183+ #undef MY_PARSER
11621184
1163- #define ${type}
1185+ #define THIS_PARSER_NAME ${name}
1186+ #define THIS_PARSER_NAME_UP ${name_upper}
1187+ #define MY_PARSER ${parser_name}
11641188
1165- #include <primitives/helper/bison.h>
1166- #include <${name} .yy.hpp>
1189+ #define ${type}
1190+ #include <primitives/helper/bison.h>
1191+ #undef ${type}
11671192
1168- DECLARE_PARSER;
1169- " )
1193+ #include < ${name} .yy.hpp>
1194+ " )
11701195
11711196 add_custom_command (OUTPUT ${parser_include}
11721197 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${parser_include_in} ${parser_include}
0 commit comments