%{ #include #include #include "esql.tab.h" #include "Database.hpp" using namespace std; extern Database * db; int state_buffer; string sql = ""; extern YY_BUFFER_STATE esql__scan_string (const char * yystr); extern int esql_parse (void); %} %option noyywrap %option nodefault %x SQL DECLARE %x EAT2COLON ws [ \t\r\v\f] wsnl [ \t\r\v\f\n] identifier [a-zA-Z_$][a-zA-Z_0-9$]* %% { EXEC{wsnl}+SQL{wsnl}+ { BEGIN SQL; } \{ { db->scope_push(); ECHO; } \} { db->scope_pop(); ECHO; } . { ECHO; } \n { ++yylineno; ECHO; } } { ; { BEGIN INITIAL; return END; } . { esql_lval.strval = yytext; return CHAR; } \n { ; } CONNECT{wsnl}+TO { return CONNECT; } AS { return AS; } BEGIN{wsnl}+DECLARE{wsnl}+SECTION{wsnl}*; { BEGIN DECLARE; return DECLARE_START; } } { const { ECHO; } // XXX: this is no good extern|static { ECHO; } {identifier} { ECHO; return IDENTIFIER; } \*|\[.*\] { ECHO; return PTR; } = { BEGIN EAT2COLON; ECHO; state_buffer = DECLARE; } {wsnl} { ECHO; } EXEC{wsnl}+SQL{wsnl}+END{wsnl}+DECLARE{wsnl}+SECTION{wsnl}*; { BEGIN INITIAL; return DECLARE_END; } } { ; { ECHO; BEGIN state_buffer; } .|\n { ECHO; } } %%