scan_c.c.preserve
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:48k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /* A lexical scanner generated by flex */
  2. /* scanner skeleton version:
  3.  * $Header: /home/horse/u0/vern/flex/RCS/flex.skel,v 2.16 90/08/03 14:09:36 vern Exp Locker: vern $
  4.  */
  5. #define FLEX_SCANNER
  6. #include <stdio.h>
  7. /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
  8. #ifdef c_plusplus
  9. #ifndef __cplusplus
  10. #define __cplusplus
  11. #endif
  12. #endif
  13. #ifdef __cplusplus
  14. #include <stdlib.h>
  15. #include <osfcn.h>
  16. /* use prototypes in function declarations */
  17. #define YY_USE_PROTOS
  18. /* the "const" storage-class-modifier is valid */
  19. #define YY_USE_CONST
  20. #else /* ! __cplusplus */
  21. #ifdef __STDC__
  22. #ifdef __GNUC__
  23. #include <stddef.h>
  24. void *malloc( size_t );
  25. void free( void* );
  26. #else
  27. #include <stdlib.h>
  28. #endif /* __GNUC__ */
  29. #define YY_USE_PROTOS
  30. #define YY_USE_CONST
  31. #endif /* __STDC__ */
  32. #endif /* ! __cplusplus */
  33. #ifdef __TURBOC__
  34. #define YY_USE_CONST
  35. #endif
  36. #ifndef YY_USE_CONST
  37. #define const
  38. #endif
  39. #ifdef YY_USE_PROTOS
  40. #define YY_PROTO(proto) proto
  41. #else
  42. #define YY_PROTO(proto) ()
  43. /* we can't get here if it's an ANSI C compiler, or a C++ compiler,
  44.  * so it's got to be a K&R compiler, and therefore there's no standard
  45.  * place from which to include these definitions
  46.  */
  47. char *malloc();
  48. int free();
  49. int read();
  50. #endif
  51. /* amount of stuff to slurp up with each read */
  52. #ifndef YY_READ_BUF_SIZE
  53. #define YY_READ_BUF_SIZE 8192
  54. #endif
  55. /* returned upon end-of-file */
  56. #define YY_END_TOK 0
  57. /* copy whatever the last rule matched to the standard output */
  58. /* cast to (char *) is because for 8-bit chars, yytext is (unsigned char *) */
  59. /* this used to be an fputs(), but since the string might contain NUL's,
  60.  * we now use fwrite()
  61.  */
  62. #define ECHO (void) fwrite( (char *) yytext, yyleng, 1, yyout )
  63. /* gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
  64.  * is returned in "result".
  65.  */
  66. #define YY_INPUT(buf,result,max_size) 
  67. if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) 
  68.     YY_FATAL_ERROR( "read() in flex scanner failed" );
  69. #define YY_NULL 0
  70. /* no semi-colon after return; correct usage is to write "yyterminate();" -
  71.  * we don't want an extra ';' after the "return" because that will cause
  72.  * some compilers to complain about unreachable statements.
  73.  */
  74. #define yyterminate() return ( YY_NULL )
  75. /* report a fatal error */
  76. /* The funky do-while is used to turn this macro definition into
  77.  * a single C statement (which needs a semi-colon terminator).
  78.  * This avoids problems with code like:
  79.  *
  80.  *  if ( something_happens )
  81.  * YY_FATAL_ERROR( "oops, the something happened" );
  82.  * else
  83.  * everything_okay();
  84.  *
  85.  * Prior to using the do-while the compiler would get upset at the
  86.  * "else" because it interpreted the "if" statement as being all
  87.  * done when it reached the ';' after the YY_FATAL_ERROR() call.
  88.  */
  89. #define YY_FATAL_ERROR(msg) 
  90. do 
  91. (void) fputs( msg, stderr ); 
  92. (void) putc( 'n', stderr ); 
  93. exit( 1 ); 
  94. while ( 0 )
  95. /* default yywrap function - always treat EOF as an EOF */
  96. #define yywrap() 1
  97. /* enter a start condition.  This macro really ought to take a parameter,
  98.  * but we do it the disgusting crufty way forced on us by the ()-less
  99.  * definition of BEGIN
  100.  */
  101. #define BEGIN yy_start = 1 + 2 *
  102. /* action number for EOF rule of a given start state */
  103. #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
  104. /* special action meaning "start processing a new file" */
  105. #define YY_NEW_FILE 
  106. do 
  107. yy_init_buffer( yy_current_buffer, yyin ); 
  108. yy_load_buffer_state(); 
  109. while ( 0 )
  110. /* default declaration of generated scanner - a define so the user can
  111.  * easily add parameters
  112.  */
  113. #define YY_DECL int yylex YY_PROTO(( void )) 
  114. /* code executed at the end of each rule */
  115. #define YY_BREAK break;
  116. #define YY_END_OF_BUFFER_CHAR 0
  117. #ifndef YY_BUF_SIZE
  118. #define YY_BUF_SIZE (YY_READ_BUF_SIZE * 2) /* size of default input buffer */
  119. #endif
  120. typedef struct yy_buffer_state *YY_BUFFER_STATE;
  121. #define FLEX_DEBUG
  122. #define YY_CHAR unsigned char
  123. # line 1 "scan_c.l"
  124. #define INITIAL 0
  125. # line 2 "scan_c.l"
  126. /*
  127.  *  scan_c.l - scanner-extractor of GNU SQL/C compiler
  128.  *            
  129.  *  This file is a part of GNU SQL Server
  130.  *
  131.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  132.  *  Developed at the Institute of System Programming
  133.  *  This file is written by Michael Kimelman.
  134.  * 
  135.  *  This program is free software; you can redistribute it and/or modify
  136.  *  it under the terms of the GNU General Public License as published by
  137.  *  the Free Software Foundation; either version 2 of the License, or
  138.  *  (at your option) any later version.
  139.  *
  140.  *  This program is distributed in the hope that it will be useful,
  141.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  142.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  143.  *  GNU General Public License for more details.
  144.  *
  145.  *  You should have received a copy of the GNU General Public License
  146.  *  along with this program; if not, write to the Free Software
  147.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  148.  *
  149.  *  Contact:  gss@ispras.ru
  150.  *
  151.  */
  152. /* $Id: scan_c.l,v 1.247 1997/04/21 14:26:13 kml Exp $ */
  153. #include "xmem.h"
  154. #include "gsqltrn.h"
  155. #include "sql_decl.h"
  156. #include "procname.h"
  157. #include <assert.h>
  158. #define SWITCH_COND(cond)  { save_condition();BEGIN(cond);}
  159. #define REST_COND            rest_condition();
  160. #define SCANNER_NAME      yylex_extractor
  161. #ifdef YY_DECL
  162. #  undef YY_DECL
  163. #endif
  164. #define YY_DECL           int SCANNER_NAME(void)
  165. YY_DECL;
  166. #define YY_USER_INIT      { BEGIN(START_CONDITION); line_num=1; }
  167. #define YY_USER_ACTION    if(yy_flex_debug){ 
  168.   fprintf(stderr,"nCurrent lex state=%dn",yy_start);}
  169. #define SQL_PROC(code)  if(code){file_pos=line_num; return 1<<code;}
  170. static str_buf c_scanner_buffer={0,0,NULL};
  171. #define sql_str(s,l)  buffer_string(&c_scanner_buffer,s,l)
  172. /* defined in main routine */
  173. int open_file(FILE **f,char *ext);
  174. static void  save_condition __P((void));
  175. static void  rest_condition __P((void));
  176. #ifndef START_CONDITION
  177. #  define START_CONDITION   scan_mode_state
  178. #endif
  179. #define BEGIN_MODE(v)    { BEGIN(v); scan_mode_state=v; }
  180. static char *statement_scanner_buffer=NULL;
  181. static int   line_num=1;
  182. static int   io_diff=0;
  183. static char *progname_out=NULL;
  184. static int   bline=1; 
  185. #define APPEND_BUFFER { sql_str(yytext,yyleng);} 
  186. #define POP_BUFFER pop_cl_buffer()
  187. void
  188. pop_cl_buffer(void)
  189. {
  190.   register char *b=sql_str(NULL,0);
  191.   statement_scanner_buffer=b?savestring(b):NULL;
  192. }
  193. #define C_lang 1
  194. #define c_comment 2
  195. #define C_str 3
  196. #define ESQL 4
  197. #define MOD 5
  198. #define SCH 6
  199. #define SQL 7
  200. #define SQL_str 8
  201. #define SQL_ident 9
  202. #define SQL_comment 10
  203. # line 100 "scan_c.l"
  204. /* done after the current pattern has been matched and before the
  205.  * corresponding action - sets up yytext
  206.  */
  207. #define YY_DO_BEFORE_ACTION 
  208. yytext = yy_bp; 
  209. yyleng = yy_cp - yy_bp; 
  210. yy_hold_char = *yy_cp; 
  211. *yy_cp = ''; 
  212. yy_c_buf_p = yy_cp;
  213. #define EOB_ACT_CONTINUE_SCAN 0
  214. #define EOB_ACT_END_OF_FILE 1
  215. #define EOB_ACT_LAST_MATCH 2
  216. /* return all but the first 'n' matched characters back to the input stream */
  217. #define yyless(n) 
  218. do 
  219. /* undo effects of setting up yytext */ 
  220. *yy_cp = yy_hold_char; 
  221. yy_c_buf_p = yy_cp = yy_bp + n; 
  222. YY_DO_BEFORE_ACTION; /* set up yytext again */ 
  223. while ( 0 )
  224. #define unput(c) yyunput( c, yytext )
  225. struct yy_buffer_state
  226.     {
  227.     FILE *yy_input_file;
  228.     YY_CHAR *yy_ch_buf; /* input buffer */
  229.     YY_CHAR *yy_buf_pos; /* current position in input buffer */
  230.     /* size of input buffer in bytes, not including room for EOB characters */
  231.     int yy_buf_size;
  232.     /* number of characters read into yy_ch_buf, not including EOB characters */
  233.     int yy_n_chars;
  234.     int yy_eof_status; /* whether we've seen an EOF on this buffer */
  235. #define EOF_NOT_SEEN 0
  236.     /* "pending" happens when the EOF has been seen but there's still
  237.      * some text process
  238.      */
  239. #define EOF_PENDING 1
  240. #define EOF_DONE 2
  241.     };
  242. static YY_BUFFER_STATE yy_current_buffer;
  243. /* we provide macros for accessing buffer states in case in the
  244.  * future we want to put the buffer states in a more general
  245.  * "scanner state"
  246.  */
  247. #define YY_CURRENT_BUFFER yy_current_buffer
  248. /* yy_hold_char holds the character lost when yytext is formed */
  249. static YY_CHAR yy_hold_char;
  250. static int yy_n_chars; /* number of characters read into yy_ch_buf */
  251. #ifndef YY_USER_ACTION
  252. #define YY_USER_ACTION
  253. #endif
  254. #ifndef YY_USER_INIT
  255. #define YY_USER_INIT
  256. #endif
  257. extern YY_CHAR *yytext;
  258. extern int yyleng;
  259. extern FILE *yyin, *yyout;
  260. YY_CHAR *yytext;
  261. int yyleng;
  262. FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
  263. #define YY_END_OF_BUFFER 46
  264. typedef int yy_state_type;
  265. static const short int yy_accept[158] =
  266.     {   0,
  267.         0,    0,    0,    0,   12,   12,    0,    0,    0,    0,
  268.         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  269.         0,    0,   46,   44,   27,    6,   44,   44,   44,   44,
  270.        44,   27,   44,   44,   45,    3,   45,    5,    5,    3,
  271.         5,    5,    5,   12,   14,   13,   10,   11,    7,   10,
  272.        33,   28,   32,   30,   29,   33,   33,   17,   21,   33,
  273.        33,   33,   33,   33,   33,   33,   33,   33,   45,   45,
  274.        45,   45,   36,   35,   37,   39,   38,   41,   42,   43,
  275.        27,   31,    0,    0,    0,    0,   27,    0,    0,    4,
  276.         1,    0,    2,    0,   12,   13,   13,   15,   10,    9,
  277.         8,   28,   16,    0,    0,    0,    0,    0,   36,   34,
  278.        39,   40,    0,    0,    0,    0,    0,    0,    0,    0,
  279.         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  280.         0,    0,    0,   22,    0,    0,    0,    0,    0,    0,
  281.        23,    0,    0,    0,    0,   24,    0,   18,    0,    0,
  282.         0,   25,   19,    0,    0,   20,    0
  283.     } ;
  284. static const YY_CHAR yy_ec[256] =
  285.     {   0,
  286.         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
  287.         1,    4,    5,    1,    1,    1,    1,    1,    1,    1,
  288.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  289.         1,    2,    1,    6,    1,    7,    1,    1,    8,    1,
  290.         1,    9,    1,    1,   10,    1,   11,   12,   12,   12,
  291.        12,   12,   12,   12,   12,   12,   12,    1,   13,    1,
  292.         1,    1,    1,    1,   15,   12,   16,   17,   18,   12,
  293.        19,   20,   21,   12,   22,   23,   24,   25,   26,   27,
  294.        28,   29,   30,   31,   32,   33,   34,   35,   12,   12,
  295.         1,   14,    1,    1,   12,    1,   15,   12,   16,   17,
  296.        18,   12,   19,   20,   21,   12,   22,   23,   24,   25,
  297.        26,   27,   28,   29,   30,   31,   32,   33,   34,   35,
  298.        12,   12,    1,    1,    1,    1,    1,    1,    1,    1,
  299.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  300.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  301.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  302.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  303.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  304.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  305.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  306.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  307.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  308.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  309.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  310.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  311.         1,    1,    1,    1,    1
  312.     } ;
  313. static const YY_CHAR yy_meta[36] =
  314.     {   0,
  315.         1,    1,    2,    1,    1,    3,    1,    4,    5,    1,
  316.         1,    6,    1,    1,    6,    6,    6,    6,    6,    6,
  317.         6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
  318.         6,    6,    6,    6,    6
  319.     } ;
  320. static const short int yy_base[180] =
  321.     {   0,
  322.         0,   23,    2,   46,    3,   11,   15,   28,   63,   75,
  323.        76,   81,   98,    0,   20,   39,   20,   42,   16,   40,
  324.       317,  316,  318,  321,    5,  321,  307,  293,  286,  285,
  325.       287,  100,   56,  277,  321,  321,  302,  321,   73,  321,
  326.       117,  301,  274,    0,  321,   59,  321,  321,  321,   93,
  327.       321,   80,  321,  321,  321,  298,  298,  321,  321,  288,
  328.       279,  275,  280,  273,  272,  271,  281,  277,  274,  267,
  329.       266,  268,    0,  321,  285,    0,  321,  286,  321,  321,
  330.        93,  321,  260,  272,  263,  271,  121,  131,  252,  321,
  331.       321,  268,  321,  122,    0,  101,  132,  321,  321,  321,
  332.       321,  140,  321,  269,  258,  268,  249,  250,    0,  321,
  333.         0,  321,  262,  264,  251,  245,  260,  252,  258,  248,
  334.       246,  251,  241,  200,    0,  207,  224,  209,  194,  178,
  335.       184,    0,  120,  321,  119,   60,  102,  113,    0,  108,
  336.       321,    0,   88,   88,   69,  321,    0,  321,   49,    0,
  337.        22,  321,  321,   14,    0,  321,  321,  144,  150,  156,
  338.       162,  168,  174,  180,  186,  192,  198,  204,  210,  216,
  339.       222,  228,  234,  239,  244,  249,  254,  259,  264
  340.     } ;
  341. static const short int yy_def[180] =
  342.     {   0,
  343.       158,  158,  159,  160,  161,  161,  162,  162,  163,  163,
  344.        10,   10,   10,   13,  159,  159,  164,  164,  165,  165,
  345.       166,  166,  157,  157,  157,  157,  157,  157,  157,  157,
  346.       157,  157,  167,  157,  157,  157,  157,  157,  157,  157,
  347.       167,  157,  157,  168,  157,  169,  157,  157,  157,  170,
  348.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  349.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  350.       157,  157,  171,  157,  157,  172,  157,  157,  157,  157,
  351.       157,  157,  157,  157,  157,  157,  157,  167,  157,  157,
  352.       157,  157,  157,  157,  168,  169,  169,  157,  157,  157,
  353.       157,  157,  157,  157,  157,  157,  157,  157,  171,  157,
  354.       172,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  355.       157,  157,  157,  157,  173,  157,  157,  157,  157,  157,
  356.       157,  174,  157,  157,  157,  157,  157,  157,  175,  157,
  357.       157,  176,  157,  157,  157,  157,  177,  157,  157,  178,
  358.       157,  157,  157,  157,  179,  157,    0,  157,  157,  157,
  359.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  360.       157,  157,  157,  157,  157,  157,  157,  157,  157
  361.     } ;
  362. static const short int yy_nxt[357] =
  363.     {   0,
  364.       157,   25,   26,   25,   26,   45,   81,   36,   81,   27,
  365.       157,   46,   37,   45,   28,   29,   30,   48,   77,   46,
  366.        49,   78,   74,   31,   32,   26,   25,   75,   50,   33,
  367.        48,  155,   27,   49,   69,   70,   71,   28,   29,   30,
  368.        34,   50,   77,   72,   74,   78,   31,   39,   26,   75,
  369.       154,   40,   41,   69,   70,   71,   42,   91,   91,   91,
  370.        91,  136,   72,   43,   52,   53,   52,   97,   54,   98,
  371.        55,   88,   56,   57,   94,   58,   52,   53,   52,   88,
  372.        54,  102,   55,  102,   56,   57,   51,   58,   59,  143,
  373.        89,   51,   60,   59,   81,  100,   81,   60,  101,   61,
  374.       151,   87,   62,   81,   61,  150,   88,   62,   51,  157,
  375.        51,  157,   63,   64,   65,  149,   66,   89,   91,   91,
  376.        91,   91,   87,   94,   81,  147,   67,   88,   88,  145,
  377.       144,   68,   91,   91,   91,   91,  142,  125,   89,   89,
  378.        97,  102,   98,  102,   24,   24,   24,   24,   24,   24,
  379.        35,   35,   35,   35,   35,   35,   38,   38,   38,   38,
  380.        38,   38,   44,   44,   44,   44,   44,   44,   47,   47,
  381.        47,   47,   47,   47,   51,   51,   51,   51,   51,   51,
  382.        73,   73,   73,   73,   73,   73,   76,   76,   76,   76,
  383.        76,   76,   79,   79,   79,   79,   79,   79,   90,   90,
  384.        90,   90,   90,   90,   95,  140,   95,   95,  139,   95,
  385.        96,  138,   96,   96,   96,   96,   99,   99,   99,   99,
  386.        99,   99,  109,  137,  109,  136,  109,  109,  111,  135,
  387.       133,  111,  111,  111,  134,  134,  134,  134,  134,  141,
  388.       141,  141,  141,  141,  146,  146,  146,  146,  146,  148,
  389.       148,  148,  148,  148,  152,  152,  152,  152,  152,  153,
  390.       153,  153,  153,  153,  156,  156,  156,  156,  156,  125,
  391.       132,  131,  130,  129,  128,  127,  126,  125,  124,  123,
  392.       122,  121,  120,  119,  118,  117,   92,  116,  115,  114,
  393.       113,  112,  110,   86,   85,   84,   83,  108,  107,  106,
  394.        85,   84,   83,  105,   86,  104,  103,   82,   92,   93,
  395.        93,   92,   86,   85,   84,   83,   82,  157,   80,   80,
  396.        23,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  397.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  398.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  399.       157,  157,  157,  157,  157,  157
  400.     } ;
  401. static const short int yy_chk[357] =
  402.     {   0,
  403.         0,    1,    1,    1,    3,    5,   25,    3,   25,    1,
  404.         0,    5,    3,    6,    1,    1,    1,    7,   19,    6,
  405.         7,   19,   17,    1,    2,    2,    2,   17,    7,    2,
  406.         8,  154,    2,    8,   15,   15,   15,    2,    2,    2,
  407.         2,    8,   20,   15,   18,   20,    2,    4,    4,   18,
  408.       151,    4,    4,   16,   16,   16,    4,   33,   33,   33,
  409.        33,  136,   16,    4,    9,    9,    9,   46,    9,   46,
  410.         9,  149,    9,    9,   39,    9,   10,   10,   10,   39,
  411.        10,   52,   10,   52,   10,   10,   11,   10,   11,  136,
  412.        39,   12,   11,   12,   81,   50,   81,   12,   50,   11,
  413.       145,   32,   11,   32,   12,  144,   32,   12,   13,   96,
  414.        13,   96,   13,   13,   13,  143,   13,   32,   41,   41,
  415.        41,   41,   87,   94,   87,  140,   13,   87,   94,  138,
  416.       137,   13,   88,   88,   88,   88,  135,  133,   87,   94,
  417.        97,  102,   97,  102,  158,  158,  158,  158,  158,  158,
  418.       159,  159,  159,  159,  159,  159,  160,  160,  160,  160,
  419.       160,  160,  161,  161,  161,  161,  161,  161,  162,  162,
  420.       162,  162,  162,  162,  163,  163,  163,  163,  163,  163,
  421.       164,  164,  164,  164,  164,  164,  165,  165,  165,  165,
  422.       165,  165,  166,  166,  166,  166,  166,  166,  167,  167,
  423.       167,  167,  167,  167,  168,  131,  168,  168,  130,  168,
  424.       169,  129,  169,  169,  169,  169,  170,  170,  170,  170,
  425.       170,  170,  171,  128,  171,  127,  171,  171,  172,  126,
  426.       124,  172,  172,  172,  173,  173,  173,  173,  173,  174,
  427.       174,  174,  174,  174,  175,  175,  175,  175,  175,  176,
  428.       176,  176,  176,  176,  177,  177,  177,  177,  177,  178,
  429.       178,  178,  178,  178,  179,  179,  179,  179,  179,  123,
  430.       122,  121,  120,  119,  118,  117,  116,  115,  114,  113,
  431.       108,  107,  106,  105,  104,   92,   89,   86,   85,   84,
  432.        83,   78,   75,   72,   71,   70,   69,   68,   67,   66,
  433.        65,   64,   63,   62,   61,   60,   57,   56,   43,   42,
  434.        37,   34,   31,   30,   29,   28,   27,   23,   22,   21,
  435.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  436.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  437.       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  438.       157,  157,  157,  157,  157,  157
  439.     } ;
  440. static yy_state_type yy_last_accepting_state;
  441. static YY_CHAR *yy_last_accepting_cpos;
  442. extern int yy_flex_debug;
  443. int yy_flex_debug = 1;
  444. static const short int yy_rule_linenum[45] =
  445.     {   0,
  446.       114,  119,  124,  128,  129,  130,  134,  135,  136,  137,
  447.       138,  146,  147,  148,  151,  161,  169,  178,  182,  187,
  448.       193,  207,  219,  223,  236,  236,  250,  251,  252,  256,
  449.       260,  263,  267,  273,  274,  279,  280,  287,  292,  293,
  450.       294,  301,  302,  306
  451.     } ;
  452. /* the intent behind this definition is that it'll catch
  453.  * any uses of REJECT which flex missed
  454.  */
  455. #define REJECT reject_used_but_not_detected
  456. #define yymore() yymore_used_but_not_detected
  457. #define YY_MORE_ADJ 0
  458. /* these variables are all declared out here so that section 3 code can
  459.  * manipulate them
  460.  */
  461. /* points to current character in buffer */
  462. static YY_CHAR *yy_c_buf_p = (YY_CHAR *) 0;
  463. static int yy_init = 1; /* whether we need to initialize */
  464. static int yy_start = 0; /* start state number */
  465. /* flag which is used to allow yywrap()'s to do buffer switches
  466.  * instead of setting up a fresh yyin.  A bit of a hack ...
  467.  */
  468. static int yy_did_buffer_switch_on_eof;
  469. static yy_state_type yy_get_previous_state YY_PROTO(( void ));
  470. static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
  471. static int yy_get_next_buffer YY_PROTO(( void ));
  472. static void yyunput YY_PROTO(( YY_CHAR c, YY_CHAR *buf_ptr ));
  473. void yyrestart YY_PROTO(( FILE *input_file ));
  474. void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
  475. void yy_load_buffer_state YY_PROTO(( void ));
  476. YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
  477. void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  478. void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
  479. #define yy_new_buffer yy_create_buffer
  480. #ifdef __cplusplus
  481. static int yyinput YY_PROTO(( void ));
  482. #else
  483. static int input YY_PROTO(( void ));
  484. #endif
  485. YY_DECL
  486.     {
  487.     register yy_state_type yy_current_state;
  488.     register YY_CHAR *yy_cp, *yy_bp;
  489.     register int yy_act;
  490.     static int esql_caller = 0;
  491.     static int rout_title  = 0;
  492.     int comment_caller     = 0;
  493.     int first_start        = yy_init;
  494.     int with_grant_options = 0;
  495.     
  496.     #ifdef FLEX_DEBUG
  497.       yy_flex_debug=client_scanner_debug;
  498.     #endif
  499.   /*********************************************
  500.    *                C lexics                   *
  501.    *********************************************/
  502.     if ( yy_init )
  503. {
  504. YY_USER_INIT;
  505. if ( ! yy_start )
  506.     yy_start = 1; /* first start state */
  507. if ( ! yyin )
  508.     yyin = stdin;
  509. if ( ! yyout )
  510.     yyout = stdout;
  511. if ( yy_current_buffer )
  512.     yy_init_buffer( yy_current_buffer, yyin );
  513. else
  514.     yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
  515. yy_load_buffer_state();
  516. yy_init = 0;
  517. }
  518.     while ( 1 ) /* loops until end-of-file is reached */
  519. {
  520. yy_cp = yy_c_buf_p;
  521. /* support of yytext */
  522. *yy_cp = yy_hold_char;
  523. /* yy_bp points to the position in yy_ch_buf of the start of the
  524.  * current run.
  525.  */
  526. yy_bp = yy_cp;
  527. yy_current_state = yy_start;
  528. if ( yy_bp[-1] == 'n' )
  529.     ++yy_current_state;
  530. yy_match:
  531. do
  532.     {
  533.     register YY_CHAR yy_c = yy_ec[*yy_cp];
  534.     if ( yy_accept[yy_current_state] )
  535. {
  536. yy_last_accepting_state = yy_current_state;
  537. yy_last_accepting_cpos = yy_cp;
  538. }
  539.     while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  540. {
  541. yy_current_state = yy_def[yy_current_state];
  542. if ( yy_current_state >= 158 )
  543.     yy_c = yy_meta[yy_c];
  544. }
  545.     yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
  546.     ++yy_cp;
  547.     }
  548. while ( yy_current_state != 157 );
  549. yy_cp = yy_last_accepting_cpos;
  550. yy_current_state = yy_last_accepting_state;
  551. yy_find_action:
  552. yy_act = yy_accept[yy_current_state];
  553. YY_DO_BEFORE_ACTION;
  554. YY_USER_ACTION;
  555. do_action: /* this label is used only to access EOF actions */
  556. if ( yy_flex_debug )
  557.     {
  558.     if ( yy_act == 0 )
  559. fprintf( stderr, "--scanner backtrackingn" );
  560.     else if ( yy_act < 45 )
  561. fprintf( stderr, "--accepting rule at line %d ("%s")n",
  562.          yy_rule_linenum[yy_act], yytext );
  563.     else if ( yy_act == 45 )
  564. fprintf( stderr, "--accepting default rule ("%s")n",
  565.          yytext );
  566.     else if ( yy_act == 46 )
  567. fprintf( stderr, "--(end of buffer or a NUL)n" );
  568.     else
  569. fprintf( stderr, "--EOFn" );
  570.     }
  571. switch ( yy_act )
  572.     {
  573.     case 0: /* must backtrack */
  574.     /* undo the effects of YY_DO_BEFORE_ACTION */
  575.     *yy_cp = yy_hold_char;
  576.     yy_cp = yy_last_accepting_cpos;
  577.     yy_current_state = yy_last_accepting_state;
  578.     goto yy_find_action;
  579. case 1:
  580. # line 114 "scan_c.l"
  581. {
  582.                           esql_caller=C_lang;
  583.                           bline=line_num;
  584.                           BEGIN_MODE(ESQL);
  585. }
  586. YY_BREAK
  587. case 2:
  588. # line 119 "scan_c.l"
  589. {
  590.                           ECHO;
  591.   comment_caller=C_lang;
  592.   BEGIN_MODE(c_comment);
  593. }
  594. YY_BREAK
  595. case 3:
  596. # line 124 "scan_c.l"
  597. {
  598.                           ECHO;
  599.   BEGIN_MODE(C_str);
  600. }
  601. YY_BREAK
  602. case 4:
  603. # line 129 "scan_c.l"
  604. case 5:
  605. # line 129 "scan_c.l"
  606. { ECHO; }
  607. YY_BREAK
  608. case 6:
  609. # line 130 "scan_c.l"
  610. { ECHO; line_num++; }
  611. YY_BREAK
  612.   /*********************************************
  613.    *               C string recognizer         *
  614.    *********************************************/
  615. case 7:
  616. # line 134 "scan_c.l"
  617. { ECHO; BEGIN_MODE(C_lang); }
  618. YY_BREAK
  619. case 8:
  620. # line 135 "scan_c.l"
  621. { ECHO; }
  622. YY_BREAK
  623. case 9:
  624. # line 136 "scan_c.l"
  625. { ECHO; ++line_num; }
  626. YY_BREAK
  627. case 10:
  628. # line 137 "scan_c.l"
  629. { ECHO; }
  630. YY_BREAK
  631. case 11:
  632. # line 138 "scan_c.l"
  633.                            ECHO;
  634.                            yyerror("Unterminated C string");
  635.                            BEGIN_MODE(C_lang);
  636.                          }
  637. YY_BREAK
  638.   /*********************************************
  639.    *             C comment recornizer          *
  640.    *********************************************/
  641. case 12:
  642. # line 146 "scan_c.l"
  643. { if (comment_caller == C_lang) { ECHO; } }
  644. YY_BREAK
  645. case 13:
  646. # line 147 "scan_c.l"
  647. { if (comment_caller == C_lang) { ECHO; } }
  648. YY_BREAK
  649. case 14:
  650. # line 148 "scan_c.l"
  651. { if (comment_caller == C_lang) { ECHO; }
  652.                               line_num++;
  653.     }
  654. YY_BREAK
  655. case 15:
  656. # line 151 "scan_c.l"
  657. { if (comment_caller == C_lang)
  658. {
  659.   ECHO; 
  660. }
  661.       BEGIN_MODE(comment_caller);
  662.     }
  663. YY_BREAK
  664.   /*********************************************
  665.    *        lexics of embedded SQL in C        *
  666.    *********************************************/
  667. case 16:
  668. # line 161 "scan_c.l"
  669. { if(esql_caller==C_lang)
  670.     {
  671.       comment_caller=ESQL;
  672.       BEGIN_MODE(c_comment);
  673.     }
  674.                           else
  675.     yyerror("Lex: Unrecognizable literal'/*'n");
  676. }
  677. YY_BREAK
  678. case 17:
  679. # line 169 "scan_c.l"
  680.                           BEGIN_MODE(esql_caller);
  681.   POP_BUFFER;
  682.   SQL_PROC(ESQL); 
  683. }
  684. YY_BREAK
  685.   /*********************************************
  686.    *          embedded SQL lexics              *
  687.    *********************************************/
  688. case 18:
  689. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  690. yy_c_buf_p = yy_cp = yy_bp + 6;
  691. YY_DO_BEFORE_ACTION; /* set up yytext again */
  692. # line 178 "scan_c.l"
  693. {
  694.                            BEGIN_MODE(MOD);
  695.    APPEND_BUFFER;
  696.  }
  697. YY_BREAK
  698. case 19:
  699. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  700. yy_c_buf_p = yy_cp = yy_bp + 7;
  701. YY_DO_BEFORE_ACTION; /* set up yytext again */
  702. # line 182 "scan_c.l"
  703.                            POP_BUFFER;
  704.    APPEND_BUFFER;
  705.    SQL_PROC(MOD);
  706.  }
  707. YY_BREAK
  708. case 20:
  709. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  710. yy_c_buf_p = yy_cp = yy_bp + 9;
  711. YY_DO_BEFORE_ACTION; /* set up yytext again */
  712. # line 187 "scan_c.l"
  713. {
  714.    rout_title=1;
  715.    POP_BUFFER;
  716.    APPEND_BUFFER;
  717.    SQL_PROC(MOD);
  718.  }
  719. YY_BREAK
  720. case 21:
  721. # line 193 "scan_c.l"
  722. {
  723.                            APPEND_BUFFER;
  724.    if(rout_title)
  725.      rout_title=0;
  726.    else
  727.      {
  728.        POP_BUFFER;
  729.        SQL_PROC(MOD);
  730.      } 
  731.  }
  732. YY_BREAK
  733.   /*********************************************
  734.    *          clean  SQL SCH lexic             *
  735.    *********************************************/
  736. case 22:
  737. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  738. yy_c_buf_p = yy_cp -= 1;
  739. YY_DO_BEFORE_ACTION; /* set up yytext again */
  740. # line 207 "scan_c.l"
  741. {
  742.                             {
  743.                               BEGIN_MODE(SCH);
  744.                               POP_BUFFER;
  745.                               APPEND_BUFFER;
  746.                               if(first_start)
  747.                                 first_start=0;
  748.                               else
  749.                                 {
  750.                                   SQL_PROC(SCH);
  751.                                 }
  752.                             }                    }
  753. YY_BREAK
  754. case 23:
  755. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  756. yy_c_buf_p = yy_cp = yy_bp + 4;
  757. YY_DO_BEFORE_ACTION; /* set up yytext again */
  758. # line 219 "scan_c.l"
  759. {
  760.    APPEND_BUFFER;
  761.                            with_grant_options=1;
  762.  }
  763. YY_BREAK
  764. case 24:
  765. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  766. yy_c_buf_p = yy_cp = yy_bp + 5;
  767. YY_DO_BEFORE_ACTION; /* set up yytext again */
  768. # line 223 "scan_c.l"
  769. {
  770.                            if(with_grant_options)
  771.                              {
  772.        APPEND_BUFFER;
  773.        with_grant_options=0;
  774.      }
  775.                            else
  776.                              {
  777.        POP_BUFFER;
  778.        APPEND_BUFFER;
  779.        SQL_PROC(SCH);
  780.      }
  781.  }
  782. YY_BREAK
  783. case 25:
  784. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  785. yy_c_buf_p = yy_cp = yy_bp + 6;
  786. YY_DO_BEFORE_ACTION; /* set up yytext again */
  787. # line 236 "scan_c.l"
  788. {
  789.                            POP_BUFFER;
  790.    APPEND_BUFFER;
  791.    SQL_PROC(SCH);
  792.  }
  793. YY_BREAK
  794. case YY_STATE_EOF(SCH):
  795. # line 241 "scan_c.l"
  796. {
  797.                            POP_BUFFER;
  798.                            BEGIN(INITIAL);
  799.    SQL_PROC(SCH);
  800.  }
  801. YY_BREAK
  802.   /*********************************************
  803.    *          common SQL  keywords             *
  804.    *********************************************/
  805. case 27:
  806. # line 250 "scan_c.l"
  807. /* do nothing */;
  808. YY_BREAK
  809. case 28:
  810. # line 251 "scan_c.l"
  811. { APPEND_BUFFER; }
  812. YY_BREAK
  813. case 29:
  814. # line 252 "scan_c.l"
  815. {
  816.                            APPEND_BUFFER;
  817.    SWITCH_COND(SQL_str);
  818.  }
  819. YY_BREAK
  820. case 30:
  821. # line 256 "scan_c.l"
  822. {
  823.                            APPEND_BUFFER;
  824.    SWITCH_COND(SQL_ident);
  825.  }
  826. YY_BREAK
  827. case 31:
  828. # line 260 "scan_c.l"
  829. {
  830.                            SWITCH_COND(SQL_comment);  
  831.  }
  832. YY_BREAK
  833. case 32:
  834. # line 263 "scan_c.l"
  835. {
  836.                            APPEND_BUFFER;
  837.    line_num++; 
  838.  }
  839. YY_BREAK
  840. case 33:
  841. # line 267 "scan_c.l"
  842.                            APPEND_BUFFER;
  843.  }
  844. YY_BREAK
  845.   /*********************************************
  846.    *             SQL string recognizer         *
  847.    *********************************************/
  848. case 34:
  849. # line 273 "scan_c.l"
  850. { APPEND_BUFFER; }
  851. YY_BREAK
  852. case 35:
  853. # line 274 "scan_c.l"
  854. {
  855.                            yyerror(" Unterminated SQL string ");
  856.            line_num++; 
  857.    REST_COND;
  858.          }
  859. YY_BREAK
  860. case 36:
  861. # line 279 "scan_c.l"
  862. { APPEND_BUFFER; }
  863. YY_BREAK
  864. case 37:
  865. # line 280 "scan_c.l"
  866. {
  867.                            APPEND_BUFFER;
  868.                            REST_COND;
  869.  }
  870. YY_BREAK
  871.   /*********************************************
  872.    *             SQL string recognizer         *
  873.    *********************************************/
  874. case 38:
  875. # line 287 "scan_c.l"
  876. {
  877.                            yyerror(" Unterminated SQL identifier ");
  878.            line_num++; 
  879.    REST_COND;
  880.          }
  881. YY_BREAK
  882. case 39:
  883. # line 292 "scan_c.l"
  884. { APPEND_BUFFER; }
  885. YY_BREAK
  886. case 40:
  887. # line 293 "scan_c.l"
  888. { APPEND_BUFFER; }
  889. YY_BREAK
  890. case 41:
  891. # line 294 "scan_c.l"
  892. {
  893.    APPEND_BUFFER ;
  894.                            REST_COND;
  895.  }
  896. YY_BREAK
  897.   /*********************************************
  898.    *             SQL comment recognizer        *
  899.    *********************************************/
  900. case 42:
  901. # line 301 "scan_c.l"
  902. /* do nothing */;
  903. YY_BREAK
  904. case 43:
  905. # line 302 "scan_c.l"
  906. {
  907.                            line_num++;
  908.    REST_COND;
  909.  }
  910. YY_BREAK
  911. case 44:
  912. # line 306 "scan_c.l"
  913.                            ECHO;
  914.    BEGIN_MODE(C_lang);
  915.  }
  916. YY_BREAK
  917. case 45:
  918. # line 310 "scan_c.l"
  919. ECHO;
  920. YY_BREAK
  921. case YY_STATE_EOF(INITIAL):
  922. case YY_STATE_EOF(C_lang):
  923. case YY_STATE_EOF(c_comment):
  924. case YY_STATE_EOF(C_str):
  925. case YY_STATE_EOF(ESQL):
  926. case YY_STATE_EOF(MOD):
  927. case YY_STATE_EOF(SQL):
  928. case YY_STATE_EOF(SQL_str):
  929. case YY_STATE_EOF(SQL_ident):
  930. case YY_STATE_EOF(SQL_comment):
  931.     yyterminate();
  932.     case YY_END_OF_BUFFER:
  933. {
  934. /* amount of text matched not including the EOB char */
  935. int yy_amount_of_matched_text = yy_cp - yytext - 1;
  936. /* undo the effects of YY_DO_BEFORE_ACTION */
  937. *yy_cp = yy_hold_char;
  938. /* note that here we test for yy_c_buf_p "<=" to the position
  939.  * of the first EOB in the buffer, since yy_c_buf_p will
  940.  * already have been incremented past the NUL character
  941.  * (since all states make transitions on EOB to the end-
  942.  * of-buffer state).  Contrast this with the test in yyinput().
  943.  */
  944. if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  945.     /* this was really a NUL */
  946.     {
  947.     yy_state_type yy_next_state;
  948.     yy_c_buf_p = yytext + yy_amount_of_matched_text;
  949.     yy_current_state = yy_get_previous_state();
  950.     /* okay, we're now positioned to make the
  951.      * NUL transition.  We couldn't have
  952.      * yy_get_previous_state() go ahead and do it
  953.      * for us because it doesn't know how to deal
  954.      * with the possibility of jamming (and we
  955.      * don't want to build jamming into it because
  956.      * then it will run more slowly)
  957.      */
  958.     yy_next_state = yy_try_NUL_trans( yy_current_state );
  959.     yy_bp = yytext + YY_MORE_ADJ;
  960.     if ( yy_next_state )
  961. {
  962. /* consume the NUL */
  963. yy_cp = ++yy_c_buf_p;
  964. yy_current_state = yy_next_state;
  965. goto yy_match;
  966. }
  967.     else
  968. {
  969.     yy_cp = yy_last_accepting_cpos;
  970.     yy_current_state = yy_last_accepting_state;
  971. goto yy_find_action;
  972. }
  973.     }
  974. else switch ( yy_get_next_buffer() )
  975.     {
  976.     case EOB_ACT_END_OF_FILE:
  977. {
  978. yy_did_buffer_switch_on_eof = 0;
  979. if ( yywrap() )
  980.     {
  981.     /* note: because we've taken care in
  982.      * yy_get_next_buffer() to have set up yytext,
  983.      * we can now set up yy_c_buf_p so that if some
  984.      * total hoser (like flex itself) wants
  985.      * to call the scanner after we return the
  986.      * YY_NULL, it'll still work - another YY_NULL
  987.      * will get returned.
  988.      */
  989.     yy_c_buf_p = yytext + YY_MORE_ADJ;
  990.     yy_act = YY_STATE_EOF((yy_start - 1) / 2);
  991.     goto do_action;
  992.     }
  993. else
  994.     {
  995.     if ( ! yy_did_buffer_switch_on_eof )
  996. YY_NEW_FILE;
  997.     }
  998. }
  999. break;
  1000.     case EOB_ACT_CONTINUE_SCAN:
  1001. yy_c_buf_p = yytext + yy_amount_of_matched_text;
  1002. yy_current_state = yy_get_previous_state();
  1003. yy_cp = yy_c_buf_p;
  1004. yy_bp = yytext + YY_MORE_ADJ;
  1005. goto yy_match;
  1006.     case EOB_ACT_LAST_MATCH:
  1007. yy_c_buf_p =
  1008.     &yy_current_buffer->yy_ch_buf[yy_n_chars];
  1009. yy_current_state = yy_get_previous_state();
  1010. yy_cp = yy_c_buf_p;
  1011. yy_bp = yytext + YY_MORE_ADJ;
  1012. goto yy_find_action;
  1013.     }
  1014. break;
  1015. }
  1016.     default:
  1017. #ifdef FLEX_DEBUG
  1018. printf( "action # %dn", yy_act );
  1019. #endif
  1020. YY_FATAL_ERROR(
  1021. "fatal flex scanner internal error--no action found" );
  1022.     }
  1023. }
  1024.     }
  1025. /* yy_get_next_buffer - try to read in a new buffer
  1026.  *
  1027.  * synopsis
  1028.  *     int yy_get_next_buffer();
  1029.  *     
  1030.  * returns a code representing an action
  1031.  *     EOB_ACT_LAST_MATCH - 
  1032.  *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
  1033.  *     EOB_ACT_END_OF_FILE - end of file
  1034.  */
  1035. static int yy_get_next_buffer()
  1036.     {
  1037.     register YY_CHAR *dest = yy_current_buffer->yy_ch_buf;
  1038.     register YY_CHAR *source = yytext - 1; /* copy prev. char, too */
  1039.     register int number_to_move, i;
  1040.     int ret_val;
  1041.     if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
  1042. YY_FATAL_ERROR(
  1043. "fatal flex scanner internal error--end of buffer missed" );
  1044.     /* try to read more data */
  1045.     /* first move last chars to start of buffer */
  1046.     number_to_move = yy_c_buf_p - yytext;
  1047.     for ( i = 0; i < number_to_move; ++i )
  1048. *(dest++) = *(source++);
  1049.     if ( yy_current_buffer->yy_eof_status != EOF_NOT_SEEN )
  1050. /* don't do the read, it's not guaranteed to return an EOF,
  1051.  * just force an EOF
  1052.  */
  1053. yy_n_chars = 0;
  1054.     else
  1055. {
  1056. int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1;
  1057. if ( num_to_read > YY_READ_BUF_SIZE )
  1058.     num_to_read = YY_READ_BUF_SIZE;
  1059. else if ( num_to_read <= 0 )
  1060.     YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
  1061. /* read in more data */
  1062. YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
  1063.   yy_n_chars, num_to_read );
  1064. }
  1065.     if ( yy_n_chars == 0 )
  1066. {
  1067. if ( number_to_move - YY_MORE_ADJ == 1 )
  1068.     {
  1069.     ret_val = EOB_ACT_END_OF_FILE;
  1070.     yy_current_buffer->yy_eof_status = EOF_DONE;
  1071.     }
  1072. else
  1073.     {
  1074.     ret_val = EOB_ACT_LAST_MATCH;
  1075.     yy_current_buffer->yy_eof_status = EOF_PENDING;
  1076.     }
  1077. }
  1078.     else
  1079. ret_val = EOB_ACT_CONTINUE_SCAN;
  1080.     yy_n_chars += number_to_move;
  1081.     yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
  1082.     yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
  1083.     /* yytext begins at the second character in yy_ch_buf; the first
  1084.      * character is the one which preceded it before reading in the latest
  1085.      * buffer; it needs to be kept around in case it's a newline, so
  1086.      * yy_get_previous_state() will have with '^' rules active
  1087.      */
  1088.     yytext = &yy_current_buffer->yy_ch_buf[1];
  1089.     return ( ret_val );
  1090.     }
  1091. /* yy_get_previous_state - get the state just before the EOB char was reached
  1092.  *
  1093.  * synopsis
  1094.  *     yy_state_type yy_get_previous_state();
  1095.  */
  1096. static yy_state_type yy_get_previous_state()
  1097.     {
  1098.     register yy_state_type yy_current_state;
  1099.     register YY_CHAR *yy_cp;
  1100.     register YY_CHAR *yy_bp = yytext;
  1101.     yy_current_state = yy_start;
  1102.     if ( yy_bp[-1] == 'n' )
  1103. ++yy_current_state;
  1104.     for ( yy_cp = yytext + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
  1105. {
  1106. register YY_CHAR yy_c = (*yy_cp ? yy_ec[*yy_cp] : 1);
  1107. if ( yy_accept[yy_current_state] )
  1108.     {
  1109.     yy_last_accepting_state = yy_current_state;
  1110.     yy_last_accepting_cpos = yy_cp;
  1111.     }
  1112. while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  1113.     {
  1114.     yy_current_state = yy_def[yy_current_state];
  1115.     if ( yy_current_state >= 158 )
  1116. yy_c = yy_meta[yy_c];
  1117.     }
  1118. yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
  1119. }
  1120.     return ( yy_current_state );
  1121.     }
  1122. /* yy_try_NUL_trans - try to make a transition on the NUL character
  1123.  *
  1124.  * synopsis
  1125.  *     next_state = yy_try_NUL_trans( current_state );
  1126.  */
  1127. #ifdef YY_USE_PROTOS
  1128. static yy_state_type yy_try_NUL_trans( register yy_state_type yy_current_state )
  1129. #else
  1130. static yy_state_type yy_try_NUL_trans( yy_current_state )
  1131. register yy_state_type yy_current_state;
  1132. #endif
  1133.     {
  1134.     register int yy_is_jam;
  1135.     register YY_CHAR *yy_cp = yy_c_buf_p;
  1136.     register YY_CHAR yy_c = 1;
  1137.     if ( yy_accept[yy_current_state] )
  1138. {
  1139. yy_last_accepting_state = yy_current_state;
  1140. yy_last_accepting_cpos = yy_cp;
  1141. }
  1142.     while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  1143. {
  1144. yy_current_state = yy_def[yy_current_state];
  1145. if ( yy_current_state >= 158 )
  1146.     yy_c = yy_meta[yy_c];
  1147. }
  1148.     yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
  1149.     yy_is_jam = (yy_current_state == 157);
  1150.     return ( yy_is_jam ? 0 : yy_current_state );
  1151.     }
  1152. #ifdef YY_USE_PROTOS
  1153. static void yyunput( YY_CHAR c, register YY_CHAR *yy_bp )
  1154. #else
  1155. static void yyunput( c, yy_bp )
  1156. YY_CHAR c;
  1157. register YY_CHAR *yy_bp;
  1158. #endif
  1159.     {
  1160.     register YY_CHAR *yy_cp = yy_c_buf_p;
  1161.     /* undo effects of setting up yytext */
  1162.     *yy_cp = yy_hold_char;
  1163.     if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  1164. { /* need to shift things up to make room */
  1165. register int number_to_move = yy_n_chars + 2; /* +2 for EOB chars */
  1166. register YY_CHAR *dest =
  1167.     &yy_current_buffer->yy_ch_buf[yy_current_buffer->yy_buf_size + 2];
  1168. register YY_CHAR *source =
  1169.     &yy_current_buffer->yy_ch_buf[number_to_move];
  1170. while ( source > yy_current_buffer->yy_ch_buf )
  1171.     *--dest = *--source;
  1172. yy_cp += dest - source;
  1173. yy_bp += dest - source;
  1174. yy_n_chars = yy_current_buffer->yy_buf_size;
  1175. if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  1176.     YY_FATAL_ERROR( "flex scanner push-back overflow" );
  1177. }
  1178.     if ( yy_cp > yy_bp && yy_cp[-1] == 'n' )
  1179. yy_cp[-2] = 'n';
  1180.     *--yy_cp = c;
  1181.     /* note: the formal parameter *must* be called "yy_bp" for this
  1182.      *       macro to now work correctly
  1183.      */
  1184.     YY_DO_BEFORE_ACTION; /* set up yytext again */
  1185.     }
  1186. #ifdef __cplusplus
  1187. static int yyinput()
  1188. #else
  1189. static int input()
  1190. #endif
  1191.     {
  1192.     int c;
  1193.     YY_CHAR *yy_cp = yy_c_buf_p;
  1194.     *yy_cp = yy_hold_char;
  1195.     if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
  1196. {
  1197. /* yy_c_buf_p now points to the character we want to return.
  1198.  * If this occurs *before* the EOB characters, then it's a
  1199.  * valid NUL; if not, then we've hit the end of the buffer.
  1200.  */
  1201. if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  1202.     /* this was really a NUL */
  1203.     *yy_c_buf_p = '';
  1204. else
  1205.     { /* need more input */
  1206.     yytext = yy_c_buf_p;
  1207.     ++yy_c_buf_p;
  1208.     switch ( yy_get_next_buffer() )
  1209. {
  1210. case EOB_ACT_END_OF_FILE:
  1211.     {
  1212.     if ( yywrap() )
  1213. {
  1214. yy_c_buf_p = yytext + YY_MORE_ADJ;
  1215. return ( EOF );
  1216. }
  1217.     YY_NEW_FILE;
  1218. #ifdef __cplusplus
  1219.     return ( yyinput() );
  1220. #else
  1221.     return ( input() );
  1222. #endif
  1223.     }
  1224.     break;
  1225. case EOB_ACT_CONTINUE_SCAN:
  1226.     yy_c_buf_p = yytext + YY_MORE_ADJ;
  1227.     break;
  1228. case EOB_ACT_LAST_MATCH:
  1229. #ifdef __cplusplus
  1230.     YY_FATAL_ERROR( "unexpected last match in yyinput()" );
  1231. #else
  1232.     YY_FATAL_ERROR( "unexpected last match in input()" );
  1233. #endif
  1234. }
  1235.     }
  1236. }
  1237.     c = *yy_c_buf_p;
  1238.     yy_hold_char = *++yy_c_buf_p;
  1239.     return ( c );
  1240.     }
  1241. #ifdef YY_USE_PROTOS
  1242. void yyrestart( FILE *input_file )
  1243. #else
  1244. void yyrestart( input_file )
  1245. FILE *input_file;
  1246. #endif
  1247.     {
  1248.     yy_init_buffer( yy_current_buffer, input_file );
  1249.     yy_load_buffer_state();
  1250.     }
  1251. #ifdef YY_USE_PROTOS
  1252. void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
  1253. #else
  1254. void yy_switch_to_buffer( new_buffer )
  1255. YY_BUFFER_STATE new_buffer;
  1256. #endif
  1257.     {
  1258.     if ( yy_current_buffer == new_buffer )
  1259. return;
  1260.     if ( yy_current_buffer )
  1261. {
  1262. /* flush out information for old buffer */
  1263. *yy_c_buf_p = yy_hold_char;
  1264. yy_current_buffer->yy_buf_pos = yy_c_buf_p;
  1265. yy_current_buffer->yy_n_chars = yy_n_chars;
  1266. }
  1267.     yy_current_buffer = new_buffer;
  1268.     yy_load_buffer_state();
  1269.     /* we don't actually know whether we did this switch during
  1270.      * EOF (yywrap()) processing, but the only time this flag
  1271.      * is looked at is after yywrap() is called, so it's safe
  1272.      * to go ahead and always set it.
  1273.      */
  1274.     yy_did_buffer_switch_on_eof = 1;
  1275.     }
  1276. #ifdef YY_USE_PROTOS
  1277. void yy_load_buffer_state( void )
  1278. #else
  1279. void yy_load_buffer_state()
  1280. #endif
  1281.     {
  1282.     yy_n_chars = yy_current_buffer->yy_n_chars;
  1283.     yytext = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
  1284.     yyin = yy_current_buffer->yy_input_file;
  1285.     yy_hold_char = *yy_c_buf_p;
  1286.     }
  1287. #ifdef YY_USE_PROTOS
  1288. YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
  1289. #else
  1290. YY_BUFFER_STATE yy_create_buffer( file, size )
  1291. FILE *file;
  1292. int size;
  1293. #endif
  1294.     {
  1295.     YY_BUFFER_STATE b;
  1296.     b = (YY_BUFFER_STATE) malloc( sizeof( struct yy_buffer_state ) );
  1297.     if ( ! b )
  1298. YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  1299.     b->yy_buf_size = size;
  1300.     /* yy_ch_buf has to be 2 characters longer than the size given because
  1301.      * we need to put in 2 end-of-buffer characters.
  1302.      */
  1303.     b->yy_ch_buf = (YY_CHAR *) malloc( (unsigned) (b->yy_buf_size + 2) );
  1304.     if ( ! b->yy_ch_buf )
  1305. YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  1306.     yy_init_buffer( b, file );
  1307.     return ( b );
  1308.     }
  1309. #ifdef YY_USE_PROTOS
  1310. void yy_delete_buffer( YY_BUFFER_STATE b )
  1311. #else
  1312. void yy_delete_buffer( b )
  1313. YY_BUFFER_STATE b;
  1314. #endif
  1315.     {
  1316.     if ( b == yy_current_buffer )
  1317. yy_current_buffer = (YY_BUFFER_STATE) 0;
  1318.     free( (char *) b->yy_ch_buf );
  1319.     free( (char *) b );
  1320.     }
  1321. #ifdef YY_USE_PROTOS
  1322. void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
  1323. #else
  1324. void yy_init_buffer( b, file )
  1325. YY_BUFFER_STATE b;
  1326. FILE *file;
  1327. #endif
  1328.     {
  1329.     b->yy_input_file = file;
  1330.     /* we put in the 'n' and start reading from [1] so that an
  1331.      * initial match-at-newline will be true.
  1332.      */
  1333.     b->yy_ch_buf[0] = 'n';
  1334.     b->yy_n_chars = 1;
  1335.     /* we always need two end-of-buffer characters.  The first causes
  1336.      * a transition to the end-of-buffer state.  The second causes
  1337.      * a jam in that state.
  1338.      */
  1339.     b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
  1340.     b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
  1341.     b->yy_buf_pos = &b->yy_ch_buf[1];
  1342.     b->yy_eof_status = EOF_NOT_SEEN;
  1343.     }
  1344. # line 310 "scan_c.l"
  1345. typedef struct save_yy_cond {
  1346.       int yy_cond;
  1347.       struct save_yy_cond *nxt;
  1348.     } *sv_ys_ptr;
  1349. static sv_ys_ptr save_yy_start=NULL;
  1350. static void
  1351. save_condition (void)
  1352. {
  1353.   register sv_ys_ptr nptr=(sv_ys_ptr)xmalloc(sizeof(struct save_yy_cond));
  1354.   nptr->yy_cond=yy_start;
  1355.   nptr->nxt=save_yy_start;
  1356.   save_yy_start=nptr;
  1357. #ifdef FLEX_DEBUG
  1358.   if(yy_flex_debug)
  1359.     fprintf(stderr,"n Lex: save condition :%d => (%d)n",
  1360.             yy_start,nptr->yy_cond);
  1361. #endif
  1362. }
  1363. static void
  1364. rest_condition(void)
  1365. {
  1366.   register sv_ys_ptr nptr=save_yy_start;
  1367.   if(nptr==NULL)
  1368.     fatal("Lex: Impossible restore conditions before save it !",NULL);
  1369.   yy_start=nptr->yy_cond;
  1370.   save_yy_start=nptr->nxt;
  1371. #ifdef FLEX_DEBUG
  1372.   if(yy_flex_debug)
  1373.     fprintf(stderr,"n Lex: restore condition :%d <=(%d)n",
  1374.             yy_start,nptr->yy_cond);
  1375. #endif
  1376.   xfree(nptr);
  1377. }
  1378. static struct
  1379. {
  1380.   char *mode;
  1381.   char *ext;
  1382.   int   state;
  1383. } scan_modes[] =
  1384.   {"0"     ,"? ?",INITIAL},
  1385.   {"SQL"   ,"sql",SQL},
  1386.   {"MODULE","sql",MOD},
  1387.   {"SCHEMA","sql",SCH},
  1388.   {"C"     ,"ec" ,C_lang},
  1389.   {"DMP"   ,"trl",-1}
  1390. };
  1391. void
  1392. client_scan_mode(int *p,char *s)
  1393.   register int k;
  1394.   if(!s)
  1395.     return;
  1396.   for(k=sizeof(scan_modes)/sizeof(*scan_modes);k--;)
  1397.     if(0==strcmp(s,scan_modes[k].mode))
  1398.        break;
  1399.   *p=scan_modes[k].state;
  1400. }
  1401. static void
  1402. outtype(char *text,int ins_directives)
  1403. {
  1404.   char *p;
  1405.   if (ins_directives & 1)
  1406.     fprintf (yyout,"
  1407.      progname_out);
  1408.   if (text)
  1409.     for (p = text; *p ; p++)
  1410.       if (*p != 'n')
  1411.         putc(*p,yyout);
  1412.       else
  1413.         {
  1414.           if (ins_directives & 4)
  1415.             {
  1416. #if __STDC__   /* we assume produced code will be compiled by the same compiler */
  1417.               fputs(""nt"",yyout);
  1418.               io_diff++;
  1419. #else
  1420.               while (*p == ' ' || *p == 'n' || *p == 't') p++;
  1421.               putc(' ',yyout); p--;
  1422. #endif
  1423.             }
  1424.           else
  1425.             {
  1426.               putc('n',yyout);
  1427.               io_diff++;
  1428.             }
  1429.         }
  1430.   if (ins_directives & 2)
  1431.     {
  1432.       fprintf(yyout,"
  1433.       io_diff++;
  1434.     }
  1435. }
  1436. int
  1437. scanner (void)
  1438. {
  1439.   extern int open_file  __P((FILE ** f, char *ext));
  1440.   int sm, oldsm;
  1441.   sm = 0;
  1442.   oldsm = scan_mode_state;
  1443.   
  1444.   if ( ( yyin = fopen (progname, "r") ) == NULL )
  1445.     {
  1446.       yyerror ("can't open input file");
  1447.       return 0;
  1448.     }
  1449.   if (open_file (&yyout, "c") )
  1450.     {
  1451.       char b[120];
  1452.       strcpy (b, sql_prg);
  1453.       strcat (b, ".c");
  1454.       progname_out = savestring (b);
  1455.     }
  1456.   else
  1457.     yyfatal ("Can't create .c output file");
  1458.   if (scan_mode_state == INITIAL)
  1459.     {
  1460.       register i4_t k;
  1461.       register char *pn = progname+strlen(progname);
  1462.       for (k = sizeof(scan_modes)/sizeof(*scan_modes); k--; )
  1463.         if (0 == strcmp(pn - strlen(scan_modes[k].ext),scan_modes[k].ext))
  1464.   break;
  1465.       scan_mode_state = scan_modes[k].state;
  1466.     }
  1467. #if 0  
  1468.   /*
  1469.    * analyzing for dump extension - 
  1470.    * may be load tree dump and continue processing from dumping point
  1471.    */
  1472.   if (scan_mode_state == INITIAL)
  1473.     {
  1474.       register int k;
  1475.       register char *pn = progname+strlen(progname);
  1476.       for (k = 0; compiler_passes[k].sname; k++)
  1477.         if (0 == strcmp(pn - strlen(compiler_passes[k].ext),compiler_passes[k].ext))
  1478.   { 
  1479.     scan_mode_state = -1;
  1480.     break;
  1481.   }
  1482.     }
  1483. #endif  
  1484.   yy_init = 1;
  1485.   io_diff = 0;
  1486.   line_num = 1;
  1487.   outtype ("/* This file is created automatically by gsql compiler */n"
  1488.    "#include <gnusql/sql.h>n"
  1489.    "#include "",0);
  1490.   outtype (sql_prg,0);
  1491.   outtype (".Sc"nn",2);
  1492.   while (SCANNER_NAME () )
  1493.     {
  1494.       extern char *prepare_statement(char *a,i4_t b,char **repl);
  1495.       char *repl = NULL;
  1496.       if (sm == 0)
  1497. {
  1498.   if(scan_mode_state == SCH)
  1499.             {
  1500.               int ln = line_num;
  1501.               line_num = 1;
  1502.               outtype ("n"
  1503.                        "#include "dyn_funcs.h"n"
  1504.                        "n"
  1505.                        "int main(int argc, char **argv) {n", 1);
  1506.               line_num = ln ;
  1507.             }
  1508.   sm = scan_mode_state;
  1509. }
  1510.       else
  1511. assert ((sm == scan_mode_state) || (sm == INITIAL));
  1512.       if (statement_scanner_buffer == NULL)
  1513. yyfatal ( "Unexpected null input line");
  1514.       if (sm == SCH) /* if we scan schema - there is no need to compile */
  1515.         {            /* anything now - let's do it all at run time      */
  1516.           outtype ("  SQL__execute_immediate ("", 0);
  1517.           outtype (statement_scanner_buffer, 4);
  1518.           outtype ("  ");n"
  1519.                    "  if(SQLCODE>0)n"
  1520.                    "    fprintf(stderr,"SQL warning:%s\n",gsqlca.errmsg);n"
  1521.                    "  if(SQLCODE<0){n"
  1522.                    "    fprintf(stderr,"SQL error:%s\n",gsqlca.errmsg);n"
  1523.                    "    goto errexit;n"
  1524.                    "  }n"
  1525.                    , 0);
  1526.         }
  1527.       else if ( ! prepare_statement (statement_scanner_buffer, bline,
  1528.                                      (sm == MOD? NULL:&repl)) )
  1529. return 0;
  1530.       io_diff -= line_num - bline;
  1531.       if (sm != MOD)
  1532.         outtype (repl, (sm == SCH) ? 0 : 3 );
  1533.       bline = line_num;
  1534.     }
  1535.   if (sm == SCH)
  1536.     outtype ("n"
  1537.              "  " CALL_COMMIT_str "n"
  1538.              "  return 0;n"
  1539.              " errexit:n"
  1540.              "  " CALL_ROLLBACK_str "n"
  1541.              "  return SQLCODE;n"
  1542.              "}n"
  1543.              "/* end of create schema routine */n"
  1544.              "n", 0);
  1545.   scan_mode_state = oldsm;
  1546.   if (yyin != stdin )
  1547.     fclose (yyin);
  1548.   fclose (yyout);
  1549.   return 1;
  1550. }
  1551. int yywrap() { return 1; }