scan.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:59k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /* A lexical scanner generated by flex */
  2. /* Scanner skeleton version:
  3.  * $FreeBSD: src/usr.bin/lex/skel.c,v 1.2.2.1 1999/08/29 15:29:33 peter Exp $
  4.  */
  5. #define FLEX_SCANNER
  6. #define YY_FLEX_MAJOR_VERSION 2
  7. #define YY_FLEX_MINOR_VERSION 5
  8. #include <stdio.h>
  9. /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
  10. #ifdef c_plusplus
  11. #ifndef __cplusplus
  12. #define __cplusplus
  13. #endif
  14. #endif
  15. #ifdef __cplusplus
  16. #include <stdlib.h>
  17. #include <unistd.h>
  18. /* Use prototypes in function declarations. */
  19. #define YY_USE_PROTOS
  20. /* The "const" storage-class-modifier is valid. */
  21. #define YY_USE_CONST
  22. #else /* ! __cplusplus */
  23. #if __STDC__
  24. #define YY_USE_PROTOS
  25. #define YY_USE_CONST
  26. #endif /* __STDC__ */
  27. #endif /* ! __cplusplus */
  28. #ifdef __TURBOC__
  29.  #pragma warn -rch
  30.  #pragma warn -use
  31. #include <io.h>
  32. #include <stdlib.h>
  33. #define YY_USE_CONST
  34. #define YY_USE_PROTOS
  35. #endif
  36. #ifdef YY_USE_CONST
  37. #define yyconst const
  38. #else
  39. #define yyconst
  40. #endif
  41. #ifdef YY_USE_PROTOS
  42. #define YY_PROTO(proto) proto
  43. #else
  44. #define YY_PROTO(proto) ()
  45. #endif
  46. /* Returned upon end-of-file. */
  47. #define YY_NULL 0
  48. /* Promotes a possibly negative, possibly signed char to an unsigned
  49.  * integer for use as an array index.  If the signed char is negative,
  50.  * we want to instead treat it as an 8-bit unsigned char, hence the
  51.  * double cast.
  52.  */
  53. #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
  54. /* Enter a start condition.  This macro really ought to take a parameter,
  55.  * but we do it the disgusting crufty way forced on us by the ()-less
  56.  * definition of BEGIN.
  57.  */
  58. #define BEGIN yy_start = 1 + 2 *
  59. /* Translate the current start state into a value that can be later handed
  60.  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  61.  * compatibility.
  62.  */
  63. #define YY_START ((yy_start - 1) / 2)
  64. #define YYSTATE YY_START
  65. /* Action number for EOF rule of a given start state. */
  66. #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
  67. /* Special action meaning "start processing a new file". */
  68. #define YY_NEW_FILE yyrestart( yyin )
  69. #define YY_END_OF_BUFFER_CHAR 0
  70. /* Size of default input buffer. */
  71. #define YY_BUF_SIZE 65536
  72. typedef struct yy_buffer_state *YY_BUFFER_STATE;
  73. extern int yyleng;
  74. extern FILE *yyin, *yyout;
  75. #define EOB_ACT_CONTINUE_SCAN 0
  76. #define EOB_ACT_END_OF_FILE 1
  77. #define EOB_ACT_LAST_MATCH 2
  78. /* The funky do-while in the following #define is used to turn the definition
  79.  * int a single C statement (which needs a semi-colon terminator).  This
  80.  * avoids problems with code like:
  81.  *
  82.  *  if ( condition_holds )
  83.  * yyless( 5 );
  84.  * else
  85.  * do_something_else();
  86.  *
  87.  * Prior to using the do-while the compiler would get upset at the
  88.  * "else" because it interpreted the "if" statement as being all
  89.  * done when it reached the ';' after the yyless() call.
  90.  */
  91. /* Return all but the first 'n' matched characters back to the input stream. */
  92. #define yyless(n) 
  93. do 
  94. /* Undo effects of setting up yytext. */ 
  95. *yy_cp = yy_hold_char; 
  96. YY_RESTORE_YY_MORE_OFFSET 
  97. yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; 
  98. YY_DO_BEFORE_ACTION; /* set up yytext again */ 
  99. while ( 0 )
  100. #define unput(c) yyunput( c, yytext_ptr )
  101. /* The following is because we cannot portably get our hands on size_t
  102.  * (without autoconf's help, which isn't available because we want
  103.  * flex-generated scanners to compile on their own).
  104.  */
  105. typedef unsigned int yy_size_t;
  106. struct yy_buffer_state
  107. {
  108. FILE *yy_input_file;
  109. char *yy_ch_buf; /* input buffer */
  110. char *yy_buf_pos; /* current position in input buffer */
  111. /* Size of input buffer in bytes, not including room for EOB
  112.  * characters.
  113.  */
  114. yy_size_t yy_buf_size;
  115. /* Number of characters read into yy_ch_buf, not including EOB
  116.  * characters.
  117.  */
  118. int yy_n_chars;
  119. /* Whether we "own" the buffer - i.e., we know we created it,
  120.  * and can realloc() it to grow it, and should free() it to
  121.  * delete it.
  122.  */
  123. int yy_is_our_buffer;
  124. /* Whether this is an "interactive" input source; if so, and
  125.  * if we're using stdio for input, then we want to use getc()
  126.  * instead of fread(), to make sure we stop fetching input after
  127.  * each newline.
  128.  */
  129. int yy_is_interactive;
  130. /* Whether we're considered to be at the beginning of a line.
  131.  * If so, '^' rules will be active on the next match, otherwise
  132.  * not.
  133.  */
  134. int yy_at_bol;
  135. /* Whether to try to fill the input buffer when we reach the
  136.  * end of it.
  137.  */
  138. int yy_fill_buffer;
  139. int yy_buffer_status;
  140. #define YY_BUFFER_NEW 0
  141. #define YY_BUFFER_NORMAL 1
  142. /* When an EOF's been seen but there's still some text to process
  143.  * then we mark the buffer as YY_EOF_PENDING, to indicate that we
  144.  * shouldn't try reading from the input source any more.  We might
  145.  * still have a bunch of tokens to match, though, because of
  146.  * possible backing-up.
  147.  *
  148.  * When we actually see the EOF, we change the status to "new"
  149.  * (via yyrestart()), so that the user can continue scanning by
  150.  * just pointing yyin at a new input file.
  151.  */
  152. #define YY_BUFFER_EOF_PENDING 2
  153. };
  154. static YY_BUFFER_STATE yy_current_buffer = 0;
  155. /* We provide macros for accessing buffer states in case in the
  156.  * future we want to put the buffer states in a more general
  157.  * "scanner state".
  158.  */
  159. #define YY_CURRENT_BUFFER yy_current_buffer
  160. /* yy_hold_char holds the character lost when yytext is formed. */
  161. static char yy_hold_char;
  162. static int yy_n_chars; /* number of characters read into yy_ch_buf */
  163. int yyleng;
  164. /* Points to current character in buffer. */
  165. static char *yy_c_buf_p = (char *) 0;
  166. static int yy_init = 1; /* whether we need to initialize */
  167. static int yy_start = 0; /* start state number */
  168. /* Flag which is used to allow yywrap()'s to do buffer switches
  169.  * instead of setting up a fresh yyin.  A bit of a hack ...
  170.  */
  171. static int yy_did_buffer_switch_on_eof;
  172. void yyrestart YY_PROTO(( FILE *input_file ));
  173. void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
  174. void yy_load_buffer_state YY_PROTO(( void ));
  175. YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
  176. void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  177. void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
  178. void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  179. #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
  180. YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
  181. YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
  182. YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
  183. static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
  184. static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
  185. static void yy_flex_free YY_PROTO(( void * ));
  186. #define yy_new_buffer yy_create_buffer
  187. #define yy_set_interactive(is_interactive) 
  188. if ( ! yy_current_buffer ) 
  189. yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); 
  190. yy_current_buffer->yy_is_interactive = is_interactive; 
  191. }
  192. #define yy_set_bol(at_bol) 
  193. if ( ! yy_current_buffer ) 
  194. yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); 
  195. yy_current_buffer->yy_at_bol = at_bol; 
  196. }
  197. #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
  198. #define YY_USES_REJECT
  199. typedef unsigned char YY_CHAR;
  200. FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
  201. typedef int yy_state_type;
  202. extern char *yytext;
  203. #define yytext_ptr yytext
  204. static yy_state_type yy_get_previous_state YY_PROTO(( void ));
  205. static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
  206. static int yy_get_next_buffer YY_PROTO(( void ));
  207. static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
  208. /* Done after the current pattern has been matched and before the
  209.  * corresponding action - sets up yytext.
  210.  */
  211. #define YY_DO_BEFORE_ACTION 
  212. yytext_ptr = yy_bp; 
  213. yyleng = (int) (yy_cp - yy_bp); 
  214. yy_hold_char = *yy_cp; 
  215. *yy_cp = ''; 
  216. yy_c_buf_p = yy_cp;
  217. #define YY_NUM_RULES 43
  218. #define YY_END_OF_BUFFER 44
  219. static yyconst short int yy_acclist[181] =
  220.     {   0,
  221.        10,   10,    6,    6,   23,   23,    9,    9,   24,   24,
  222.        18,   18,   44,   42,   43,   41,   42,   43,   41,   43,
  223.        31,   42,   43,   21,   42,   43,   28,   29,   31,   42,
  224.        43,   28,   29,   31,   42,   43,   15,   42,   43,   28,
  225.        29,   42,   43,   28,   29,   31,   42,   43,   28,   29,
  226.        42,   43,   28,   29,   31,   42,   43,   37,   42,   43,
  227.     16418,   28,   29,   31,   42,   43,   40,   42,   43,16417,
  228.        40,   42,   43,16417,   40,   42,   43,16417,   10,   43,
  229.         8,   43,    3,    6,   43,    3,    6,   43,    3,   43,
  230.         6,   43,   23,   43,   22,   43,    9,   43,   14,   43,
  231.        43,   24,   43,   25,   43,   18,   43,   16,   43,   43,
  232.        31,   31,   31,   32,   31,   31,   37,16418,   38,16419,
  233.         4,   31,   31,   38,16419,   26,   31,   40,16417,    7,
  234.        13,   10,    6,    6,    5,   23,    9,   24,   18,   17,
  235.        19,   30,   27,   30,   27,   30,   32,   27,    1,   31,
  236.        31,   27,   30,    4,   31,    4,   31,    4,   31, 8226,
  237.        38,16419,   39,16420, 8225,   12,    5,   11,   20,   30,
  238.      8227,    2,    4,   31,   30,    2,    2,    2, 8228,    2
  239.     } ;
  240. static yyconst short int yy_accept[134] =
  241.     {   0,
  242.         1,    1,    1,    2,    3,    4,    5,    6,    7,    8,
  243.         9,   10,   11,   12,   13,   14,   16,   19,   21,   24,
  244.        27,   32,   37,   40,   44,   49,   53,   58,   62,   67,
  245.        71,   75,   79,   81,   83,   86,   89,   91,   93,   95,
  246.        97,   99,  101,  102,  104,  106,  108,  110,  111,  112,
  247.       113,  113,  114,  115,  116,  116,  117,  117,  119,  121,
  248.       123,  124,  124,  124,  126,  126,  128,  128,  128,  130,
  249.       131,  132,  133,  133,  133,  134,  135,  135,  135,  136,
  250.       137,  138,  138,  138,  139,  140,  140,  140,  141,  142,
  251.       143,  145,  148,  149,  149,  150,  151,  152,  154,  154,
  252.       154,  154,  156,  158,  160,  161,  163,  163,  165,  166,
  253.       166,  166,  167,  168,  168,  168,  169,  169,  169,  170,
  254.       171,  172,  172,  175,  176,  176,  176,  177,  178,  179,
  255.       180,  181,  181
  256.     } ;
  257. static yyconst int yy_ec[256] =
  258.     {   0,
  259.         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
  260.         1,    2,    1,    1,    1,    1,    1,    1,    1,    1,
  261.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  262.         1,    2,    4,    5,    4,    6,    7,    4,    8,    9,
  263.         9,   10,   11,    9,   12,   13,   14,   15,   15,   15,
  264.        15,   15,   15,   15,   15,   15,   15,   16,    9,    7,
  265.         7,    7,    4,    4,   17,   18,   17,   17,   19,   17,
  266.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  267.        17,   17,   17,   17,   17,   17,   17,   20,   17,   17,
  268.         9,   21,    9,    7,   17,    4,   17,   18,   17,   17,
  269.        19,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  270.        17,   17,   17,   17,   17,   17,   17,   17,   17,   20,
  271.        17,   17,    1,    7,    1,    4,    1,   17,   17,   17,
  272.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  273.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  274.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  275.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  276.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  277.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  278.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  279.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  280.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  281.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  282.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  283.        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  284.        17,   17,   17,   17,   17
  285.     } ;
  286. static yyconst int yy_meta[22] =
  287.     {   0,
  288.         1,    2,    3,    4,    5,    4,    4,    6,    1,    7,
  289.         8,    9,   10,    4,   11,    4,    2,    2,   11,    2,
  290.        12
  291.     } ;
  292. static yyconst short int yy_base[153] =
  293.     {   0,
  294.         0,    0,  261,  260,   18,   31,  261,  248,  243,  234,
  295.        24,   37,   23,   25,  239,  466,  466,  466,  225,  466,
  296.        48,   40,  466,   54,   46,   65,   55,   79,  218,   71,
  297.        97,  220,    0,   51,    0,  106,   61,    0,    0,  466,
  298.         0,   76,  466,   82,  466,    0,   85,    0,  214,   89,
  299.        94,   49,  203,  190,   57,  122,  180,    0,  142,  158,
  300.       106,  144,    0,  177,   96,  170,  146,    0,  142,  466,
  301.       466,    0,   87,  173,    0,    0,  141,   93,  150,    0,
  302.         0,  112,  175,  164,    0,  177,  182,  466,  466,  466,
  303.       466,   80,  466,  187,  466,  200,  158,    0,  184,    0,
  304.        76,  213,   62,  200,  466,    0,   33,  228,  466,  230,
  305.       233,  466,  186,  242,  244,  466,  246,  253,  466,    0,
  306.       466,  149,  206,   13,  255,    0,  260,  262,  219,  466,
  307.       257,  466,  272,  284,  296,  308,  320,  332,  341,  349,
  308.       360,  372,  381,  390,  402,  414,  425,  437,  442,  446,
  309.       450,  454
  310.     } ;
  311. static yyconst short int yy_def[153] =
  312.     {   0,
  313.       132,    1,  133,  133,  134,  134,  135,  135,  136,  136,
  314.       137,  137,  138,  138,  132,  132,  132,  132,  139,  132,
  315.       139,   21,  132,  132,   21,  132,   22,  132,   22,  140,
  316.       140,   31,  141,  132,  142,  142,  143,   36,  144,  132,
  317.       145,  132,  132,  132,  132,  146,  132,  147,  139,  139,
  318.       132,   50,  132,   52,  132,  132,  132,   28,  132,  148,
  319.        56,  132,  149,   59,  132,  139,  132,  150,   31,  132,
  320.       132,  141,  132,  132,  142,   36,  143,  143,  143,  144,
  321.       145,  132,  132,  132,  146,  132,  132,  132,  132,  132,
  322.       132,  132,  132,   56,  132,   94,   96,   94,  132,  151,
  323.       148,  148,  102,  102,  132,   64,  132,  132,  132,  132,
  324.       132,  132,  132,  132,  132,  132,  132,  132,  132,   94,
  325.       132,  148,  102,  148,  132,  152,  148,  148,  132,  132,
  326.       132,    0,  132,  132,  132,  132,  132,  132,  132,  132,
  327.       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
  328.       132,  132
  329.     } ;
  330. static yyconst short int yy_nxt[488] =
  331.     {   0,
  332.        16,   17,   18,   19,   20,   21,   22,   23,   24,   22,
  333.        22,   25,   26,   27,   28,   29,   30,   31,   30,   32,
  334.        16,   36,  122,   36,   36,   44,   44,   37,   36,   36,
  335.        47,   38,   47,   36,   36,   45,   36,   36,   44,   44,
  336.        37,   36,   36,   48,   38,   48,   36,  108,   45,   51,
  337.        51,   54,   73,   74,  132,   51,   51,   56,   57,   52,
  338.        58,   91,   53,   92,   60,   55,   51,   51,   61,   93,
  339.        77,   93,   67,   67,   79,  123,   55,   82,   83,   59,
  340.        62,   62,   68,   84,   84,  122,   86,   87,   73,   74,
  341.        63,   64,   88,   58,   53,   51,   51,   65,   67,   67,
  342.        50,   90,   77,   90,   70,   55,  107,  107,   68,   76,
  343.       108,   76,   76,   82,   83,   77,   76,   76,   94,   76,
  344.        94,   76,   94,   94,   95,   96,   94,   96,   96,   94,
  345.        94,   96,   96,   97,   98,   96,   98,   96,   94,   94,
  346.        94,   94,   94,   99,   99,   62,   62,   67,   67,  132,
  347.        77,  113,  113,  100,   79,   63,   59,   68,  122,   77,
  348.        65,  102,  127,  102,  102,   84,   84,  103,  102,  104,
  349.       120,  102,  120,  102,  110,  111,  114,  115,   86,   87,
  350.       112,   50,  116,  117,  118,   99,   99,  113,  113,  119,
  351.        94,  106,   94,   94,   59,  100,   94,   94,   94,   94,
  352.        94,   94,   94,   96,   91,   96,   96,  128,  129,   96,
  353.        96,   97,  124,   96,  124,   96,  102,   53,  102,  102,
  354.       131,  129,  103,  102,  104,   50,  102,   71,  102,  125,
  355.       125,  110,  111,   66,  110,  111,   50,  112,  132,  126,
  356.       112,   42,  108,  114,  115,  114,  115,  117,  118,  116,
  357.        42,  116,   40,  119,  117,  118,  125,  125,  131,  129,
  358.       119,  128,  129,  128,  129,   40,  126,   34,   34,  122,
  359.       132,  122,   33,   33,   33,   33,   33,   33,   33,   33,
  360.        33,   33,   33,   33,   35,   35,   35,   35,   35,   35,
  361.        35,   35,   35,   35,   35,   35,   39,   39,   39,   39,
  362.        39,   39,   39,   39,   39,   39,   39,   39,   41,   41,
  363.        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
  364.        43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
  365.        43,   43,   46,   46,   46,   46,   46,   46,   46,   46,
  366.        46,   46,   46,   46,   49,  132,  132,   49,   49,   49,
  367.        69,   69,  132,  132,  132,  132,  132,   69,  132,   69,
  368.        72,   72,   72,   72,   72,  132,   72,   72,   72,   72,
  369.        72,   72,   75,   75,   75,   75,   75,   75,  132,   75,
  370.        75,   75,   75,   75,   78,  132,  132,   78,   78,   78,
  371.        80,   80,   80,   80,  132,   80,   80,   80,   80,   80,
  372.        80,   80,   81,   81,   81,   81,   81,  132,   81,   81,
  373.        81,   81,   81,   81,   85,   85,   85,   85,   85,  132,
  374.        85,   85,   85,   85,   85,   89,   89,   89,   89,   89,
  375.        89,   89,   89,   89,   89,   89,   89,  101,  101,  132,
  376.       101,  101,  101,  101,  101,  101,  101,  101,  101,  105,
  377.       105,  105,  105,  109,  109,  109,  109,  121,  121,  121,
  378.       121,  130,  130,  130,  130,   15,  132,  132,  132,  132,
  379.       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
  380.       132,  132,  132,  132,  132,  132,  132
  381.     } ;
  382. static yyconst short int yy_chk[488] =
  383.     {   0,
  384.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  385.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  386.         1,    5,  124,    5,    5,   11,   11,    5,    5,    5,
  387.        13,    5,   14,    5,    6,   11,    6,    6,   12,   12,
  388.         6,    6,    6,   13,    6,   14,    6,  107,   12,   21,
  389.        21,   22,   34,   34,   22,   24,   24,   25,   25,   21,
  390.        25,   52,   21,   52,   27,   24,   26,   26,   27,   55,
  391.        37,   55,   30,   30,   37,  103,   26,   42,   42,   26,
  392.        28,   28,   30,   44,   44,  101,   47,   47,   73,   73,
  393.        28,   28,   47,   28,   92,   51,   51,   28,   31,   31,
  394.        50,   50,   78,   50,   31,   51,   65,   65,   31,   36,
  395.        65,   36,   36,   82,   82,   36,   36,   36,   61,   36,
  396.        61,   36,   56,   56,   56,   56,   56,   56,   56,   56,
  397.        56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
  398.        56,   56,   56,   59,   59,   62,   62,   67,   67,   69,
  399.        77,   79,   79,   59,   77,   62,   59,   67,  122,   79,
  400.        59,   60,  122,   60,   60,   84,   84,   60,   60,   60,
  401.        97,   60,   97,   60,   74,   74,   83,   83,   86,   86,
  402.        74,   66,   83,   87,   87,   99,   99,  113,  113,   87,
  403.        94,   64,   94,   94,   57,   99,   94,   94,   94,   94,
  404.        94,   94,   94,   96,   54,   96,   96,  123,  123,   96,
  405.        96,   96,  104,   96,  104,   96,  102,   53,  102,  102,
  406.       129,  129,  102,  102,  102,   49,  102,   32,  102,  108,
  407.       108,  110,  110,   29,  111,  111,   19,  110,   15,  108,
  408.       111,   10,  108,  114,  114,  115,  115,  117,  117,  114,
  409.         9,  115,    8,  117,  118,  118,  125,  125,  131,  131,
  410.       118,  127,  127,  128,  128,    7,  125,    4,    3,  127,
  411.         0,  128,  133,  133,  133,  133,  133,  133,  133,  133,
  412.       133,  133,  133,  133,  134,  134,  134,  134,  134,  134,
  413.       134,  134,  134,  134,  134,  134,  135,  135,  135,  135,
  414.       135,  135,  135,  135,  135,  135,  135,  135,  136,  136,
  415.       136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
  416.       137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
  417.       137,  137,  138,  138,  138,  138,  138,  138,  138,  138,
  418.       138,  138,  138,  138,  139,    0,    0,  139,  139,  139,
  419.       140,  140,    0,    0,    0,    0,    0,  140,    0,  140,
  420.       141,  141,  141,  141,  141,    0,  141,  141,  141,  141,
  421.       141,  141,  142,  142,  142,  142,  142,  142,    0,  142,
  422.       142,  142,  142,  142,  143,    0,    0,  143,  143,  143,
  423.       144,  144,  144,  144,    0,  144,  144,  144,  144,  144,
  424.       144,  144,  145,  145,  145,  145,  145,    0,  145,  145,
  425.       145,  145,  145,  145,  146,  146,  146,  146,  146,    0,
  426.       146,  146,  146,  146,  146,  147,  147,  147,  147,  147,
  427.       147,  147,  147,  147,  147,  147,  147,  148,  148,    0,
  428.       148,  148,  148,  148,  148,  148,  148,  148,  148,  149,
  429.       149,  149,  149,  150,  150,  150,  150,  151,  151,  151,
  430.       151,  152,  152,  152,  152,  132,  132,  132,  132,  132,
  431.       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
  432.       132,  132,  132,  132,  132,  132,  132
  433.     } ;
  434. static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
  435. static char *yy_full_match;
  436. static int yy_lp;
  437. static int yy_looking_for_trail_begin = 0;
  438. static int yy_full_lp;
  439. static int *yy_full_state;
  440. #define YY_TRAILING_MASK 0x2000
  441. #define YY_TRAILING_HEAD_MASK 0x4000
  442. #define REJECT 
  443. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ 
  444. yy_cp = yy_full_match; /* restore poss. backed-over text */ 
  445. yy_lp = yy_full_lp; /* restore orig. accepting pos. */ 
  446. yy_state_ptr = yy_full_state; /* restore orig. state */ 
  447. yy_current_state = *yy_state_ptr; /* restore curr. state */ 
  448. ++yy_lp; 
  449. goto find_rule; 
  450. }
  451. #define yymore() yymore_used_but_not_detected
  452. #define YY_MORE_ADJ 0
  453. #define YY_RESTORE_YY_MORE_OFFSET
  454. char *yytext;
  455. #line 1 "scan.l"
  456. #define INITIAL 0
  457. #line 2 "scan.l"
  458. /*-------------------------------------------------------------------------
  459.  *
  460.  * scan.l
  461.  *   lexical scanner for POSTGRES
  462.  *
  463.  * Copyright (c) 1994, Regents of the University of California
  464.  *
  465.  *
  466.  * IDENTIFICATION
  467.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/parser/scan.l,v 1.50 1999/07/08 00:00:43 momjian Exp $
  468.  *
  469.  *-------------------------------------------------------------------------
  470.  */
  471. #include <ctype.h>
  472. #include <unistd.h>
  473. #ifndef __linux__
  474. #include <math.h>
  475. #else
  476. #include <stdlib.h>
  477. #endif /* __linux__ */
  478. #include <string.h>
  479. #include <errno.h>
  480. #include "postgres.h"
  481. #include "miscadmin.h"
  482. #include "nodes/pg_list.h"
  483. #include "nodes/parsenodes.h"
  484. #include "parser/gramparse.h"
  485. #include "parser/keywords.h"
  486. #include "parser/scansup.h"
  487. #include "parse.h"
  488. #include "utils/builtins.h"
  489. #ifdef  YY_READ_BUF_SIZE
  490. #undef  YY_READ_BUF_SIZE
  491. #endif
  492. #define YY_READ_BUF_SIZE MAX_PARSE_BUFFER
  493. #ifdef  YY_READ_BUF_SIZE
  494. #undef  YY_READ_BUF_SIZE
  495. #endif
  496. #define YY_READ_BUF_SIZE MAX_PARSE_BUFFER
  497. extern char *parseString;
  498. static char *parseCh;
  499. /* some versions of lex define this as a macro */
  500. #if defined(yywrap)
  501. #undef yywrap
  502. #endif /* yywrap */
  503. #if defined(FLEX_SCANNER)
  504. /* MAX_PARSE_BUFFER is defined in miscadmin.h */
  505. #define YYLMAX MAX_PARSE_BUFFER
  506. #define YY_NO_UNPUT
  507. static int myinput(char* buf, int max);
  508. #undef YY_INPUT
  509. #define YY_INPUT(buf,result,max) {result = myinput(buf,max);}
  510. #else
  511. #undef input
  512. int input();
  513. #undef unput
  514. void unput(char);
  515. #endif /* FLEX_SCANNER */
  516. extern YYSTYPE yylval;
  517. int llen;
  518. char literal[MAX_PARSE_BUFFER];
  519. /* OK, here is a short description of lex/flex rules behavior.
  520.  * The longest pattern which matches an input string is always chosen.
  521.  * For equal-length patterns, the first occurring in the rules list is chosen.
  522.  * INITIAL is the starting condition, to which all non-conditional rules apply.
  523.  * When in an exclusive condition, only those rules defined for that condition apply.
  524.  *
  525.  * Exclusive states change parsing rules while the state is active.
  526.  * There are exclusive states for quoted strings, extended comments,
  527.  *  and to eliminate parsing troubles for numeric strings.
  528.  * Exclusive states:
  529.  *  <xb> binary numeric string - thomas 1997-11-16
  530.  *  <xc> extended C-style comments - tgl 1997-07-12
  531.  *  <xd> delimited identifiers (double-quoted identifiers) - tgl 1997-10-27
  532.  *  <xh> hexadecimal numeric string - thomas 1997-11-16
  533.  *  <xm> numeric strings with embedded minus sign - tgl 1997-09-05
  534.  *  <xq> quoted strings - tgl 1997-07-30
  535.  *
  536.  * The "extended comment" syntax closely resembles allowable operator syntax.
  537.  * So, when in condition <xc>, only strings which would terminate the
  538.  *  "extended comment" trigger any action other than "ignore".
  539.  * Be sure to match _any_ candidate comment, including those with appended
  540.  * operator-like symbols. - thomas 1997-07-14
  541.  */
  542. #define xb 1
  543. #define xc 2
  544. #define xd 3
  545. #define xh 4
  546. #define xm 5
  547. #define xq 6
  548. /* Binary number
  549.  */
  550. /* Hexadecimal number
  551.  */
  552. /* Extended quote
  553.  * xqdouble implements SQL92 embedded quote
  554.  * xqcat allows strings to cross input lines
  555.  * Note: reduction of '' and  sequences to output text is done in scanstr(),
  556.  * not by rules here.
  557.  */
  558. /* Delimited quote
  559.  * Allows embedded spaces and other special characters into identifiers.
  560.  */
  561. /* Comments
  562.  * Ignored by the scanner and parser.
  563.  */
  564. /*
  565. real [-]?(((({digit}*.{digit}+)|({digit}+.{digit}*))([Ee][-+]?{digit}+)?)|({digit}+[Ee][-+]?{digit}+))
  566. */
  567. /* DO NOT PUT ANY COMMENTS IN THE FOLLOWING SECTION.
  568.  * AT&T lex does not properly handle C-style comments in this second lex block.
  569.  * So, put comments here. tgl - 1997-09-08
  570.  *
  571.  * Quoted strings must allow some special characters such as single-quote
  572.  *  and newline.
  573.  * Embedded single-quotes are implemented both in the SQL/92-standard
  574.  *  style of two adjacent single quotes "''" and in the Postgres/Java style
  575.  *  of escaped-quote "'".
  576.  * Other embedded escaped characters are matched explicitly and the leading
  577.  *  backslash is dropped from the string. - thomas 1997-09-24
  578.  */
  579. #line 688 "lex.yy.c"
  580. /* Macros after this point can all be overridden by user definitions in
  581.  * section 1.
  582.  */
  583. #ifndef YY_SKIP_YYWRAP
  584. #ifdef __cplusplus
  585. extern "C" int yywrap YY_PROTO(( void ));
  586. #else
  587. extern int yywrap YY_PROTO(( void ));
  588. #endif
  589. #endif
  590. #ifndef YY_NO_UNPUT
  591. static void yyunput YY_PROTO(( int c, char *buf_ptr ));
  592. #endif
  593. #ifndef yytext_ptr
  594. static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
  595. #endif
  596. #ifdef YY_NEED_STRLEN
  597. static int yy_flex_strlen YY_PROTO(( yyconst char * ));
  598. #endif
  599. #ifndef YY_NO_INPUT
  600. #ifdef __cplusplus
  601. static int yyinput YY_PROTO(( void ));
  602. #else
  603. static int input YY_PROTO(( void ));
  604. #endif
  605. #endif
  606. #if YY_STACK_USED
  607. static int yy_start_stack_ptr = 0;
  608. static int yy_start_stack_depth = 0;
  609. static int *yy_start_stack = 0;
  610. #ifndef YY_NO_PUSH_STATE
  611. static void yy_push_state YY_PROTO(( int new_state ));
  612. #endif
  613. #ifndef YY_NO_POP_STATE
  614. static void yy_pop_state YY_PROTO(( void ));
  615. #endif
  616. #ifndef YY_NO_TOP_STATE
  617. static int yy_top_state YY_PROTO(( void ));
  618. #endif
  619. #else
  620. #define YY_NO_PUSH_STATE 1
  621. #define YY_NO_POP_STATE 1
  622. #define YY_NO_TOP_STATE 1
  623. #endif
  624. #ifdef YY_MALLOC_DECL
  625. YY_MALLOC_DECL
  626. #else
  627. #if __STDC__
  628. #ifndef __cplusplus
  629. #include <stdlib.h>
  630. #endif
  631. #else
  632. /* Just try to get by without declaring the routines.  This will fail
  633.  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
  634.  * or sizeof(void*) != sizeof(int).
  635.  */
  636. #endif
  637. #endif
  638. /* Amount of stuff to slurp up with each read. */
  639. #ifndef YY_READ_BUF_SIZE
  640. #define YY_READ_BUF_SIZE 8192
  641. #endif
  642. /* Copy whatever the last rule matched to the standard output. */
  643. #ifndef ECHO
  644. /* This used to be an fputs(), but since the string might contain NUL's,
  645.  * we now use fwrite().
  646.  */
  647. #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
  648. #endif
  649. /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
  650.  * is returned in "result".
  651.  */
  652. #ifndef YY_INPUT
  653. #define YY_INPUT(buf,result,max_size) 
  654. if ( yy_current_buffer->yy_is_interactive ) 
  655. int c = '*', n; 
  656. for ( n = 0; n < max_size && 
  657.      (c = getc( yyin )) != EOF && c != 'n'; ++n ) 
  658. buf[n] = (char) c; 
  659. if ( c == 'n' ) 
  660. buf[n++] = (char) c; 
  661. if ( c == EOF && ferror( yyin ) ) 
  662. YY_FATAL_ERROR( "input in flex scanner failed" ); 
  663. result = n; 
  664. else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) 
  665.   && ferror( yyin ) ) 
  666. YY_FATAL_ERROR( "input in flex scanner failed" );
  667. #endif
  668. /* No semi-colon after return; correct usage is to write "yyterminate();" -
  669.  * we don't want an extra ';' after the "return" because that will cause
  670.  * some compilers to complain about unreachable statements.
  671.  */
  672. #ifndef yyterminate
  673. #define yyterminate() return YY_NULL
  674. #endif
  675. /* Number of entries by which start-condition stack grows. */
  676. #ifndef YY_START_STACK_INCR
  677. #define YY_START_STACK_INCR 25
  678. #endif
  679. /* Report a fatal error. */
  680. #ifndef YY_FATAL_ERROR
  681. #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
  682. #endif
  683. /* Default declaration of generated scanner - a define so the user can
  684.  * easily add parameters.
  685.  */
  686. #ifndef YY_DECL
  687. #define YY_DECL int yylex YY_PROTO(( void ))
  688. #endif
  689. /* Code executed at the beginning of each rule, after yytext and yyleng
  690.  * have been set up.
  691.  */
  692. #ifndef YY_USER_ACTION
  693. #define YY_USER_ACTION
  694. #endif
  695. /* Code executed at the end of each rule. */
  696. #ifndef YY_BREAK
  697. #define YY_BREAK break;
  698. #endif
  699. #define YY_RULE_SETUP 
  700. YY_USER_ACTION
  701. YY_DECL
  702. {
  703. register yy_state_type yy_current_state;
  704. register char *yy_cp, *yy_bp;
  705. register int yy_act;
  706. #line 191 "scan.l"
  707. #line 841 "lex.yy.c"
  708. if ( yy_init )
  709. {
  710. yy_init = 0;
  711. #ifdef YY_USER_INIT
  712. YY_USER_INIT;
  713. #endif
  714. if ( ! yy_start )
  715. yy_start = 1; /* first start state */
  716. if ( ! yyin )
  717. yyin = stdin;
  718. if ( ! yyout )
  719. yyout = stdout;
  720. if ( ! yy_current_buffer )
  721. yy_current_buffer =
  722. yy_create_buffer( yyin, YY_BUF_SIZE );
  723. yy_load_buffer_state();
  724. }
  725. while ( 1 ) /* loops until end-of-file is reached */
  726. {
  727. yy_cp = yy_c_buf_p;
  728. /* Support of yytext. */
  729. *yy_cp = yy_hold_char;
  730. /* yy_bp points to the position in yy_ch_buf of the start of
  731.  * the current run.
  732.  */
  733. yy_bp = yy_cp;
  734. yy_current_state = yy_start;
  735. yy_state_ptr = yy_state_buf;
  736. *yy_state_ptr++ = yy_current_state;
  737. yy_match:
  738. do
  739. {
  740. register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
  741. while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  742. {
  743. yy_current_state = (int) yy_def[yy_current_state];
  744. if ( yy_current_state >= 133 )
  745. yy_c = yy_meta[(unsigned int) yy_c];
  746. }
  747. yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  748. *yy_state_ptr++ = yy_current_state;
  749. ++yy_cp;
  750. }
  751. while ( yy_base[yy_current_state] != 466 );
  752. yy_find_action:
  753. yy_current_state = *--yy_state_ptr;
  754. yy_lp = yy_accept[yy_current_state];
  755. find_rule: /* we branch to this label when backing up */
  756. for ( ; ; ) /* until we find what rule we matched */
  757. {
  758. if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
  759. {
  760. yy_act = yy_acclist[yy_lp];
  761. if ( yy_act & YY_TRAILING_HEAD_MASK ||
  762.      yy_looking_for_trail_begin )
  763. {
  764. if ( yy_act == yy_looking_for_trail_begin )
  765. {
  766. yy_looking_for_trail_begin = 0;
  767. yy_act &= ~YY_TRAILING_HEAD_MASK;
  768. break;
  769. }
  770. }
  771. else if ( yy_act & YY_TRAILING_MASK )
  772. {
  773. yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
  774. yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
  775. }
  776. else
  777. {
  778. yy_full_match = yy_cp;
  779. yy_full_state = yy_state_ptr;
  780. yy_full_lp = yy_lp;
  781. break;
  782. }
  783. ++yy_lp;
  784. goto find_rule;
  785. }
  786. --yy_cp;
  787. yy_current_state = *--yy_state_ptr;
  788. yy_lp = yy_accept[yy_current_state];
  789. }
  790. YY_DO_BEFORE_ACTION;
  791. do_action: /* This label is used only to access EOF actions. */
  792. switch ( yy_act )
  793. { /* beginning of action switch */
  794. case 1:
  795. YY_RULE_SETUP
  796. #line 192 "scan.l"
  797. { /* ignore */ }
  798. YY_BREAK
  799. case 2:
  800. YY_RULE_SETUP
  801. #line 194 "scan.l"
  802. { /* ignore */ }
  803. YY_BREAK
  804. case 3:
  805. #line 197 "scan.l"
  806. case 4:
  807. YY_RULE_SETUP
  808. #line 197 "scan.l"
  809. { BEGIN(xc); }
  810. YY_BREAK
  811. case 5:
  812. YY_RULE_SETUP
  813. #line 199 "scan.l"
  814. { BEGIN(INITIAL); }
  815. YY_BREAK
  816. case 6:
  817. YY_RULE_SETUP
  818. #line 201 "scan.l"
  819. { /* ignore */ }
  820. YY_BREAK
  821. case 7:
  822. YY_RULE_SETUP
  823. #line 203 "scan.l"
  824. {
  825. BEGIN(xb);
  826. llen = 0;
  827. *literal = '';
  828. }
  829. YY_BREAK
  830. case 8:
  831. YY_RULE_SETUP
  832. #line 208 "scan.l"
  833. {
  834. char* endptr;
  835. BEGIN(INITIAL);
  836. errno = 0;
  837. yylval.ival = strtol((char *)literal,&endptr,2);
  838. if (*endptr != '' || errno == ERANGE)
  839. elog(ERROR,"Bad binary integer input '%s'",literal);
  840. return ICONST;
  841. }
  842. YY_BREAK
  843. case 9:
  844. #line 219 "scan.l"
  845. case 10:
  846. YY_RULE_SETUP
  847. #line 219 "scan.l"
  848. {
  849. if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1))
  850. elog(ERROR,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
  851. memcpy(literal+llen, yytext, yyleng+1);
  852. llen += yyleng;
  853. }
  854. YY_BREAK
  855. case 11:
  856. #line 226 "scan.l"
  857. case 12:
  858. YY_RULE_SETUP
  859. #line 226 "scan.l"
  860. {
  861. }
  862. YY_BREAK
  863. case 13:
  864. YY_RULE_SETUP
  865. #line 229 "scan.l"
  866. {
  867. BEGIN(xh);
  868. llen = 0;
  869. *literal = '';
  870. }
  871. YY_BREAK
  872. case 14:
  873. YY_RULE_SETUP
  874. #line 234 "scan.l"
  875. {
  876. char* endptr;
  877. BEGIN(INITIAL);
  878. errno = 0;
  879. yylval.ival = strtol((char *)literal,&endptr,16);
  880. if (*endptr != '' || errno == ERANGE)
  881. elog(ERROR,"Bad hexadecimal integer input '%s'",literal);
  882. return ICONST;
  883. }
  884. YY_BREAK
  885. case 15:
  886. YY_RULE_SETUP
  887. #line 245 "scan.l"
  888. {
  889. BEGIN(xq);
  890. llen = 0;
  891. *literal = '';
  892. }
  893. YY_BREAK
  894. case 16:
  895. YY_RULE_SETUP
  896. #line 250 "scan.l"
  897. {
  898. BEGIN(INITIAL);
  899. yylval.str = pstrdup(scanstr(literal));
  900. return SCONST;
  901. }
  902. YY_BREAK
  903. case 17:
  904. #line 256 "scan.l"
  905. case 18:
  906. #line 257 "scan.l"
  907. case 19:
  908. YY_RULE_SETUP
  909. #line 257 "scan.l"
  910. {
  911. if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1))
  912. elog(ERROR,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
  913. memcpy(literal+llen, yytext, yyleng+1);
  914. llen += yyleng;
  915. }
  916. YY_BREAK
  917. case 20:
  918. YY_RULE_SETUP
  919. #line 263 "scan.l"
  920. {
  921. }
  922. YY_BREAK
  923. case 21:
  924. YY_RULE_SETUP
  925. #line 267 "scan.l"
  926. {
  927. BEGIN(xd);
  928. llen = 0;
  929. *literal = '';
  930. }
  931. YY_BREAK
  932. case 22:
  933. YY_RULE_SETUP
  934. #line 272 "scan.l"
  935. {
  936. BEGIN(INITIAL);
  937. yylval.str = pstrdup(literal);
  938. return IDENT;
  939. }
  940. YY_BREAK
  941. case 23:
  942. YY_RULE_SETUP
  943. #line 277 "scan.l"
  944. {
  945. if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1))
  946. elog(ERROR,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
  947. memcpy(literal+llen, yytext, yyleng+1);
  948. llen += yyleng;
  949. }
  950. YY_BREAK
  951. case 24:
  952. YY_RULE_SETUP
  953. #line 285 "scan.l"
  954. { /* ignore */ }
  955. YY_BREAK
  956. case 25:
  957. YY_RULE_SETUP
  958. #line 286 "scan.l"
  959. {
  960. BEGIN(INITIAL);
  961. return yytext[0];
  962. }
  963. YY_BREAK
  964. case 26:
  965. YY_RULE_SETUP
  966. #line 292 "scan.l"
  967. { return TYPECAST; }
  968. YY_BREAK
  969. case 27:
  970. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  971. yy_c_buf_p = yy_cp = yy_bp + 1;
  972. YY_DO_BEFORE_ACTION; /* set up yytext again */
  973. YY_RULE_SETUP
  974. #line 294 "scan.l"
  975. {
  976. BEGIN(xm);
  977. return yytext[0];
  978. }
  979. YY_BREAK
  980. case 28:
  981. YY_RULE_SETUP
  982. #line 298 "scan.l"
  983. {  return yytext[0]; }
  984. YY_BREAK
  985. case 29:
  986. YY_RULE_SETUP
  987. #line 299 "scan.l"
  988. {  return yytext[0]; }
  989. YY_BREAK
  990. case 30:
  991. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  992. yy_c_buf_p = yy_cp -= 2;
  993. YY_DO_BEFORE_ACTION; /* set up yytext again */
  994. YY_RULE_SETUP
  995. #line 300 "scan.l"
  996. {
  997. yylval.str = pstrdup((char*)yytext);
  998. return Op;
  999. }
  1000. YY_BREAK
  1001. case 31:
  1002. YY_RULE_SETUP
  1003. #line 304 "scan.l"
  1004. {
  1005. if (strcmp((char*)yytext,"!=") == 0)
  1006. yylval.str = pstrdup("<>"); /* compatability */
  1007. else
  1008. yylval.str = pstrdup((char*)yytext);
  1009. return Op;
  1010. }
  1011. YY_BREAK
  1012. case 32:
  1013. YY_RULE_SETUP
  1014. #line 311 "scan.l"
  1015. {
  1016. yylval.ival = atoi((char*)&yytext[1]);
  1017. return PARAM;
  1018. }
  1019. YY_BREAK
  1020. case 33:
  1021. YY_RULE_SETUP
  1022. #line 317 "scan.l"
  1023. {
  1024. int i;
  1025. ScanKeyword *keyword;
  1026. BEGIN(xm);
  1027. for(i = 0; yytext[i]; i++)
  1028. if (isascii((unsigned char)yytext[i]) &&
  1029. isupper(yytext[i]))
  1030. yytext[i] = tolower(yytext[i]);
  1031. if (i >= NAMEDATALEN)
  1032. yytext[NAMEDATALEN-1] = '';
  1033. keyword = ScanKeywordLookup((char*)yytext);
  1034. if (keyword != NULL) {
  1035. return keyword->value;
  1036. }
  1037. else
  1038. {
  1039. yylval.str = pstrdup((char*)yytext);
  1040. return IDENT;
  1041. }
  1042. }
  1043. YY_BREAK
  1044. case 34:
  1045. YY_RULE_SETUP
  1046. #line 339 "scan.l"
  1047. {
  1048. char* endptr;
  1049. BEGIN(xm);
  1050. errno = 0;
  1051. yylval.ival = strtol((char *)yytext,&endptr,10);
  1052. if (*endptr != '' || errno == ERANGE)
  1053. {
  1054. errno = 0;
  1055. #if 0
  1056. yylval.dval = strtod(((char *)yytext),&endptr);
  1057. if (*endptr != '' || errno == ERANGE)
  1058. elog(ERROR,"Bad integer input '%s'",yytext);
  1059. CheckFloat8Val(yylval.dval);
  1060. elog(NOTICE,"Integer input '%s' is out of range; promoted to float", yytext);
  1061. return FCONST;
  1062. #endif
  1063. yylval.str = pstrdup((char*)yytext);
  1064. return SCONST;
  1065. }
  1066. return ICONST;
  1067. }
  1068. YY_BREAK
  1069. case 35:
  1070. YY_RULE_SETUP
  1071. #line 361 "scan.l"
  1072. {
  1073. char* endptr;
  1074. BEGIN(xm);
  1075. if (strlen((char *)yytext) <= 17)
  1076. {
  1077. errno = 0;
  1078. yylval.dval = strtod(((char *)yytext),&endptr);
  1079. if (*endptr != '' || errno == ERANGE)
  1080. elog(ERROR,"Bad float8 input '%s'",yytext);
  1081. CheckFloat8Val(yylval.dval);
  1082. return FCONST;
  1083. }
  1084. yylval.str = pstrdup((char*)yytext);
  1085. return SCONST;
  1086. }
  1087. YY_BREAK
  1088. case 36:
  1089. YY_RULE_SETUP
  1090. #line 377 "scan.l"
  1091. {
  1092. char* endptr;
  1093. BEGIN(xm);
  1094. errno = 0;
  1095. yylval.dval = strtod(((char *)yytext),&endptr);
  1096. if (*endptr != '' || errno == ERANGE)
  1097. elog(ERROR,"Bad float8 input '%s'",yytext);
  1098. CheckFloat8Val(yylval.dval);
  1099. return FCONST;
  1100. }
  1101. YY_BREAK
  1102. case 37:
  1103. YY_RULE_SETUP
  1104. #line 388 "scan.l"
  1105. {
  1106. char* endptr;
  1107. errno = 0;
  1108. yylval.ival = strtol((char *)yytext,&endptr,10);
  1109. if (*endptr != '' || errno == ERANGE)
  1110. {
  1111. errno = 0;
  1112. #if 0
  1113. yylval.dval = strtod(((char *)yytext),&endptr);
  1114. if (*endptr != '' || errno == ERANGE)
  1115. elog(ERROR,"Bad integer input '%s'",yytext);
  1116. CheckFloat8Val(yylval.dval);
  1117. elog(NOTICE,"Integer input '%s' is out of range; promoted to float", yytext);
  1118. return FCONST;
  1119. #endif
  1120. yylval.str = pstrdup((char*)yytext);
  1121. return SCONST;
  1122. }
  1123. return ICONST;
  1124. }
  1125. YY_BREAK
  1126. case 38:
  1127. YY_RULE_SETUP
  1128. #line 409 "scan.l"
  1129. {
  1130. char* endptr;
  1131. if (strlen((char *)yytext) <= 17)
  1132. {
  1133. errno = 0;
  1134. yylval.dval = strtod((char *)yytext,&endptr);
  1135. if (*endptr != '' || errno == ERANGE)
  1136. elog(ERROR,"Bad float input '%s'",yytext);
  1137. CheckFloat8Val(yylval.dval);
  1138. return FCONST;
  1139. }
  1140. yylval.str = pstrdup((char*)yytext);
  1141. return SCONST;
  1142. }
  1143. YY_BREAK
  1144. case 39:
  1145. YY_RULE_SETUP
  1146. #line 424 "scan.l"
  1147. {
  1148. char* endptr;
  1149. errno = 0;
  1150. yylval.dval = strtod((char *)yytext,&endptr);
  1151. if (*endptr != '' || errno == ERANGE)
  1152. elog(ERROR,"Bad float input '%s'",yytext);
  1153. CheckFloat8Val(yylval.dval);
  1154. return FCONST;
  1155. }
  1156. YY_BREAK
  1157. case 40:
  1158. YY_RULE_SETUP
  1159. #line 436 "scan.l"
  1160. {
  1161. int i;
  1162. ScanKeyword *keyword;
  1163. for(i = 0; yytext[i]; i++)
  1164. if (isascii((unsigned char)yytext[i]) &&
  1165. isupper(yytext[i]))
  1166. yytext[i] = tolower(yytext[i]);
  1167. if (i >= NAMEDATALEN)
  1168. yytext[NAMEDATALEN-1] = '';
  1169. keyword = ScanKeywordLookup((char*)yytext);
  1170. if (keyword != NULL) {
  1171. return keyword->value;
  1172. }
  1173. else
  1174. {
  1175. yylval.str = pstrdup((char*)yytext);
  1176. return IDENT;
  1177. }
  1178. }
  1179. YY_BREAK
  1180. case 41:
  1181. YY_RULE_SETUP
  1182. #line 457 "scan.l"
  1183. { /* ignore */ }
  1184. YY_BREAK
  1185. case 42:
  1186. YY_RULE_SETUP
  1187. #line 459 "scan.l"
  1188. { return yytext[0]; }
  1189. YY_BREAK
  1190. case 43:
  1191. YY_RULE_SETUP
  1192. #line 461 "scan.l"
  1193. ECHO;
  1194. YY_BREAK
  1195. #line 1358 "lex.yy.c"
  1196. case YY_STATE_EOF(INITIAL):
  1197. case YY_STATE_EOF(xb):
  1198. case YY_STATE_EOF(xc):
  1199. case YY_STATE_EOF(xd):
  1200. case YY_STATE_EOF(xh):
  1201. case YY_STATE_EOF(xm):
  1202. case YY_STATE_EOF(xq):
  1203. yyterminate();
  1204. case YY_END_OF_BUFFER:
  1205. {
  1206. /* Amount of text matched not including the EOB char. */
  1207. int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
  1208. /* Undo the effects of YY_DO_BEFORE_ACTION. */
  1209. *yy_cp = yy_hold_char;
  1210. YY_RESTORE_YY_MORE_OFFSET
  1211. if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
  1212. {
  1213. /* We're scanning a new file or input source.  It's
  1214.  * possible that this happened because the user
  1215.  * just pointed yyin at a new source and called
  1216.  * yylex().  If so, then we have to assure
  1217.  * consistency between yy_current_buffer and our
  1218.  * globals.  Here is the right place to do so, because
  1219.  * this is the first action (other than possibly a
  1220.  * back-up) that will match for the new input source.
  1221.  */
  1222. yy_n_chars = yy_current_buffer->yy_n_chars;
  1223. yy_current_buffer->yy_input_file = yyin;
  1224. yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
  1225. }
  1226. /* Note that here we test for yy_c_buf_p "<=" to the position
  1227.  * of the first EOB in the buffer, since yy_c_buf_p will
  1228.  * already have been incremented past the NUL character
  1229.  * (since all states make transitions on EOB to the
  1230.  * end-of-buffer state).  Contrast this with the test
  1231.  * in input().
  1232.  */
  1233. if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  1234. { /* This was really a NUL. */
  1235. yy_state_type yy_next_state;
  1236. yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
  1237. yy_current_state = yy_get_previous_state();
  1238. /* Okay, we're now positioned to make the NUL
  1239.  * transition.  We couldn't have
  1240.  * yy_get_previous_state() go ahead and do it
  1241.  * for us because it doesn't know how to deal
  1242.  * with the possibility of jamming (and we don't
  1243.  * want to build jamming into it because then it
  1244.  * will run more slowly).
  1245.  */
  1246. yy_next_state = yy_try_NUL_trans( yy_current_state );
  1247. yy_bp = yytext_ptr + YY_MORE_ADJ;
  1248. if ( yy_next_state )
  1249. {
  1250. /* Consume the NUL. */
  1251. yy_cp = ++yy_c_buf_p;
  1252. yy_current_state = yy_next_state;
  1253. goto yy_match;
  1254. }
  1255. else
  1256. {
  1257. yy_cp = yy_c_buf_p;
  1258. goto yy_find_action;
  1259. }
  1260. }
  1261. else switch ( yy_get_next_buffer() )
  1262. {
  1263. case EOB_ACT_END_OF_FILE:
  1264. {
  1265. yy_did_buffer_switch_on_eof = 0;
  1266. if ( yywrap() )
  1267. {
  1268. /* Note: because we've taken care in
  1269.  * yy_get_next_buffer() to have set up
  1270.  * yytext, we can now set up
  1271.  * yy_c_buf_p so that if some total
  1272.  * hoser (like flex itself) wants to
  1273.  * call the scanner after we return the
  1274.  * YY_NULL, it'll still work - another
  1275.  * YY_NULL will get returned.
  1276.  */
  1277. yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
  1278. yy_act = YY_STATE_EOF(YY_START);
  1279. goto do_action;
  1280. }
  1281. else
  1282. {
  1283. if ( ! yy_did_buffer_switch_on_eof )
  1284. YY_NEW_FILE;
  1285. }
  1286. break;
  1287. }
  1288. case EOB_ACT_CONTINUE_SCAN:
  1289. yy_c_buf_p =
  1290. yytext_ptr + yy_amount_of_matched_text;
  1291. yy_current_state = yy_get_previous_state();
  1292. yy_cp = yy_c_buf_p;
  1293. yy_bp = yytext_ptr + YY_MORE_ADJ;
  1294. goto yy_match;
  1295. case EOB_ACT_LAST_MATCH:
  1296. yy_c_buf_p =
  1297. &yy_current_buffer->yy_ch_buf[yy_n_chars];
  1298. yy_current_state = yy_get_previous_state();
  1299. yy_cp = yy_c_buf_p;
  1300. yy_bp = yytext_ptr + YY_MORE_ADJ;
  1301. goto yy_find_action;
  1302. }
  1303. break;
  1304. }
  1305. default:
  1306. YY_FATAL_ERROR(
  1307. "fatal flex scanner internal error--no action found" );
  1308. } /* end of action switch */
  1309. } /* end of scanning one token */
  1310. } /* end of yylex */
  1311. /* yy_get_next_buffer - try to read in a new buffer
  1312.  *
  1313.  * Returns a code representing an action:
  1314.  * EOB_ACT_LAST_MATCH -
  1315.  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
  1316.  * EOB_ACT_END_OF_FILE - end of file
  1317.  */
  1318. static int yy_get_next_buffer()
  1319. {
  1320. register char *dest = yy_current_buffer->yy_ch_buf;
  1321. register char *source = yytext_ptr;
  1322. register int number_to_move, i;
  1323. int ret_val;
  1324. if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
  1325. YY_FATAL_ERROR(
  1326. "fatal flex scanner internal error--end of buffer missed" );
  1327. if ( yy_current_buffer->yy_fill_buffer == 0 )
  1328. { /* Don't try to fill the buffer, so this is an EOF. */
  1329. if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
  1330. {
  1331. /* We matched a single character, the EOB, so
  1332.  * treat this as a final EOF.
  1333.  */
  1334. return EOB_ACT_END_OF_FILE;
  1335. }
  1336. else
  1337. {
  1338. /* We matched some text prior to the EOB, first
  1339.  * process it.
  1340.  */
  1341. return EOB_ACT_LAST_MATCH;
  1342. }
  1343. }
  1344. /* Try to read more data. */
  1345. /* First move last chars to start of buffer. */
  1346. number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
  1347. for ( i = 0; i < number_to_move; ++i )
  1348. *(dest++) = *(source++);
  1349. if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
  1350. /* don't do the read, it's not guaranteed to return an EOF,
  1351.  * just force an EOF
  1352.  */
  1353. yy_current_buffer->yy_n_chars = yy_n_chars = 0;
  1354. else
  1355. {
  1356. int num_to_read =
  1357. yy_current_buffer->yy_buf_size - number_to_move - 1;
  1358. while ( num_to_read <= 0 )
  1359. { /* Not enough room in the buffer - grow it. */
  1360. #ifdef YY_USES_REJECT
  1361. YY_FATAL_ERROR(
  1362. "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
  1363. #else
  1364. /* just a shorter name for the current buffer */
  1365. YY_BUFFER_STATE b = yy_current_buffer;
  1366. int yy_c_buf_p_offset =
  1367. (int) (yy_c_buf_p - b->yy_ch_buf);
  1368. if ( b->yy_is_our_buffer )
  1369. {
  1370. int new_size = b->yy_buf_size * 2;
  1371. if ( new_size <= 0 )
  1372. b->yy_buf_size += b->yy_buf_size / 8;
  1373. else
  1374. b->yy_buf_size *= 2;
  1375. b->yy_ch_buf = (char *)
  1376. /* Include room in for 2 EOB chars. */
  1377. yy_flex_realloc( (void *) b->yy_ch_buf,
  1378.  b->yy_buf_size + 2 );
  1379. }
  1380. else
  1381. /* Can't grow it, we don't own it. */
  1382. b->yy_ch_buf = 0;
  1383. if ( ! b->yy_ch_buf )
  1384. YY_FATAL_ERROR(
  1385. "fatal error - scanner input buffer overflow" );
  1386. yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
  1387. num_to_read = yy_current_buffer->yy_buf_size -
  1388. number_to_move - 1;
  1389. #endif
  1390. }
  1391. if ( num_to_read > YY_READ_BUF_SIZE )
  1392. num_to_read = YY_READ_BUF_SIZE;
  1393. /* Read in more data. */
  1394. YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
  1395. yy_n_chars, num_to_read );
  1396. yy_current_buffer->yy_n_chars = yy_n_chars;
  1397. }
  1398. if ( yy_n_chars == 0 )
  1399. {
  1400. if ( number_to_move == YY_MORE_ADJ )
  1401. {
  1402. ret_val = EOB_ACT_END_OF_FILE;
  1403. yyrestart( yyin );
  1404. }
  1405. else
  1406. {
  1407. ret_val = EOB_ACT_LAST_MATCH;
  1408. yy_current_buffer->yy_buffer_status =
  1409. YY_BUFFER_EOF_PENDING;
  1410. }
  1411. }
  1412. else
  1413. ret_val = EOB_ACT_CONTINUE_SCAN;
  1414. yy_n_chars += number_to_move;
  1415. yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
  1416. yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
  1417. yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
  1418. return ret_val;
  1419. }
  1420. /* yy_get_previous_state - get the state just before the EOB char was reached */
  1421. static yy_state_type yy_get_previous_state()
  1422. {
  1423. register yy_state_type yy_current_state;
  1424. register char *yy_cp;
  1425. yy_current_state = yy_start;
  1426. yy_state_ptr = yy_state_buf;
  1427. *yy_state_ptr++ = yy_current_state;
  1428. for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
  1429. {
  1430. register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
  1431. while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  1432. {
  1433. yy_current_state = (int) yy_def[yy_current_state];
  1434. if ( yy_current_state >= 133 )
  1435. yy_c = yy_meta[(unsigned int) yy_c];
  1436. }
  1437. yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  1438. *yy_state_ptr++ = yy_current_state;
  1439. }
  1440. return yy_current_state;
  1441. }
  1442. /* yy_try_NUL_trans - try to make a transition on the NUL character
  1443.  *
  1444.  * synopsis
  1445.  * next_state = yy_try_NUL_trans( current_state );
  1446.  */
  1447. #ifdef YY_USE_PROTOS
  1448. static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
  1449. #else
  1450. static yy_state_type yy_try_NUL_trans( yy_current_state )
  1451. yy_state_type yy_current_state;
  1452. #endif
  1453. {
  1454. register int yy_is_jam;
  1455. register YY_CHAR yy_c = 1;
  1456. while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  1457. {
  1458. yy_current_state = (int) yy_def[yy_current_state];
  1459. if ( yy_current_state >= 133 )
  1460. yy_c = yy_meta[(unsigned int) yy_c];
  1461. }
  1462. yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  1463. yy_is_jam = (yy_current_state == 132);
  1464. if ( ! yy_is_jam )
  1465. *yy_state_ptr++ = yy_current_state;
  1466. return yy_is_jam ? 0 : yy_current_state;
  1467. }
  1468. #ifndef YY_NO_UNPUT
  1469. #ifdef YY_USE_PROTOS
  1470. static void yyunput( int c, register char *yy_bp )
  1471. #else
  1472. static void yyunput( c, yy_bp )
  1473. int c;
  1474. register char *yy_bp;
  1475. #endif
  1476. {
  1477. register char *yy_cp = yy_c_buf_p;
  1478. /* undo effects of setting up yytext */
  1479. *yy_cp = yy_hold_char;
  1480. if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  1481. { /* need to shift things up to make room */
  1482. /* +2 for EOB chars. */
  1483. register int number_to_move = yy_n_chars + 2;
  1484. register char *dest = &yy_current_buffer->yy_ch_buf[
  1485. yy_current_buffer->yy_buf_size + 2];
  1486. register char *source =
  1487. &yy_current_buffer->yy_ch_buf[number_to_move];
  1488. while ( source > yy_current_buffer->yy_ch_buf )
  1489. *--dest = *--source;
  1490. yy_cp += (int) (dest - source);
  1491. yy_bp += (int) (dest - source);
  1492. yy_current_buffer->yy_n_chars =
  1493. yy_n_chars = yy_current_buffer->yy_buf_size;
  1494. if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  1495. YY_FATAL_ERROR( "flex scanner push-back overflow" );
  1496. }
  1497. *--yy_cp = (char) c;
  1498. yytext_ptr = yy_bp;
  1499. yy_hold_char = *yy_cp;
  1500. yy_c_buf_p = yy_cp;
  1501. }
  1502. #endif /* ifndef YY_NO_UNPUT */
  1503. #ifdef __cplusplus
  1504. static int yyinput()
  1505. #else
  1506. static int input()
  1507. #endif
  1508. {
  1509. int c;
  1510. *yy_c_buf_p = yy_hold_char;
  1511. if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
  1512. {
  1513. /* yy_c_buf_p now points to the character we want to return.
  1514.  * If this occurs *before* the EOB characters, then it's a
  1515.  * valid NUL; if not, then we've hit the end of the buffer.
  1516.  */
  1517. if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  1518. /* This was really a NUL. */
  1519. *yy_c_buf_p = '';
  1520. else
  1521. { /* need more input */
  1522. int offset = yy_c_buf_p - yytext_ptr;
  1523. ++yy_c_buf_p;
  1524. switch ( yy_get_next_buffer() )
  1525. {
  1526. case EOB_ACT_LAST_MATCH:
  1527. /* This happens because yy_g_n_b()
  1528.  * sees that we've accumulated a
  1529.  * token and flags that we need to
  1530.  * try matching the token before
  1531.  * proceeding.  But for input(),
  1532.  * there's no matching to consider.
  1533.  * So convert the EOB_ACT_LAST_MATCH
  1534.  * to EOB_ACT_END_OF_FILE.
  1535.  */
  1536. /* Reset buffer status. */
  1537. yyrestart( yyin );
  1538. /* fall through */
  1539. case EOB_ACT_END_OF_FILE:
  1540. {
  1541. if ( yywrap() )
  1542. return EOF;
  1543. if ( ! yy_did_buffer_switch_on_eof )
  1544. YY_NEW_FILE;
  1545. #ifdef __cplusplus
  1546. return yyinput();
  1547. #else
  1548. return input();
  1549. #endif
  1550. }
  1551. case EOB_ACT_CONTINUE_SCAN:
  1552. yy_c_buf_p = yytext_ptr + offset;
  1553. break;
  1554. }
  1555. }
  1556. }
  1557. c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
  1558. *yy_c_buf_p = ''; /* preserve yytext */
  1559. yy_hold_char = *++yy_c_buf_p;
  1560. return c;
  1561. }
  1562. #ifdef YY_USE_PROTOS
  1563. void yyrestart( FILE *input_file )
  1564. #else
  1565. void yyrestart( input_file )
  1566. FILE *input_file;
  1567. #endif
  1568. {
  1569. if ( ! yy_current_buffer )
  1570. yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
  1571. yy_init_buffer( yy_current_buffer, input_file );
  1572. yy_load_buffer_state();
  1573. }
  1574. #ifdef YY_USE_PROTOS
  1575. void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
  1576. #else
  1577. void yy_switch_to_buffer( new_buffer )
  1578. YY_BUFFER_STATE new_buffer;
  1579. #endif
  1580. {
  1581. if ( yy_current_buffer == new_buffer )
  1582. return;
  1583. if ( yy_current_buffer )
  1584. {
  1585. /* Flush out information for old buffer. */
  1586. *yy_c_buf_p = yy_hold_char;
  1587. yy_current_buffer->yy_buf_pos = yy_c_buf_p;
  1588. yy_current_buffer->yy_n_chars = yy_n_chars;
  1589. }
  1590. yy_current_buffer = new_buffer;
  1591. yy_load_buffer_state();
  1592. /* We don't actually know whether we did this switch during
  1593.  * EOF (yywrap()) processing, but the only time this flag
  1594.  * is looked at is after yywrap() is called, so it's safe
  1595.  * to go ahead and always set it.
  1596.  */
  1597. yy_did_buffer_switch_on_eof = 1;
  1598. }
  1599. #ifdef YY_USE_PROTOS
  1600. void yy_load_buffer_state( void )
  1601. #else
  1602. void yy_load_buffer_state()
  1603. #endif
  1604. {
  1605. yy_n_chars = yy_current_buffer->yy_n_chars;
  1606. yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
  1607. yyin = yy_current_buffer->yy_input_file;
  1608. yy_hold_char = *yy_c_buf_p;
  1609. }
  1610. #ifdef YY_USE_PROTOS
  1611. YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
  1612. #else
  1613. YY_BUFFER_STATE yy_create_buffer( file, size )
  1614. FILE *file;
  1615. int size;
  1616. #endif
  1617. {
  1618. YY_BUFFER_STATE b;
  1619. b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
  1620. if ( ! b )
  1621. YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  1622. b->yy_buf_size = size;
  1623. /* yy_ch_buf has to be 2 characters longer than the size given because
  1624.  * we need to put in 2 end-of-buffer characters.
  1625.  */
  1626. b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
  1627. if ( ! b->yy_ch_buf )
  1628. YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  1629. b->yy_is_our_buffer = 1;
  1630. yy_init_buffer( b, file );
  1631. return b;
  1632. }
  1633. #ifdef YY_USE_PROTOS
  1634. void yy_delete_buffer( YY_BUFFER_STATE b )
  1635. #else
  1636. void yy_delete_buffer( b )
  1637. YY_BUFFER_STATE b;
  1638. #endif
  1639. {
  1640. if ( ! b )
  1641. return;
  1642. if ( b == yy_current_buffer )
  1643. yy_current_buffer = (YY_BUFFER_STATE) 0;
  1644. if ( b->yy_is_our_buffer )
  1645. yy_flex_free( (void *) b->yy_ch_buf );
  1646. yy_flex_free( (void *) b );
  1647. }
  1648. #ifndef YY_ALWAYS_INTERACTIVE
  1649. #ifndef YY_NEVER_INTERACTIVE
  1650. extern int isatty YY_PROTO(( int ));
  1651. #endif
  1652. #endif
  1653. #ifdef YY_USE_PROTOS
  1654. void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
  1655. #else
  1656. void yy_init_buffer( b, file )
  1657. YY_BUFFER_STATE b;
  1658. FILE *file;
  1659. #endif
  1660. {
  1661. yy_flush_buffer( b );
  1662. b->yy_input_file = file;
  1663. b->yy_fill_buffer = 1;
  1664. #if YY_ALWAYS_INTERACTIVE
  1665. b->yy_is_interactive = 1;
  1666. #else
  1667. #if YY_NEVER_INTERACTIVE
  1668. b->yy_is_interactive = 0;
  1669. #else
  1670. b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
  1671. #endif
  1672. #endif
  1673. }
  1674. #ifdef YY_USE_PROTOS
  1675. void yy_flush_buffer( YY_BUFFER_STATE b )
  1676. #else
  1677. void yy_flush_buffer( b )
  1678. YY_BUFFER_STATE b;
  1679. #endif
  1680. {
  1681. if ( ! b )
  1682. return;
  1683. b->yy_n_chars = 0;
  1684. /* We always need two end-of-buffer characters.  The first causes
  1685.  * a transition to the end-of-buffer state.  The second causes
  1686.  * a jam in that state.
  1687.  */
  1688. b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
  1689. b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
  1690. b->yy_buf_pos = &b->yy_ch_buf[0];
  1691. b->yy_at_bol = 1;
  1692. b->yy_buffer_status = YY_BUFFER_NEW;
  1693. if ( b == yy_current_buffer )
  1694. yy_load_buffer_state();
  1695. }
  1696. #ifndef YY_NO_SCAN_BUFFER
  1697. #ifdef YY_USE_PROTOS
  1698. YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
  1699. #else
  1700. YY_BUFFER_STATE yy_scan_buffer( base, size )
  1701. char *base;
  1702. yy_size_t size;
  1703. #endif
  1704. {
  1705. YY_BUFFER_STATE b;
  1706. if ( size < 2 ||
  1707.      base[size-2] != YY_END_OF_BUFFER_CHAR ||
  1708.      base[size-1] != YY_END_OF_BUFFER_CHAR )
  1709. /* They forgot to leave room for the EOB's. */
  1710. return 0;
  1711. b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
  1712. if ( ! b )
  1713. YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
  1714. b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
  1715. b->yy_buf_pos = b->yy_ch_buf = base;
  1716. b->yy_is_our_buffer = 0;
  1717. b->yy_input_file = 0;
  1718. b->yy_n_chars = b->yy_buf_size;
  1719. b->yy_is_interactive = 0;
  1720. b->yy_at_bol = 1;
  1721. b->yy_fill_buffer = 0;
  1722. b->yy_buffer_status = YY_BUFFER_NEW;
  1723. yy_switch_to_buffer( b );
  1724. return b;
  1725. }
  1726. #endif
  1727. #ifndef YY_NO_SCAN_STRING
  1728. #ifdef YY_USE_PROTOS
  1729. YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
  1730. #else
  1731. YY_BUFFER_STATE yy_scan_string( yy_str )
  1732. yyconst char *yy_str;
  1733. #endif
  1734. {
  1735. int len;
  1736. for ( len = 0; yy_str[len]; ++len )
  1737. ;
  1738. return yy_scan_bytes( yy_str, len );
  1739. }
  1740. #endif
  1741. #ifndef YY_NO_SCAN_BYTES
  1742. #ifdef YY_USE_PROTOS
  1743. YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
  1744. #else
  1745. YY_BUFFER_STATE yy_scan_bytes( bytes, len )
  1746. yyconst char *bytes;
  1747. int len;
  1748. #endif
  1749. {
  1750. YY_BUFFER_STATE b;
  1751. char *buf;
  1752. yy_size_t n;
  1753. int i;
  1754. /* Get memory for full buffer, including space for trailing EOB's. */
  1755. n = len + 2;
  1756. buf = (char *) yy_flex_alloc( n );
  1757. if ( ! buf )
  1758. YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
  1759. for ( i = 0; i < len; ++i )
  1760. buf[i] = bytes[i];
  1761. buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
  1762. b = yy_scan_buffer( buf, n );
  1763. if ( ! b )
  1764. YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
  1765. /* It's okay to grow etc. this buffer, and we should throw it
  1766.  * away when we're done.
  1767.  */
  1768. b->yy_is_our_buffer = 1;
  1769. return b;
  1770. }
  1771. #endif
  1772. #ifndef YY_NO_PUSH_STATE
  1773. #ifdef YY_USE_PROTOS
  1774. static void yy_push_state( int new_state )
  1775. #else
  1776. static void yy_push_state( new_state )
  1777. int new_state;
  1778. #endif
  1779. {
  1780. if ( yy_start_stack_ptr >= yy_start_stack_depth )
  1781. {
  1782. yy_size_t new_size;
  1783. yy_start_stack_depth += YY_START_STACK_INCR;
  1784. new_size = yy_start_stack_depth * sizeof( int );
  1785. if ( ! yy_start_stack )
  1786. yy_start_stack = (int *) yy_flex_alloc( new_size );
  1787. else
  1788. yy_start_stack = (int *) yy_flex_realloc(
  1789. (void *) yy_start_stack, new_size );
  1790. if ( ! yy_start_stack )
  1791. YY_FATAL_ERROR(
  1792. "out of memory expanding start-condition stack" );
  1793. }
  1794. yy_start_stack[yy_start_stack_ptr++] = YY_START;
  1795. BEGIN(new_state);
  1796. }
  1797. #endif
  1798. #ifndef YY_NO_POP_STATE
  1799. static void yy_pop_state()
  1800. {
  1801. if ( --yy_start_stack_ptr < 0 )
  1802. YY_FATAL_ERROR( "start-condition stack underflow" );
  1803. BEGIN(yy_start_stack[yy_start_stack_ptr]);
  1804. }
  1805. #endif
  1806. #ifndef YY_NO_TOP_STATE
  1807. static int yy_top_state()
  1808. {
  1809. return yy_start_stack[yy_start_stack_ptr - 1];
  1810. }
  1811. #endif
  1812. #ifndef YY_EXIT_FAILURE
  1813. #define YY_EXIT_FAILURE 2
  1814. #endif
  1815. #ifdef YY_USE_PROTOS
  1816. static void yy_fatal_error( yyconst char msg[] )
  1817. #else
  1818. static void yy_fatal_error( msg )
  1819. char msg[];
  1820. #endif
  1821. {
  1822. (void) fprintf( stderr, "%sn", msg );
  1823. exit( YY_EXIT_FAILURE );
  1824. }
  1825. /* Redefine yyless() so it works in section 3 code. */
  1826. #undef yyless
  1827. #define yyless(n) 
  1828. do 
  1829. /* Undo effects of setting up yytext. */ 
  1830. yytext[yyleng] = yy_hold_char; 
  1831. yy_c_buf_p = yytext + n; 
  1832. yy_hold_char = *yy_c_buf_p; 
  1833. *yy_c_buf_p = ''; 
  1834. yyleng = n; 
  1835. while ( 0 )
  1836. /* Internal utility routines. */
  1837. #ifndef yytext_ptr
  1838. #ifdef YY_USE_PROTOS
  1839. static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
  1840. #else
  1841. static void yy_flex_strncpy( s1, s2, n )
  1842. char *s1;
  1843. yyconst char *s2;
  1844. int n;
  1845. #endif
  1846. {
  1847. register int i;
  1848. for ( i = 0; i < n; ++i )
  1849. s1[i] = s2[i];
  1850. }
  1851. #endif
  1852. #ifdef YY_NEED_STRLEN
  1853. #ifdef YY_USE_PROTOS
  1854. static int yy_flex_strlen( yyconst char *s )
  1855. #else
  1856. static int yy_flex_strlen( s )
  1857. yyconst char *s;
  1858. #endif
  1859. {
  1860. register int n;
  1861. for ( n = 0; s[n]; ++n )
  1862. ;
  1863. return n;
  1864. }
  1865. #endif
  1866. #ifdef YY_USE_PROTOS
  1867. static void *yy_flex_alloc( yy_size_t size )
  1868. #else
  1869. static void *yy_flex_alloc( size )
  1870. yy_size_t size;
  1871. #endif
  1872. {
  1873. return (void *) malloc( size );
  1874. }
  1875. #ifdef YY_USE_PROTOS
  1876. static void *yy_flex_realloc( void *ptr, yy_size_t size )
  1877. #else
  1878. static void *yy_flex_realloc( ptr, size )
  1879. void *ptr;
  1880. yy_size_t size;
  1881. #endif
  1882. {
  1883. /* The cast to (char *) in the following accommodates both
  1884.  * implementations that use char* generic pointers, and those
  1885.  * that use void* generic pointers.  It works with the latter
  1886.  * because both ANSI C and C++ allow castless assignment from
  1887.  * any pointer type to void*, and deal with argument conversions
  1888.  * as though doing an assignment.
  1889.  */
  1890. return (void *) realloc( (char *) ptr, size );
  1891. }
  1892. #ifdef YY_USE_PROTOS
  1893. static void yy_flex_free( void *ptr )
  1894. #else
  1895. static void yy_flex_free( ptr )
  1896. void *ptr;
  1897. #endif
  1898. {
  1899. free( ptr );
  1900. }
  1901. #if YY_MAIN
  1902. int main()
  1903. {
  1904. yylex();
  1905. return 0;
  1906. }
  1907. #endif
  1908. #line 461 "scan.l"
  1909. void yyerror(char message[])
  1910. {
  1911. elog(ERROR, "parser: %s at or near "%s"", message, yytext);
  1912. }
  1913. int yywrap()
  1914. {
  1915. return(1);
  1916. }
  1917. /*
  1918.  init_io:
  1919. called by postgres before any actual parsing is done
  1920. */
  1921. void
  1922. init_io()
  1923. {
  1924. /* it's important to set this to NULL
  1925.    because input()/myinput() checks the non-nullness of parseCh
  1926.    to know when to pass the string to lex/flex */
  1927. parseCh = NULL;
  1928. #if defined(FLEX_SCANNER)
  1929. if (YY_CURRENT_BUFFER)
  1930. yy_flush_buffer(YY_CURRENT_BUFFER);
  1931. #endif /* FLEX_SCANNER */
  1932. BEGIN INITIAL;
  1933. }
  1934. #if !defined(FLEX_SCANNER)
  1935. /* get lex input from a string instead of from stdin */
  1936. int
  1937. input()
  1938. {
  1939. if (parseCh == NULL)
  1940. {
  1941. parseCh = parseString;
  1942. return(*parseCh++);
  1943. }
  1944. else if (*parseCh == '')
  1945. return(0);
  1946. else
  1947. return(*parseCh++);
  1948. }
  1949. /* undo lex input from a string instead of from stdin */
  1950. void
  1951. unput(char c)
  1952. {
  1953. if (parseCh == NULL)
  1954. elog(FATAL, "Unput() failed.n");
  1955. else if (c != 0)
  1956. *--parseCh = c;
  1957. }
  1958. #endif /* !defined(FLEX_SCANNER) */
  1959. #ifdef FLEX_SCANNER
  1960. /* input routine for flex to read input from a string instead of a file */
  1961. static int
  1962. myinput(char* buf, int max)
  1963. {
  1964. int len, copylen;
  1965. if (parseCh == NULL)
  1966. {
  1967. len = strlen(parseString);
  1968. if (len >= max)
  1969. copylen = max - 1;
  1970. else
  1971. copylen = len;
  1972. if (copylen > 0)
  1973. memcpy(buf, parseString, copylen);
  1974. buf[copylen] = '';
  1975. parseCh = parseString;
  1976. return copylen;
  1977. }
  1978. else
  1979. return 0; /* end of string */
  1980. }
  1981. #endif /* FLEX_SCANNER */