%{ #include #include #include #include #include "gda-sql-delimiter.h" /* can conflict with L_SET defined in /usr/include/unistd.h */ #ifdef L_SET #undef L_SET #endif #include "parser.h" #warning "strings are limited to 2048 characters" #define MAX_STR_CONST 2048 char string_buf[MAX_STR_CONST]; char *string_buf_ptr; %} %option noyywrap %option yylineno %option caseless %x STRING %x TEXTUAL %% BEGIN(INITIAL); "select" {return L_SELECT;} "insert" {return L_INSERT;} "update" {return L_UPDATE;} "delete" {return L_DELETE;} "=" {return L_EQ;} [a-zA-Z0-9_,+-/|().!~*=]+ {gda_delimiterlval.str = g_strdup (gda_delimitertext); return L_IDENT;} [ \t\n\r] {;} \' {string_buf_ptr = string_buf; BEGIN(STRING);} \\' {*string_buf_ptr++='\\'; *string_buf_ptr++='\'';} \' {BEGIN(INITIAL); *string_buf_ptr = '\0'; gda_delimiterlval.str = g_strdup_printf ("'%s'", string_buf); return L_STRING; } \\n {*string_buf_ptr++='\n';} \\t {*string_buf_ptr++='\t';} \\r {*string_buf_ptr++='\r';} \\b {*string_buf_ptr++='\b';} \\f {*string_buf_ptr++='\f';} \\(.|\n) {*string_buf_ptr++=gda_delimitertext[0];} . {*string_buf_ptr++=gda_delimitertext[0];} "[" {return L_LSBRACKET;} "]" {return L_RSBRACKET;} ":name" {return L_PNAME;} ":descr" {return L_PDESCR;} ":type" {return L_PTYPE;} ":isparam" {return L_PISPARAM;} ":nullok" {return L_PNULLOK;} "##" {return L_UNSPECVAL;} \" {string_buf_ptr = string_buf; BEGIN(TEXTUAL);} \" {BEGIN(INITIAL); *string_buf_ptr = '\0'; gda_delimiterlval.str = g_strdup (string_buf); return L_TEXTUAL; } \\n {*string_buf_ptr++='\n';} \\t {*string_buf_ptr++='\t';} \\r {*string_buf_ptr++='\r';} \\b {*string_buf_ptr++='\b';} \\f {*string_buf_ptr++='\f';} \\(.|\n) {*string_buf_ptr++=gda_delimitertext[0];} . {*string_buf_ptr++=gda_delimitertext[0];} . {;} %%