Skip to content

Commit 466a1eb

Browse files
committed
Add re2c. Improve flex/bison.
1 parent 200dc7d commit 466a1eb

1 file changed

Lines changed: 46 additions & 21 deletions

File tree

src/inserts/functions.cmake

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)