%{ /* The lexer */ #include #include #include "crs_internal.h" #include "crs_wkt_parse.h" static YY_BUFFER_STATE wkt_yy_buf_state; void wkt_lexer_init(char *src) { wkt_yy_buf_state = wkt_yy_scan_string(src); } void wkt_lexer_close() { wkt_yy_delete_buffer(wkt_yy_buf_state); } %} %option noyywrap %option prefix="wkt_yy" %% [ \t]+ /* ignore whitespace */; PROJCS { return PROJCS_TOK; } GEOGCS { return GEOGCS_TOK; } PARAMETER { return PARAMETER_TOK; } DATUM { return DATUM_TOK; } SPHEROID { return SPHEROID_TOK; } AUTHORITY { return AUTHORITY_TOK; } PRIMEM { return PRIMEM_TOK; } UNIT { return UNIT_TOK; } PROJECTION { return PROJECTION_TOK; } TOWGS84 { return TOWGS84_TOK; } AXIS { return AXIS_TOK; } -?(([0-9]+)|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { CRSDEBUGF(5,"Lex got double: %s",wkt_yytext); wkt_yylval.doublevalue = atof(wkt_yytext); return FLOAT_TOK; } \"[^"\n]*["\n] { CRSDEBUGF(5,"Lex got quoted string: %s", wkt_yytext); wkt_yylval.stringvalue = strdup(wkt_yytext); return STRING_TOK; } [a-zA-Z0-9]+ { CRSDEBUGF(5,"Lex got unquoted string: %s", wkt_yytext); wkt_yylval.stringvalue = strdup(wkt_yytext); return STRING_TOK; } \[ { return LBRACKET_TOK; } \] { return RBRACKET_TOK; } , { return COMMA_TOK; } %%