Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsrastercalclexer.ll 3 : : Rules for lexical analysis of raster calc strings done by Flex 4 : : -------------------- 5 : : begin : 2010-10-01 6 : : copyright : (C) 2010 by Marco Hugentobler 7 : : email : marco dot hugentobler at sourcepole dot ch 8 : : ***************************************************************************/ 9 : : 10 : : /*************************************************************************** 11 : : * * 12 : : * This program is free software; you can redistribute it and/or modify * 13 : : * it under the terms of the GNU General Public License as published by * 14 : : * the Free Software Foundation; either version 2 of the License, or * 15 : : * (at your option) any later version. * 16 : : * * 17 : : ***************************************************************************/ 18 : : 19 : : %option noyywrap 20 : : %option nounput 21 : : %option case-insensitive 22 : : %option never-interactive 23 : : 24 : : // ensure that lexer will be 8-bit (and not just 7-bit) 25 : : %option 8bit 26 : : 27 : : %{ 28 : : //directly included in the output program 29 : : #include "qgsrastercalcnode.h" 30 : : #include "qgsrastercalcparser.hpp" 31 : : 32 : : // if not defined, searches for isatty() 33 : : // which doesn't in MSVC compiler 34 : : #define YY_NEVER_INTERACTIVE 1 35 : : 36 : : #ifdef _MSC_VER 37 : : #define YY_NO_UNISTD_H 38 : : #endif 39 : : 40 : : %} 41 : : 42 : : white [ \t\r\n]+ 43 : : 44 : : dig [0-9] 45 : : num1 {dig}+\.?([eE][-+]?{dig}+)? 46 : : num2 {dig}*\.{dig}+([eE][-+]?{dig}+)? 47 : : number {num1}|{num2} 48 : : 49 : : non_ascii [\x80-\xFF] 50 : : raster_ref_char [A-Za-z0-9_./:]|{non_ascii}|[-] 51 : : raster_band_ref ({raster_ref_char}+)@{dig}+ 52 : : raster_band_ref_quoted \"(\\.|[^"])*\" 53 : : 54 : : %% 55 : : 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;} 68 : : 69 : : "AND" { return AND; } 70 : : "OR" { return OR; } 71 : : "!=" { return NE; } 72 : : "<=" { return LE; } 73 : : ">=" { return GE; } 74 : : 75 : : [=><+-/*^] { return yytext[0]; } 76 : : 77 : : 78 : : [()] { return yytext[0]; } 79 : : 80 : : {number} { rasterlval.number = atof(rastertext); return NUMBER; } 81 : : 82 : : {raster_band_ref} { return RASTER_BAND_REF; } 83 : : 84 : : {raster_band_ref_quoted} { return RASTER_BAND_REF; } 85 : : 86 : : {white} /* skip blanks and tabs */ 87 : : 88 : : [a-z][a-z0-9_]* { return yytext[0]; } /* other unknown tokens */ 89 : : 90 : : %% 91 : : 92 : : 93 : : void set_raster_input_buffer(const char* buffer) 94 : 0 : { 95 : : raster_scan_string(buffer); 96 : 0 : }