Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmeshcalclexer.ll 3 : : ------------------- 4 : : begin : December 19th, 2018 5 : : copyright : (C) 2018 by Peter Petrik 6 : : email : zilolv at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : %option noyywrap 19 : : %option nounput 20 : : %option case-insensitive 21 : : %option never-interactive 22 : : 23 : : // ensure that lexer will be 8-bit (and not just 7-bit) 24 : : %option 8bit 25 : : 26 : : %{ 27 : : //directly included in the output program 28 : : #include "qgsmeshcalcnode.h" 29 : : #include "qgsmeshcalcparser.hpp" 30 : : 31 : : // if not defined, searches for isatty() 32 : : // which doesn't in MSVC compiler 33 : : #define YY_NEVER_INTERACTIVE 1 34 : : 35 : : #ifdef _MSC_VER 36 : : #define YY_NO_UNISTD_H 37 : : #endif 38 : : 39 : : #ifndef _MSC_VER 40 : : #pragma GCC diagnostic ignored "-Wsign-compare" 41 : : #endif 42 : : %} 43 : : 44 : : white [ \t\r\n]+ 45 : : 46 : : dig [0-9] 47 : : num1 {dig}+\.?([eE][-+]?{dig}+)? 48 : : num2 {dig}*\.{dig}+([eE][-+]?{dig}+)? 49 : : number {num1}|{num2} 50 : : 51 : : non_ascii [\x80-\xFF] 52 : : dataset_ref_char [A-Za-z0-9_./:]|{non_ascii}|[-] 53 : : dataset_ref ({dataset_ref_char}+) 54 : : dataset_ref_quoted \"(\\.|[^"])*\" 55 : : 56 : : %% 57 : : 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; } 63 : : 64 : : "max" { meshlval.op = QgsMeshCalcNode::opMAX; return FUNCTION2; } 65 : : "min" { meshlval.op = QgsMeshCalcNode::opMIN; return FUNCTION2; } 66 : : 67 : : "IF" { return IF; } 68 : : "AND" { return AND; } 69 : : "OR" { return OR; } 70 : : "NOT" { return NOT; } 71 : : "!=" { return NE; } 72 : : "<=" { return LE; } 73 : : ">=" { return GE; } 74 : : "NODATA" {return NODATA;} 75 : : 76 : : [=><+-/*^] { return yytext[0]; } 77 : : 78 : : [()] { return yytext[0]; } 79 : : 80 : : {number} { meshlval.number = atof(meshtext); return NUMBER; } 81 : : 82 : : {dataset_ref} { return DATASET_REF; } 83 : : 84 : : {dataset_ref_quoted} { return DATASET_REF; } 85 : : 86 : : {white} /* skip blanks and tabs */ 87 : : %% 88 : : 89 : : void set_mesh_input_buffer(const char* buffer) 90 : 0 : { 91 : : mesh_scan_string(buffer); 92 : 0 : }