Skip to content

Commit a20c909

Browse files
committedJun 24, 2021
Minimum flex version 2.6 and a bit of cleanup
Fixes #43903 Fixes #43795
1 parent 91ebc53 commit a20c909

File tree

10 files changed

+68
-254
lines changed

10 files changed

+68
-254
lines changed
 

‎CMakeLists.txt

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -311,25 +311,8 @@ if(WITH_CORE)
311311
set (USING_NINJA TRUE)
312312
endif()
313313

314-
#############################################################
315-
# check if lexer and parser are not missing
316-
# http://www.mail-archive.com/cmake@cmake.org/msg02861.html
317-
318-
include(Flex)
319-
320-
FIND_FLEX()
321-
322-
if (NOT FLEX_EXECUTABLE)
323-
message(FATAL_ERROR "Couldn't find Flex")
324-
endif()
325-
326-
include(Bison)
327-
328-
FIND_BISON()
329-
330-
if (NOT BISON_EXECUTABLE)
331-
message(FATAL_ERROR "Couldn't find Bison")
332-
endif()
314+
find_package(FLEX 2.6 REQUIRED)
315+
find_package(BISON REQUIRED)
333316

334317
#############################################################
335318
# search for dependencies

‎cmake/Bison.cmake

Lines changed: 0 additions & 99 deletions
This file was deleted.

‎cmake/Flex.cmake

Lines changed: 0 additions & 92 deletions
This file was deleted.

‎src/analysis/CMakeLists.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
#############################################################
22
# sources
33

4+
BISON_TARGET(QgsRasterCalcParser raster/qgsrastercalcparser.yy ${CMAKE_CURRENT_BINARY_DIR}/qgsrastercalcparser.cpp COMPILE_FLAGS "-p raster_")
5+
FLEX_TARGET(QgsRasterCalcLexer raster/qgsrastercalclexer.ll ${CMAKE_CURRENT_BINARY_DIR}/qgsrastercalclexer.cpp)
6+
ADD_FLEX_BISON_DEPENDENCY(QgsRasterCalcLexer QgsRasterCalcParser)
7+
48
set(QGIS_ANALYSIS_SRCS
59
qgsanalysis.cpp
610

11+
12+
${FLEX_QgsRasterCalcLexer_OUTPUTS}
13+
${BISON_QgsRasterCalcParser_OUTPUTS}
14+
715
georeferencing/qgsgcpgeometrytransformer.cpp
816
georeferencing/qgsgcptransformer.cpp
917
georeferencing/qgsleastsquares.cpp
@@ -408,9 +416,6 @@ if(HAVE_GSL)
408416
include_directories(SYSTEM ${GSL_INCLUDE_DIR})
409417
endif()
410418

411-
ADD_FLEX_FILES_PREFIX(QGIS_ANALYSIS_SRCS raster raster/qgsrastercalclexer.ll)
412-
ADD_BISON_FILES_PREFIX(QGIS_ANALYSIS_SRCS raster raster/qgsrastercalcparser.yy)
413-
414419
if(NOT MSVC)
415420
set_source_files_properties(
416421
${CMAKE_BINARY_DIR}/src/analysis/qgsrastercalcparser.cpp

‎src/analysis/raster/qgsrastercalclexer.ll

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
%option nounput
2121
%option case-insensitive
2222
%option never-interactive
23+
%option prefix="raster_"
2324

2425
// ensure that lexer will be 8-bit (and not just 7-bit)
2526
%option 8bit
@@ -53,18 +54,18 @@ raster_band_ref_quoted \"(\\.|[^"])*\"
5354
5455
%%
5556
56-
"sqrt" { rasterlval.op = QgsRasterCalcNode::opSQRT; return FUNCTION;}
57-
"sin" { rasterlval.op = QgsRasterCalcNode::opSIN; return FUNCTION;}
58-
"cos" { rasterlval.op = QgsRasterCalcNode::opCOS; return FUNCTION;}
59-
"tan" { rasterlval.op = QgsRasterCalcNode::opTAN; return FUNCTION;}
60-
"asin" { rasterlval.op = QgsRasterCalcNode::opASIN; return FUNCTION;}
61-
"acos" { rasterlval.op = QgsRasterCalcNode::opACOS; return FUNCTION;}
62-
"atan" { rasterlval.op = QgsRasterCalcNode::opATAN; return FUNCTION;}
63-
"ln" { rasterlval.op = QgsRasterCalcNode::opLOG; return FUNCTION;}
64-
"log10" { rasterlval.op = QgsRasterCalcNode::opLOG10; return FUNCTION;}
65-
"abs" { rasterlval.op = QgsRasterCalcNode::opABS; return FUNCTION;}
66-
"min" { rasterlval.op = QgsRasterCalcNode::opMIN; return FUNCTION_2_ARGS;}
67-
"max" { rasterlval.op = QgsRasterCalcNode::opMAX; return FUNCTION_2_ARGS;}
57+
"sqrt" { raster_lval.op = QgsRasterCalcNode::opSQRT; return FUNCTION;}
58+
"sin" { raster_lval.op = QgsRasterCalcNode::opSIN; return FUNCTION;}
59+
"cos" { raster_lval.op = QgsRasterCalcNode::opCOS; return FUNCTION;}
60+
"tan" { raster_lval.op = QgsRasterCalcNode::opTAN; return FUNCTION;}
61+
"asin" { raster_lval.op = QgsRasterCalcNode::opASIN; return FUNCTION;}
62+
"acos" { raster_lval.op = QgsRasterCalcNode::opACOS; return FUNCTION;}
63+
"atan" { raster_lval.op = QgsRasterCalcNode::opATAN; return FUNCTION;}
64+
"ln" { raster_lval.op = QgsRasterCalcNode::opLOG; return FUNCTION;}
65+
"log10" { raster_lval.op = QgsRasterCalcNode::opLOG10; return FUNCTION;}
66+
"abs" { raster_lval.op = QgsRasterCalcNode::opABS; return FUNCTION;}
67+
"min" { raster_lval.op = QgsRasterCalcNode::opMIN; return FUNCTION_2_ARGS;}
68+
"max" { raster_lval.op = QgsRasterCalcNode::opMAX; return FUNCTION_2_ARGS;}
6869
6970
"AND" { return AND; }
7071
"OR" { return OR; }
@@ -77,7 +78,7 @@ raster_band_ref_quoted \"(\\.|[^"])*\"
7778
7879
[()] { return yytext[0]; }
7980
80-
{number} { rasterlval.number = atof(rastertext); return NUMBER; }
81+
{number} { raster_lval.number = atof(raster_text); return NUMBER; }
8182
8283
{raster_band_ref} { return RASTER_BAND_REF; }
8384
@@ -92,5 +93,5 @@ raster_band_ref_quoted \"(\\.|[^"])*\"
9293
9394
void set_raster_input_buffer(const char* buffer)
9495
{
95-
raster_scan_string(buffer);
96+
raster__scan_string(buffer);
9697
}

‎src/analysis/raster/qgsrastercalcparser.yy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
QgsRasterCalcNode* parseRasterCalcString(const QString& str, QString& parserErrorMsg);
3131

3232
//! from lex.yy.c
33-
extern int rasterlex();
34-
extern char* rastertext;
33+
extern int raster_lex();
34+
extern char* raster_text;
3535
extern void set_raster_input_buffer(const char* buffer);
3636

3737
//! variable where the parser error will be stored
3838
QString rParserErrorMsg;
3939

4040
//! sets gParserErrorMsg
41-
void rastererror(const char* msg);
41+
void raster_error(const char* msg);
4242

4343
//! temporary list for nodes without parent (if parsing fails these nodes are removed)
4444
QList<QgsRasterCalcNode*> gTmpNodes;
@@ -98,7 +98,7 @@ raster_exp:
9898
| '+' raster_exp %prec UMINUS { $$ = $2; }
9999
| '-' raster_exp %prec UMINUS { $$ = new QgsRasterCalcNode( QgsRasterCalcNode::opSIGN, $2, 0 ); joinTmpNodes($$, $2, 0); }
100100
| NUMBER { $$ = new QgsRasterCalcNode($1); addToTmpNodes($$); }
101-
| RASTER_BAND_REF { $$ = new QgsRasterCalcNode(QString::fromUtf8(rastertext)); addToTmpNodes($$); }
101+
| RASTER_BAND_REF { $$ = new QgsRasterCalcNode(QString::fromUtf8(raster_text)); addToTmpNodes($$); }
102102
;
103103

104104
%%
@@ -136,7 +136,7 @@ QgsRasterCalcNode* localParseRasterCalcString(const QString& str, QString& parse
136136
Q_ASSERT(gTmpNodes.count() == 0);
137137

138138
set_raster_input_buffer(str.toUtf8().constData());
139-
int res = rasterparse();
139+
int res = raster_parse();
140140

141141
// list should be empty when parsing was OK
142142
if (res == 0) // success?

‎src/core/CMakeLists.txt

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
############################################################
22
# sources
33

4+
BISON_TARGET(QgsExpressionParser qgsexpressionparser.yy ${CMAKE_CURRENT_BINARY_DIR}/qgsexpressionparser.cpp COMPILE_FLAGS "-p exp_")
5+
FLEX_TARGET(QgsExpressionLexer qgsexpressionlexer.ll ${CMAKE_CURRENT_BINARY_DIR}/qgsexpressionlexer.cpp)
6+
ADD_FLEX_BISON_DEPENDENCY(QgsExpressionLexer QgsExpressionParser)
7+
BISON_TARGET(QgsSqlStatementParser qgssqlstatementparser.yy ${CMAKE_CURRENT_BINARY_DIR}/qgssqlstatementparser.cpp COMPILE_FLAGS "-p sqlstatement_")
8+
FLEX_TARGET(QgsSqlStatementLexer qgssqlstatementlexer.ll ${CMAKE_CURRENT_BINARY_DIR}/qgssqlstatementlexer.cpp)
9+
ADD_FLEX_BISON_DEPENDENCY(QgsSqlStatementLexer QgsSqlStatementParser)
10+
BISON_TARGET(QgsMeshCalcParser mesh/qgsmeshcalcparser.yy ${CMAKE_CURRENT_BINARY_DIR}/qgsmeshcalcparser.cpp COMPILE_FLAGS "-p mesh_")
11+
FLEX_TARGET(QgsMeshCalcLexer mesh/qgsmeshcalclexer.ll ${CMAKE_CURRENT_BINARY_DIR}/qgsmeshcalclexer.cpp)
12+
ADD_FLEX_BISON_DEPENDENCY(QgsMeshCalcLexer QgsMeshCalcParser)
13+
414
set(QGIS_CORE_SRCS
515
${CMAKE_SOURCE_DIR}/external/kdbush/include/kdbush.hpp
616

@@ -14,6 +24,13 @@ set(QGIS_CORE_SRCS
1424

1525
${CMAKE_SOURCE_DIR}/external/meshOptimizer/simplifier.cpp
1626

27+
${FLEX_QgsExpressionLexer_OUTPUTS}
28+
${BISON_QgsExpressionParser_OUTPUTS}
29+
${FLEX_QgsSqlStatementLexer_OUTPUTS}
30+
${BISON_QgsSqlStatementParser_OUTPUTS}
31+
${FLEX_QgsMeshCalcLexer_OUTPUTS}
32+
${BISON_QgsMeshCalcParser_OUTPUTS}
33+
1734
callouts/qgscallout.cpp
1835
callouts/qgscalloutsregistry.cpp
1936

@@ -793,6 +810,7 @@ set(QGIS_CORE_SRCS
793810

794811
qgsuserprofile.cpp
795812
qgsuserprofilemanager.cpp
813+
796814
)
797815

798816
if (WITH_INTERNAL_POLY2TRI)
@@ -842,13 +860,6 @@ if (${QT_VERSION_BASE}Positioning_FOUND)
842860
)
843861
endif()
844862

845-
ADD_FLEX_FILES_PREFIX(QGIS_CORE_SRCS exp_ qgsexpressionlexer.ll)
846-
ADD_FLEX_FILES_PREFIX(QGIS_CORE_SRCS sqlstatement_ qgssqlstatementlexer.ll)
847-
ADD_FLEX_FILES_PREFIX(QGIS_CORE_SRCS mesh mesh/qgsmeshcalclexer.ll)
848-
ADD_BISON_FILES_PREFIX(QGIS_CORE_SRCS exp_ qgsexpressionparser.yy)
849-
ADD_BISON_FILES_PREFIX(QGIS_CORE_SRCS sqlstatement_ qgssqlstatementparser.yy)
850-
ADD_BISON_FILES_PREFIX(QGIS_CORE_SRCS mesh mesh/qgsmeshcalcparser.yy)
851-
852863
if(NOT MSVC)
853864
set_source_files_properties(
854865
qgsexpressionparser.cpp
@@ -1821,8 +1832,11 @@ set(IMAGE_RCCS ../../images/images.qrc)
18211832

18221833
#############################################################
18231834
# qgis_core library
1835+
include_directories(${CMAKE_CURRENT_BINARY_DIR})
1836+
18241837
add_library(qgis_core ${LIBRARY_TYPE} ${QGIS_CORE_SRCS} ${QGIS_CORE_HDRS} ${QGIS_CORE_PRIVATE_HDRS} ${IMAGE_RCCS})
18251838

1839+
18261840
# require c++17
18271841
target_compile_features(qgis_core PRIVATE cxx_std_17)
18281842

‎src/core/mesh/qgsmeshcalclexer.ll

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
%option nounput
2020
%option case-insensitive
2121
%option never-interactive
22+
%option prefix="mesh_"
2223

2324
// ensure that lexer will be 8-bit (and not just 7-bit)
2425
%option 8bit
@@ -55,14 +56,14 @@ dataset_ref_quoted \"(\\.|[^"])*\"
5556
5657
%%
5758
58-
"sum_aggr" { meshlval.op = QgsMeshCalcNode::opSUM_AGGR; return FUNCTION; }
59-
"max_aggr" { meshlval.op = QgsMeshCalcNode::opMAX_AGGR; return FUNCTION; }
60-
"min_aggr" { meshlval.op = QgsMeshCalcNode::opMIN_AGGR; return FUNCTION; }
61-
"average_aggr" { meshlval.op = QgsMeshCalcNode::opAVG_AGGR; return FUNCTION; }
62-
"abs" { meshlval.op = QgsMeshCalcNode::opABS; return FUNCTION; }
59+
"sum_aggr" { mesh_lval.op = QgsMeshCalcNode::opSUM_AGGR; return FUNCTION; }
60+
"max_aggr" { mesh_lval.op = QgsMeshCalcNode::opMAX_AGGR; return FUNCTION; }
61+
"min_aggr" { mesh_lval.op = QgsMeshCalcNode::opMIN_AGGR; return FUNCTION; }
62+
"average_aggr" { mesh_lval.op = QgsMeshCalcNode::opAVG_AGGR; return FUNCTION; }
63+
"abs" { mesh_lval.op = QgsMeshCalcNode::opABS; return FUNCTION; }
6364
64-
"max" { meshlval.op = QgsMeshCalcNode::opMAX; return FUNCTION2; }
65-
"min" { meshlval.op = QgsMeshCalcNode::opMIN; return FUNCTION2; }
65+
"max" { mesh_lval.op = QgsMeshCalcNode::opMAX; return FUNCTION2; }
66+
"min" { mesh_lval.op = QgsMeshCalcNode::opMIN; return FUNCTION2; }
6667
6768
"IF" { return IF; }
6869
"AND" { return AND; }
@@ -77,7 +78,7 @@ dataset_ref_quoted \"(\\.|[^"])*\"
7778
7879
[()] { return yytext[0]; }
7980
80-
{number} { meshlval.number = atof(meshtext); return NUMBER; }
81+
{number} { mesh_lval.number = atof(mesh_text); return NUMBER; }
8182
8283
{dataset_ref} { return DATASET_REF; }
8384
@@ -88,5 +89,5 @@ dataset_ref_quoted \"(\\.|[^"])*\"
8889
8990
void set_mesh_input_buffer(const char* buffer)
9091
{
91-
mesh_scan_string(buffer);
92+
mesh__scan_string(buffer);
9293
}

‎src/core/mesh/qgsmeshcalcparser.yy

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@
2929
QgsMeshCalcNode* parseMeshCalcString(const QString& str, QString& parserErrorMsg);
3030

3131
//! from lex.yy.c
32-
extern int meshlex();
33-
extern char* meshtext;
32+
extern int mesh_lex();
33+
extern char* mesh_text;
3434
extern void set_mesh_input_buffer(const char* buffer);
3535

3636
//! variable where the parser error will be stored
3737
QString rMeshParserErrorMsg;
3838

3939
//! sets gParserErrorMsg
40-
void mesherror(const char* msg);
40+
void mesh_error(const char* msg);
4141

4242
//! temporary list for nodes without parent (if parsing fails these nodes are removed)
4343
QList<QgsMeshCalcNode*> gMeshTmpNodes;
@@ -102,7 +102,7 @@ mesh_exp:
102102
| '+' mesh_exp %prec UMINUS { $$ = $2; }
103103
| '-' mesh_exp %prec UMINUS { $$ = new QgsMeshCalcNode( QgsMeshCalcNode::opSIGN, $2, 0 ); joinTmpNodes($$, $2, 0, 0); }
104104
| NUMBER { $$ = new QgsMeshCalcNode($1); addToTmpNodes($$); }
105-
| DATASET_REF { $$ = new QgsMeshCalcNode(QString::fromUtf8(meshtext)); addToTmpNodes($$); }
105+
| DATASET_REF { $$ = new QgsMeshCalcNode(QString::fromUtf8(mesh_text)); addToTmpNodes($$); }
106106
| NODATA { $$ = new QgsMeshCalcNode(); addToTmpNodes($$); }
107107
;
108108

@@ -141,7 +141,7 @@ QgsMeshCalcNode* localParseMeshCalcString(const QString& str, QString& parserErr
141141
Q_ASSERT(gMeshTmpNodes.count() == 0);
142142

143143
set_mesh_input_buffer(str.toUtf8().constData());
144-
int res = meshparse();
144+
int res = mesh_parse();
145145

146146
// list should be empty when parsing was OK
147147
if (res == 0) // success?
@@ -159,7 +159,7 @@ QgsMeshCalcNode* localParseMeshCalcString(const QString& str, QString& parserErr
159159
}
160160
}
161161

162-
void mesherror(const char* msg)
162+
void mesh_error(const char* msg)
163163
{
164164
rMeshParserErrorMsg = msg;
165165
}

‎src/core/qgsexpressionparser.yy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,3 +412,4 @@ void exp_error(YYLTYPE* yyloc,expression_parser_context* parser_ctx, const char*
412412

413413
parser_ctx->errorMsg = parser_ctx->errorMsg + "\n" + msg;
414414
}
415+

0 commit comments

Comments
 (0)
Please sign in to comment.