PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches
lwin_wkt_lex.l
Go to the documentation of this file.
1%{
2
3/* The lexer */
4
5#include <stdio.h>
6#include <string.h>
7#include "lwin_wkt.h"
8#include "lwin_wkt_parse.h"
9#include "lwgeom_log.h"
10
12
13/*
14* Handle errors due to unexpected junk in WKT strings.
15*/
23
24/*
25* This macro is magically run after a rule is found but before the main
26* action is run. We use it to update the parse location information
27* so we can report on where things fail. Also optionally to dump
28* debugging info.
29*/
30#define YY_USER_ACTION do { \
31 wkt_yylloc.first_line = wkt_yylloc.last_line = yylineno; \
32 wkt_yylloc.first_column = wkt_yylloc.last_column; \
33 wkt_yylloc.last_column += yyleng; \
34 LWDEBUGF(5,"lex: %s", wkt_yytext); \
35 } while (0);
36
37
#define PARSER_ERROR_OTHER
Definition liblwgeom.h:2092
const char * parser_error_messages[]
Definition lwin_wkt.c:37
LWGEOM_PARSER_RESULT global_parser_result
static void wkt_lexer_unknown()
static YY_BUFFER_STATE wkt_yy_buf_state
YYLTYPE wkt_yylloc
38%}
39
40%option prefix="wkt_yy"
41%option nounput
42%option noinput
43%option never-interactive
44%option outfile="lwin_wkt_lex.c"
45%option noyywrap
46/* Suppress the default implementations. */
47%option noyyalloc noyyrealloc noyyfree
48
49%%
50
51-?(([0-9]+\.?)|([0-9]*\.?[0-9]+)([eE][-+]?[0-9]+)?)[ \,\‍)\t\n\r] {
52 LWDEBUG(5,"DOUBLE");
53 wkt_yylval.doublevalue = atof(wkt_yytext);
54 yyless(wkt_yyleng-1);
55 return DOUBLE_TOK;
56 }
#define LWDEBUG(level, msg)
Definition lwgeom_log.h:83
#define yyless(n)
YYSTYPE wkt_yylval
#define DOUBLE_TOK
double doublevalue
57
58SRID=-?[0-9]+ {
59 LWDEBUG(5,"SRID");
61 return SRID_TOK;
62 }
int wkt_lexer_read_srid(char *str)
Read the SRID number from an SRID=<> string.
Definition lwin_wkt.c:61
#define SRID_TOK
63
64GEOMETRYCOLLECTION { return COLLECTION_TOK; }
#define COLLECTION_TOK
65MULTISURFACE { return MSURFACE_TOK; }
#define MSURFACE_TOK
66MULTIPOLYGON { return MPOLYGON_TOK; }
#define MPOLYGON_TOK
67MULTICURVE { return MCURVE_TOK; }
#define MCURVE_TOK
68MULTILINESTRING { return MLINESTRING_TOK; }
#define MLINESTRING_TOK
69MULTIPOINT { return MPOINT_TOK; }
#define MPOINT_TOK
70CURVEPOLYGON { return CURVEPOLYGON_TOK; }
#define CURVEPOLYGON_TOK
71POLYGON { return POLYGON_TOK; }
#define POLYGON_TOK
72COMPOUNDCURVE { return COMPOUNDCURVE_TOK; }
#define COMPOUNDCURVE_TOK
73CIRCULARSTRING { return CIRCULARSTRING_TOK; }
#define CIRCULARSTRING_TOK
74LINESTRING { return LINESTRING_TOK; }
#define LINESTRING_TOK
75POLYHEDRALSURFACE { return POLYHEDRALSURFACE_TOK; }
#define POLYHEDRALSURFACE_TOK
76TRIANGLE { return TRIANGLE_TOK; }
#define TRIANGLE_TOK
77TIN { return TIN_TOK; }
#define TIN_TOK
78POINT { return POINT_TOK; }
#define POINT_TOK
79EMPTY { return EMPTY_TOK; }
#define EMPTY_TOK
80
81Z|M|ZM {
82 LWDEBUG(5,"DIMENSIONALITY");
83 wkt_yylval.stringvalue = wkt_yytext;
84 return DIMENSIONALITY_TOK;
85 }
#define DIMENSIONALITY_TOK
char * stringvalue
86
87\‍( { LWDEBUG(5,"LBRACKET"); return LBRACKET_TOK; }
#define LBRACKET_TOK
88\‍) { LWDEBUG(5,"RBRACKET"); return RBRACKET_TOK; }
#define RBRACKET_TOK
89, { LWDEBUG(5,"COMMA"); return COMMA_TOK; }
#define COMMA_TOK
90\; { LWDEBUG(5,"SEMICOLON"); return SEMICOLON_TOK; }
#define SEMICOLON_TOK
91
92[ \t\n\r]+ { /* ignore whitespace */ LWDEBUG(5,"WHITESPACE"); }
93
94. { /* Error out and stop parsing on unknown/unexpected characters */
95 LWDEBUG(5,"UNKNOWN");
98 }
#define yyterminate()
99
100%%
101
103{
104 return (void *) lwalloc( size );
105}
106
107void *wkt_yyrealloc (void * ptr, yy_size_t size )
108{
109 return (void *) lwrealloc( (char *) ptr, size );
110}
111
112void wkt_yyfree (void * ptr )
113{
114 lwfree( (char *) ptr ); /* see wkt_yyrealloc() for (char *) cast */
115}
116
117/*
118* Set up the lexer!
119*/
120void wkt_lexer_init(char *src)
121{
123 wkt_yy_buf_state = wkt_yy_scan_string(src);
124}
125
126/*
127* Clean up the lexer!
128*/
130{
131 wkt_yy_delete_buffer(wkt_yy_buf_state);
132}
133
void * lwrealloc(void *mem, size_t size)
Definition lwutil.c:235
void * lwalloc(size_t size)
Definition lwutil.c:227
void lwfree(void *mem)
Definition lwutil.c:242
static int yy_init_globals(void)
size_t yy_size_t
void wkt_lexer_close()
void * wkt_yyrealloc(void *ptr, yy_size_t size)
void wkt_lexer_init(char *src)
void * wkt_yyalloc(yy_size_t size)
void wkt_yyfree(void *ptr)