cat << EOF


%{
static int ign_kw(int yystate,int kw);
%}
/*
Generated by gen_lex
*/


%e 1000
%p 4000
%n 700
%k 200
%a 4000
%o 4200
%x comment
ws 	[ \t\n]+
ows 	[ \t\n]*
ident [a-zA-Z]+[a-zA-Z\_0-9]* 
int_num [0-9]+
char_value \'[^\']*\'|\"[^\"]*\"
schar_value \'[^\']*\'
%option yylineno
%%

<comment>"}"    {BEGIN INITIAL;}
<comment>.      ;
<comment>[\n]   ;
"{"      { BEGIN comment; yymore(); }
--.*$  {yymore();}
"DATETIME"[(]{char_value}[)] 								{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}

"DATETIME"[(]{int_num}[)] 									{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}

"DATETIME"[(][0-9][0-9][0-9][0-9]-[0-9][0-9][)] 						{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][)] 				{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" "[0-9][0-9][)] 			{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" "[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" "[0-9][0-9]":"[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" "[0-9][0-9]":"[0-9][0-9]":"[0-9][0-9][.]{int_num}[)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}

"DATETIME"[(][0-9][0-9]-[0-9][0-9][)] 				{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]-[0-9][0-9]" "[0-9][0-9][)] 			{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]-[0-9][0-9]" "[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]-[0-9][0-9]" "[0-9][0-9]":"[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]-[0-9][0-9]" "[0-9][0-9]":"[0-9][0-9]":"[0-9][0-9]"."{int_num}[)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}

"DATETIME"[(][0-9][0-9]" "[0-9][0-9][)] 			{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]" "[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]" "[0-9][0-9]":"[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]" "[0-9][0-9]":"[0-9][0-9]":"[0-9][0-9]"."{int_num}[)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}

"DATETIME"[(][0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]":"[0-9][0-9]":"[0-9][0-9][)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]":"[0-9][0-9]":"[0-9][0-9]"."{int_num}[)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}

"DATETIME"[(][0-9][0-9]":"[0-9][0-9]"."{int_num}[)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}
"DATETIME"[(][0-9][0-9]"."{int_num}[)] 	{ a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return DATETIME_VALUE;}


"INTERVAL("{char_value}")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);   return INTERVAL_VALUE;}
"INTERVAL("({int_num}|[0-9]*"."{int_num})")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);   return INTERVAL_VALUE;}
"INTERVAL("{int_num}"-"{int_num}")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return INTERVAL_VALUE;}
"INTERVAL("{int_num}" "{int_num}")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return INTERVAL_VALUE;}
"INTERVAL("{int_num}{int_num}":"{int_num}")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);   return INTERVAL_VALUE;}
"INTERVAL("{int_num}{int_num}":"{int_num}":"{int_num}")"   { a4gl_upshift(yytext); strcpy(yylval.str,yytext);   return INTERVAL_VALUE;}
"INTERVAL("{int_num}":"{int_num}[)]  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return INTERVAL_VALUE;}
"INTERVAL("{int_num}":"{int_num}":"[0-9][0-9]"."{int_num}")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);   return INTERVAL_VALUE;}
"INTERVAL("{int_num}":"[0-9][0-9]"."{int_num}")"  { a4gl_upshift(yytext); strcpy(yylval.str,yytext);   return INTERVAL_VALUE;}

"::" { return DOUBLE_COLON;}

EOF







grep "token" 2.reqd | awk '{print $2}' | (while read a
do
#echo $a >> /dev/tty
grep "^$a[ 	]" ../4glc/rules/data/kwords | awk '

function isPunct(x) {
if (x=="." || x=="(" || x==")" || x=="*" || x=="<" || x==">" || x=="!" || x=="=" ||x=="|") return 1;
return 0
}
/^DOUBLE_COLON/ {next}
/^DATETIME_VALUE/ {next}
/^INTERVAL_VALUE/ {next}
/^INTERVAL_VALUE/ {next}
/PLUS + +/ {next}
{
    #print "/* " $0 " */"
    printf("\n");
    if ($1=="SET_LOG") next;
    for (a=2;a<=NF;a++) {
       	if (a!=2) {
		pr_ws=0;
		
		if ($(a-1)=="." && $a=="*" ) { printf("{ows}"); pr_ws++; }  
		if ($(a-1)=="<ident>" && $a=="." ) { printf("{ows}"); pr_ws++; }  

		if (pr_ws==0 && (isPunct($(a-1)) || isPunct($(a-1)))) {
			 printf("{ows}"); pr_ws++;
		}

		if (!pr_ws) {
			printf("{ws}");
		}
	}
	printed=0;
	if ($a=="<ident>") {printf("{ident}");printed=1;}
	if ($a=="<int_num>") {printf("{int_num}");printed=1;}
	if ($a=="<char_value>") {printf("{char_value}");printed=1;}
	if (printed==0) {
        	printf "\"" $a "\""
	}
    }
    printf(" { if (ign_kw(yystate, %s)) REJECT; a4gl_upshift(yytext); strcpy(yylval.str,yytext);  return %s;} /* %d */\n",$1,$1,NR)
}
'




done)

cat << EOF

{ws}	;
[\n]	;
";"	{strcpy(yylval.str,";"); return SEMICOLON;}
"?"	{strcpy(yylval.str,"?"); return QUESTION_MARK;}
"?@@PARAM@@?"	{strcpy(yylval.str,"?"); return QUESTION_MARK;}
{ident} {strcpy(yylval.str,yytext);return NAMED;}

"!=" {  strcpy(yylval.str,yytext); return NOT_EQUAL;}
"<>" {  strcpy(yylval.str,yytext); return NOT_EQUAL;}
"<=" {  strcpy(yylval.str,yytext); return LESS_THAN_EQ;}
">=" {  strcpy(yylval.str,yytext); return GREATER_THAN_EQ;}
\"[^\"]*\" {  strcpy(yylval.str,yytext); return CHAR_VALUE;}
\"\" {  strcpy(yylval.str,yytext); return CHAR_VALUE;}
{schar_value}+ {  strcpy(yylval.str,yytext); return CHAR_VALUE;}
\'\' {  strcpy(yylval.str,yytext); return CHAR_VALUE;}
"@@VARIABLE[" 	{return MARK_VAR;}
"]@@" 		{return END_MARK_VAR;}


{int_num}  {strcpy(yylval.str, yytext); return(INT_VALUE);}
[0-9]+|[0-9]*\.[0-9]+   {strcpy(yylval.str, yytext); return(NUMBER_VALUE);}

. 	{strcpy(yylval.str,yytext);return CH;}

%%
#include "mk_sstates.c"
static int ign_kw(int yystate,int kw) {
        if (!SQLPARSE_allow_token_state(yystate,kw)) {
			return 1;
	} 
        return 0;

}

EOF


