xref: /freebsd/contrib/flex/src/flex.skl (revision d37f81e35b6e8f114b04315e06bab2cf0c03946c)
17e382390SJung-uk Kim%# -*-C-*- vi: set ft=c:
27e382390SJung-uk Kim%# This file is processed in several stages.
37e382390SJung-uk Kim%# Here are the stages, as best as I can describe:
47e382390SJung-uk Kim%#
57e382390SJung-uk Kim%#   1. flex.skl is processed through GNU m4 during the
67e382390SJung-uk Kim%#      pre-compilation stage of flex. Only macros starting
77e382390SJung-uk Kim%#      with `m4preproc_' are processed, and quoting is normal.
87e382390SJung-uk Kim%#
97e382390SJung-uk Kim%#   2. The preprocessed skeleton is translated into a C array, saved
107e382390SJung-uk Kim%#      as "skel.c" and compiled into the flex binary. The %# comment
117e382390SJung-uk Kim%#      lines are removed.
127e382390SJung-uk Kim%#
137e382390SJung-uk Kim%#   3. At runtime, the skeleton is generated and filtered (again)
147e382390SJung-uk Kim%#      through m4. Macros beginning with `m4_' will be processed.
157e382390SJung-uk Kim%#      The quoting is "[[" and "]]" so we don't interfere with
167e382390SJung-uk Kim%#      user code.
177e382390SJung-uk Kim%#
187e382390SJung-uk Kim%# All generate macros for the m4 stage contain the text "m4" or "M4"
197e382390SJung-uk Kim%# in them. This is to distinguish them from CPP macros.
207e382390SJung-uk Kim%# The exception to this rule is YY_G, which is an m4 macro,
217e382390SJung-uk Kim%# but it needs to be remain short because it is used everywhere.
227e382390SJung-uk Kim%#
237e382390SJung-uk Kim/* A lexical scanner generated by flex */
247e382390SJung-uk Kim
257e382390SJung-uk Kim%#  Macros for preproc stage.
267e382390SJung-uk Kimm4preproc_changecom
277e382390SJung-uk Kim
287e382390SJung-uk Kim%# Macros for runtime processing stage.
297e382390SJung-uk Kimm4_changecom
307e382390SJung-uk Kimm4_changequote
317e382390SJung-uk Kimm4_changequote([[, ]])
327e382390SJung-uk Kim
337e382390SJung-uk Kim%#
347e382390SJung-uk Kim%# Lines in this skeleton starting with a "%" character are "control lines"
357e382390SJung-uk Kim%# and affect the generation of the scanner. The possible control codes are
367e382390SJung-uk Kim%# listed and processed in misc.c.
377e382390SJung-uk Kim%#
387e382390SJung-uk Kim%#   %#  -  A comment. The current line is omitted from the generated scanner.
397e382390SJung-uk Kim%#   %if-c++-only  -  The following lines are printed for C++ scanners ONLY.
407e382390SJung-uk Kim%#   %if-c-only    -  The following lines are NOT printed for C++ scanners.
417e382390SJung-uk Kim%#   %if-c-or-c++  -  The following lines are printed in BOTH C and C++ scanners.
427e382390SJung-uk Kim%#   %if-reentrant     - Print for reentrant scanners.(push)
437e382390SJung-uk Kim%#   %if-not-reentrant - Print for non-reentrant scanners. (push)
447e382390SJung-uk Kim%#   %if-bison-bridge  - Print for bison-bridge. (push)
457e382390SJung-uk Kim%#   %if-not-bison-bridge  - Print for non-bison-bridge. (push)
467e382390SJung-uk Kim%#   %endif        - pop from the previous if code.
477e382390SJung-uk Kim%#   %%  -  A stop-point, where code is inserted by flex.
487e382390SJung-uk Kim%#          Each stop-point is numbered here and also in the code generator.
497e382390SJung-uk Kim%#          (See gen.c, etc. for details.)
507e382390SJung-uk Kim%#   %not-for-header  -  Begin code that should NOT appear in a ".h" file.
517e382390SJung-uk Kim%#   %ok-for-header   -  %c and %e are used for building a header file.
527e382390SJung-uk Kim%#   %if-tables-serialization
537e382390SJung-uk Kim%#
547e382390SJung-uk Kim%#   All control-lines EXCEPT comment lines ("%#") will be inserted into
557e382390SJung-uk Kim%#   the generated scanner as a C-style comment. This is to aid those who
567e382390SJung-uk Kim%#   edit the skeleton.
577e382390SJung-uk Kim%#
587e382390SJung-uk Kim
597e382390SJung-uk Kim%not-for-header
607e382390SJung-uk Kim%if-c-only
617e382390SJung-uk Kim%if-not-reentrant
627e382390SJung-uk Kimm4_ifelse(M4_YY_PREFIX,yy,,
637e382390SJung-uk Kim#define yy_create_buffer M4_YY_PREFIX[[_create_buffer]]
647e382390SJung-uk Kim#define yy_delete_buffer M4_YY_PREFIX[[_delete_buffer]]
657e382390SJung-uk Kim#define yy_scan_buffer M4_YY_PREFIX[[_scan_buffer]]
667e382390SJung-uk Kim#define yy_scan_string M4_YY_PREFIX[[_scan_string]]
677e382390SJung-uk Kim#define yy_scan_bytes M4_YY_PREFIX[[_scan_bytes]]
687e382390SJung-uk Kim#define yy_init_buffer M4_YY_PREFIX[[_init_buffer]]
697e382390SJung-uk Kim#define yy_flush_buffer M4_YY_PREFIX[[_flush_buffer]]
707e382390SJung-uk Kim#define yy_load_buffer_state M4_YY_PREFIX[[_load_buffer_state]]
717e382390SJung-uk Kim#define yy_switch_to_buffer M4_YY_PREFIX[[_switch_to_buffer]]
727e382390SJung-uk Kim#define yypush_buffer_state M4_YY_PREFIX[[push_buffer_state]]
737e382390SJung-uk Kim#define yypop_buffer_state M4_YY_PREFIX[[pop_buffer_state]]
747e382390SJung-uk Kim#define yyensure_buffer_stack M4_YY_PREFIX[[ensure_buffer_stack]]
757e382390SJung-uk Kim#define yy_flex_debug M4_YY_PREFIX[[_flex_debug]]
767e382390SJung-uk Kim#define yyin M4_YY_PREFIX[[in]]
777e382390SJung-uk Kim#define yyleng M4_YY_PREFIX[[leng]]
787e382390SJung-uk Kim#define yylex M4_YY_PREFIX[[lex]]
797e382390SJung-uk Kim#define yylineno M4_YY_PREFIX[[lineno]]
807e382390SJung-uk Kim#define yyout M4_YY_PREFIX[[out]]
817e382390SJung-uk Kim#define yyrestart M4_YY_PREFIX[[restart]]
827e382390SJung-uk Kim#define yytext M4_YY_PREFIX[[text]]
837e382390SJung-uk Kim#define yywrap M4_YY_PREFIX[[wrap]]
847e382390SJung-uk Kim#define yyalloc M4_YY_PREFIX[[alloc]]
857e382390SJung-uk Kim#define yyrealloc M4_YY_PREFIX[[realloc]]
867e382390SJung-uk Kim#define yyfree M4_YY_PREFIX[[free]]
877e382390SJung-uk Kim)
887e382390SJung-uk Kim%endif
897e382390SJung-uk Kim%endif
907e382390SJung-uk Kim%ok-for-header
917e382390SJung-uk Kim
927e382390SJung-uk Kim#define FLEX_SCANNER
937e382390SJung-uk Kim#define YY_FLEX_MAJOR_VERSION FLEX_MAJOR_VERSION
947e382390SJung-uk Kim#define YY_FLEX_MINOR_VERSION FLEX_MINOR_VERSION
957e382390SJung-uk Kim#define YY_FLEX_SUBMINOR_VERSION FLEX_SUBMINOR_VERSION
967e382390SJung-uk Kim#if YY_FLEX_SUBMINOR_VERSION > 0
977e382390SJung-uk Kim#define FLEX_BETA
987e382390SJung-uk Kim#endif
997e382390SJung-uk Kim
1007e382390SJung-uk Kim%# Some negated symbols
1017e382390SJung-uk Kimm4_ifdef( [[M4_YY_IN_HEADER]], , [[m4_define([[M4_YY_NOT_IN_HEADER]], [[]])]])
1027e382390SJung-uk Kimm4_ifdef( [[M4_YY_REENTRANT]], , [[m4_define([[M4_YY_NOT_REENTRANT]], [[]])]])
1037e382390SJung-uk Kim
1047e382390SJung-uk Kim%# This is the m4 way to say "(stack_used || is_reentrant)
1057e382390SJung-uk Kimm4_ifdef( [[M4_YY_STACK_USED]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])
1067e382390SJung-uk Kimm4_ifdef( [[M4_YY_REENTRANT]],  [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])
1077e382390SJung-uk Kim
1087e382390SJung-uk Kim%# Prefixes.
1097e382390SJung-uk Kim%# The complexity here is necessary so that m4 preserves
1107e382390SJung-uk Kim%# the argument lists to each C function.
1117e382390SJung-uk Kim
1127e382390SJung-uk Kim
1137e382390SJung-uk Kimm4_ifdef( [[M4_YY_PREFIX]],, [[m4_define([[M4_YY_PREFIX]], [[yy]])]])
1147e382390SJung-uk Kim
1157e382390SJung-uk Kimm4preproc_define(`M4_GEN_PREFIX',``
1167e382390SJung-uk Kim[[#ifdef yy$1
1177e382390SJung-uk Kim#define ]]M4_YY_PREFIX[[$1_ALREADY_DEFINED
1187e382390SJung-uk Kim#else
1197e382390SJung-uk Kim#define yy$1 ]]M4_YY_PREFIX[[$1
1207e382390SJung-uk Kim#endif]]
1217e382390SJung-uk Kim'm4preproc_divert(1)`
1227e382390SJung-uk Kim[[#ifndef ]]M4_YY_PREFIX[[$1_ALREADY_DEFINED
1237e382390SJung-uk Kim#undef yy$1
1247e382390SJung-uk Kim#endif]]'m4preproc_divert(0)')
1257e382390SJung-uk Kim
1267e382390SJung-uk Kim%if-c++-only
1277e382390SJung-uk Kim    /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
1287e382390SJung-uk Kim     * following macro. This is required in order to pass the c++-multiple-scanners
1297e382390SJung-uk Kim     * test in the regression suite. We get reports that it breaks inheritance.
1307e382390SJung-uk Kim     * We will address this in a future release of flex, or omit the C++ scanner
1317e382390SJung-uk Kim     * altogether.
1327e382390SJung-uk Kim     */
1337e382390SJung-uk Kim    #define yyFlexLexer M4_YY_PREFIX[[FlexLexer]]
1347e382390SJung-uk Kim%endif
1357e382390SJung-uk Kim
1367e382390SJung-uk Kim%if-c-only
1377e382390SJung-uk Kimm4_ifelse(M4_YY_PREFIX,yy,,
1387e382390SJung-uk Kim    M4_GEN_PREFIX(`_create_buffer')
1397e382390SJung-uk Kim    M4_GEN_PREFIX(`_delete_buffer')
1407e382390SJung-uk Kim    M4_GEN_PREFIX(`_scan_buffer')
1417e382390SJung-uk Kim    M4_GEN_PREFIX(`_scan_string')
1427e382390SJung-uk Kim    M4_GEN_PREFIX(`_scan_bytes')
1437e382390SJung-uk Kim    M4_GEN_PREFIX(`_init_buffer')
1447e382390SJung-uk Kim    M4_GEN_PREFIX(`_flush_buffer')
1457e382390SJung-uk Kim    M4_GEN_PREFIX(`_load_buffer_state')
1467e382390SJung-uk Kim    M4_GEN_PREFIX(`_switch_to_buffer')
1477e382390SJung-uk Kim    M4_GEN_PREFIX(`push_buffer_state')
1487e382390SJung-uk Kim    M4_GEN_PREFIX(`pop_buffer_state')
1497e382390SJung-uk Kim    M4_GEN_PREFIX(`ensure_buffer_stack')
1507e382390SJung-uk Kim    M4_GEN_PREFIX(`lex')
1517e382390SJung-uk Kim    M4_GEN_PREFIX(`restart')
1527e382390SJung-uk Kim    M4_GEN_PREFIX(`lex_init')
1537e382390SJung-uk Kim    M4_GEN_PREFIX(`lex_init_extra')
1547e382390SJung-uk Kim    M4_GEN_PREFIX(`lex_destroy')
1557e382390SJung-uk Kim    M4_GEN_PREFIX(`get_debug')
1567e382390SJung-uk Kim    M4_GEN_PREFIX(`set_debug')
1577e382390SJung-uk Kim    M4_GEN_PREFIX(`get_extra')
1587e382390SJung-uk Kim    M4_GEN_PREFIX(`set_extra')
1597e382390SJung-uk Kim    M4_GEN_PREFIX(`get_in')
1607e382390SJung-uk Kim    M4_GEN_PREFIX(`set_in')
1617e382390SJung-uk Kim    M4_GEN_PREFIX(`get_out')
1627e382390SJung-uk Kim    M4_GEN_PREFIX(`set_out')
1637e382390SJung-uk Kim    M4_GEN_PREFIX(`get_leng')
1647e382390SJung-uk Kim    M4_GEN_PREFIX(`get_text')
1657e382390SJung-uk Kim    M4_GEN_PREFIX(`get_lineno')
1667e382390SJung-uk Kim    M4_GEN_PREFIX(`set_lineno')
1677e382390SJung-uk Kim    m4_ifdef( [[M4_YY_REENTRANT]],
1687e382390SJung-uk Kim    [[
1697e382390SJung-uk Kim        M4_GEN_PREFIX(`get_column')
1707e382390SJung-uk Kim        M4_GEN_PREFIX(`set_column')
1717e382390SJung-uk Kim    ]])
1727e382390SJung-uk Kim    M4_GEN_PREFIX(`wrap')
1737e382390SJung-uk Kim)
1747e382390SJung-uk Kim%endif
1757e382390SJung-uk Kim
1767e382390SJung-uk Kimm4_ifdef( [[M4_YY_BISON_LVAL]],
1777e382390SJung-uk Kim[[
1787e382390SJung-uk Kim    M4_GEN_PREFIX(`get_lval')
1797e382390SJung-uk Kim    M4_GEN_PREFIX(`set_lval')
1807e382390SJung-uk Kim]])
1817e382390SJung-uk Kim
1827e382390SJung-uk Kimm4_ifdef( [[<M4_YY_BISON_LLOC>]],
1837e382390SJung-uk Kim[[
1847e382390SJung-uk Kim    M4_GEN_PREFIX(`get_lloc')
1857e382390SJung-uk Kim    M4_GEN_PREFIX(`set_lloc')
1867e382390SJung-uk Kim]])
1877e382390SJung-uk Kim
1887e382390SJung-uk Kim
1897e382390SJung-uk Kimm4_ifelse(M4_YY_PREFIX,yy,,
1907e382390SJung-uk Kim    M4_GEN_PREFIX(`alloc')
1917e382390SJung-uk Kim    M4_GEN_PREFIX(`realloc')
1927e382390SJung-uk Kim    M4_GEN_PREFIX(`free')
1937e382390SJung-uk Kim)
1947e382390SJung-uk Kim
1957e382390SJung-uk Kim%if-c-only
1967e382390SJung-uk Kimm4_ifelse(M4_YY_PREFIX,yy,,
1977e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_REENTRANT]],
1987e382390SJung-uk Kim[[
1997e382390SJung-uk Kim    M4_GEN_PREFIX(`text')
2007e382390SJung-uk Kim    M4_GEN_PREFIX(`leng')
2017e382390SJung-uk Kim    M4_GEN_PREFIX(`in')
2027e382390SJung-uk Kim    M4_GEN_PREFIX(`out')
2037e382390SJung-uk Kim    M4_GEN_PREFIX(`_flex_debug')
2047e382390SJung-uk Kim    M4_GEN_PREFIX(`lineno')
2057e382390SJung-uk Kim]])
2067e382390SJung-uk Kim)
2077e382390SJung-uk Kim%endif
2087e382390SJung-uk Kim
2097e382390SJung-uk Kim
2107e382390SJung-uk Kimm4_ifdef( [[M4_YY_TABLES_EXTERNAL]],
2117e382390SJung-uk Kim[[
2127e382390SJung-uk Kim    M4_GEN_PREFIX(`tables_fload')
2137e382390SJung-uk Kim    M4_GEN_PREFIX(`tables_destroy')
2147e382390SJung-uk Kim    M4_GEN_PREFIX(`TABLES_NAME')
2157e382390SJung-uk Kim]])
2167e382390SJung-uk Kim
2177e382390SJung-uk Kim/* First, we deal with  platform-specific or compiler-specific issues. */
2187e382390SJung-uk Kim
2197e382390SJung-uk Kim/* begin standard C headers. */
2207e382390SJung-uk Kim%if-c-only
2217e382390SJung-uk Kim#include <stdio.h>
2227e382390SJung-uk Kim#include <string.h>
2237e382390SJung-uk Kim#include <errno.h>
2247e382390SJung-uk Kim#include <stdlib.h>
2257e382390SJung-uk Kim%endif
2267e382390SJung-uk Kim
2277e382390SJung-uk Kim%if-tables-serialization
2287e382390SJung-uk Kim#include <sys/types.h>
2297e382390SJung-uk Kim#include <netinet/in.h>
2307e382390SJung-uk Kim%endif
2317e382390SJung-uk Kim/* end standard C headers. */
2327e382390SJung-uk Kim
2337e382390SJung-uk Kim%if-c-or-c++
2347e382390SJung-uk Kimm4preproc_include(`flexint.h')
2357e382390SJung-uk Kim%endif
2367e382390SJung-uk Kim
2377e382390SJung-uk Kim/* begin standard C++ headers. */
2387e382390SJung-uk Kim%if-c++-only
2397e382390SJung-uk Kim#include <iostream>
2407e382390SJung-uk Kim#include <errno.h>
2417e382390SJung-uk Kim#include <cstdlib>
2427e382390SJung-uk Kim#include <cstdio>
2437e382390SJung-uk Kim#include <cstring>
2447e382390SJung-uk Kim/* end standard C++ headers. */
2457e382390SJung-uk Kim%endif
2467e382390SJung-uk Kim
2477e382390SJung-uk Kim/* TODO: this is always defined, so inline it */
2487e382390SJung-uk Kim#define yyconst const
2497e382390SJung-uk Kim
2507e382390SJung-uk Kim#if defined(__GNUC__) && __GNUC__ >= 3
2517e382390SJung-uk Kim#define yynoreturn __attribute__((__noreturn__))
2527e382390SJung-uk Kim#else
2537e382390SJung-uk Kim#define yynoreturn
2547e382390SJung-uk Kim#endif
2557e382390SJung-uk Kim
2567e382390SJung-uk Kim%not-for-header
2577e382390SJung-uk Kim/* Returned upon end-of-file. */
2587e382390SJung-uk Kim#define YY_NULL 0
2597e382390SJung-uk Kim%ok-for-header
2607e382390SJung-uk Kim
2617e382390SJung-uk Kim%not-for-header
2627e382390SJung-uk Kim/* Promotes a possibly negative, possibly signed char to an
2637e382390SJung-uk Kim *   integer in range [0..255] for use as an array index.
2647e382390SJung-uk Kim */
2657e382390SJung-uk Kim#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
2667e382390SJung-uk Kim%ok-for-header
2677e382390SJung-uk Kim
2687e382390SJung-uk Kim
2697e382390SJung-uk Kim
2707e382390SJung-uk Kim%if-reentrant
2717e382390SJung-uk Kim
2727e382390SJung-uk Kim/* An opaque pointer. */
2737e382390SJung-uk Kim#ifndef YY_TYPEDEF_YY_SCANNER_T
2747e382390SJung-uk Kim#define YY_TYPEDEF_YY_SCANNER_T
2757e382390SJung-uk Kimtypedef void* yyscan_t;
2767e382390SJung-uk Kim#endif
2777e382390SJung-uk Kim
2787e382390SJung-uk Kim%# Declare yyguts variable
2797e382390SJung-uk Kimm4_define( [[M4_YY_DECL_GUTS_VAR]], [[struct yyguts_t * yyg = (struct yyguts_t*)yyscanner]])
2807e382390SJung-uk Kim%# Perform a noop access on yyguts to prevent unused variable complains
2817e382390SJung-uk Kimm4_define( [[M4_YY_NOOP_GUTS_VAR]], [[(void)yyg]])
2827e382390SJung-uk Kim%# For use wherever a Global is accessed or assigned.
2837e382390SJung-uk Kimm4_define( [[YY_G]], [[yyg->$1]])
2847e382390SJung-uk Kim
2857e382390SJung-uk Kim%# For use in function prototypes to append the additional argument.
2867e382390SJung-uk Kimm4_define( [[M4_YY_PROTO_LAST_ARG]],  [[, yyscan_t yyscanner]])
2877e382390SJung-uk Kimm4_define( [[M4_YY_PROTO_ONLY_ARG]],  [[yyscan_t yyscanner]])
2887e382390SJung-uk Kim
2897e382390SJung-uk Kimm4_define( [[M4_YY_DEF_LAST_ARG]],  [[, yyscan_t yyscanner]])
2907e382390SJung-uk Kimm4_define( [[M4_YY_DEF_ONLY_ARG]],  [[yyscan_t yyscanner]])
2917e382390SJung-uk Kimm4_define( [[M4_YY_DECL_LAST_ARG]],  [[yyscan_t yyscanner;]])
2927e382390SJung-uk Kim
2937e382390SJung-uk Kim%# For use in function calls to pass the additional argument.
2947e382390SJung-uk Kimm4_define( [[M4_YY_CALL_LAST_ARG]], [[, yyscanner]])
2957e382390SJung-uk Kimm4_define( [[M4_YY_CALL_ONLY_ARG]], [[yyscanner]])
2967e382390SJung-uk Kim
2977e382390SJung-uk Kim%# For use in function documentation to adjust for additional argument.
2987e382390SJung-uk Kimm4_define( [[M4_YY_DOC_PARAM]], [[@param yyscanner The scanner object.]])
2997e382390SJung-uk Kim
3007e382390SJung-uk Kim/* For convenience, these vars (plus the bison vars far below)
3017e382390SJung-uk Kim   are macros in the reentrant scanner. */
3027e382390SJung-uk Kim#define yyin YY_G(yyin_r)
3037e382390SJung-uk Kim#define yyout YY_G(yyout_r)
3047e382390SJung-uk Kim#define yyextra YY_G(yyextra_r)
3057e382390SJung-uk Kim#define yyleng YY_G(yyleng_r)
3067e382390SJung-uk Kim#define yytext YY_G(yytext_r)
3077e382390SJung-uk Kim#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
3087e382390SJung-uk Kim#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
3097e382390SJung-uk Kim#define yy_flex_debug YY_G(yy_flex_debug_r)
3107e382390SJung-uk Kim
3117e382390SJung-uk Kimm4_define( [[M4_YY_INCR_LINENO]],
3127e382390SJung-uk Kim[[
3137e382390SJung-uk Kim    do{ yylineno++;
3147e382390SJung-uk Kim        yycolumn=0;
3157e382390SJung-uk Kim    }while(0)
3167e382390SJung-uk Kim]])
3177e382390SJung-uk Kim
3187e382390SJung-uk Kim%endif
3197e382390SJung-uk Kim
3207e382390SJung-uk Kim
3217e382390SJung-uk Kim
3227e382390SJung-uk Kim%if-not-reentrant
3237e382390SJung-uk Kim
3247e382390SJung-uk Kimm4_define( [[M4_YY_INCR_LINENO]],
3257e382390SJung-uk Kim[[
3267e382390SJung-uk Kim    yylineno++;
3277e382390SJung-uk Kim]])
3287e382390SJung-uk Kim
3297e382390SJung-uk Kim%# Define these macros to be no-ops.
3307e382390SJung-uk Kimm4_define( [[M4_YY_DECL_GUTS_VAR]], [[m4_dnl]])
3317e382390SJung-uk Kimm4_define( [[M4_YY_NOOP_GUTS_VAR]], [[m4_dnl]])
3327e382390SJung-uk Kimm4_define( [[YY_G]], [[($1)]])
3337e382390SJung-uk Kimm4_define( [[M4_YY_PROTO_LAST_ARG]])
3347e382390SJung-uk Kimm4_define( [[M4_YY_PROTO_ONLY_ARG]],  [[void]])
3357e382390SJung-uk Kimm4_define( [[M4_YY_DEF_LAST_ARG]])
3367e382390SJung-uk Kim
3377e382390SJung-uk Kimm4_define( [[M4_YY_DEF_ONLY_ARG]],  [[void]])
3387e382390SJung-uk Kimm4_define([[M4_YY_DECL_LAST_ARG]])
3397e382390SJung-uk Kimm4_define([[M4_YY_CALL_LAST_ARG]])
3407e382390SJung-uk Kimm4_define([[M4_YY_CALL_ONLY_ARG]])
3417e382390SJung-uk Kimm4_define( [[M4_YY_DOC_PARAM]], )
3427e382390SJung-uk Kim
3437e382390SJung-uk Kim%endif
3447e382390SJung-uk Kim
3457e382390SJung-uk Kim
3467e382390SJung-uk Kim%# Generate C99 function defs.
3477e382390SJung-uk Kimm4_define( [[YYFARGS1]], [[($1 $2 M4_YY_DEF_LAST_ARG)]])
3487e382390SJung-uk Kimm4_define( [[YYFARGS2]], [[($1 $2, $3 $4 M4_YY_DEF_LAST_ARG)]])
3497e382390SJung-uk Kimm4_define( [[YYFARGS3]], [[($1 $2, $3 $4, $5 $6 M4_YY_DEF_LAST_ARG)]])
3507e382390SJung-uk Kim
3517e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
3527e382390SJung-uk Kim[[
3537e382390SJung-uk Kim/* Enter a start condition.  This macro really ought to take a parameter,
3547e382390SJung-uk Kim * but we do it the disgusting crufty way forced on us by the ()-less
3557e382390SJung-uk Kim * definition of BEGIN.
3567e382390SJung-uk Kim */
3577e382390SJung-uk Kim#define BEGIN YY_G(yy_start) = 1 + 2 *
3587e382390SJung-uk Kim/* Translate the current start state into a value that can be later handed
3597e382390SJung-uk Kim * to BEGIN to return to the state.  The YYSTATE alias is for lex
3607e382390SJung-uk Kim * compatibility.
3617e382390SJung-uk Kim */
3627e382390SJung-uk Kim#define YY_START ((YY_G(yy_start) - 1) / 2)
3637e382390SJung-uk Kim#define YYSTATE YY_START
3647e382390SJung-uk Kim/* Action number for EOF rule of a given start state. */
3657e382390SJung-uk Kim#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
3667e382390SJung-uk Kim/* Special action meaning "start processing a new file". */
3677e382390SJung-uk Kim#define YY_NEW_FILE yyrestart( yyin M4_YY_CALL_LAST_ARG )
3687e382390SJung-uk Kim#define YY_END_OF_BUFFER_CHAR 0
3697e382390SJung-uk Kim]])
3707e382390SJung-uk Kim
3717e382390SJung-uk Kim/* Size of default input buffer. */
3727e382390SJung-uk Kim#ifndef YY_BUF_SIZE
3737e382390SJung-uk Kim#ifdef __ia64__
3747e382390SJung-uk Kim/* On IA-64, the buffer size is 16k, not 8k.
3757e382390SJung-uk Kim * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
3767e382390SJung-uk Kim * Ditto for the __ia64__ case accordingly.
3777e382390SJung-uk Kim */
3787e382390SJung-uk Kim#define YY_BUF_SIZE 32768
3797e382390SJung-uk Kim#else
3807e382390SJung-uk Kim#define YY_BUF_SIZE 16384
3817e382390SJung-uk Kim#endif /* __ia64__ */
3827e382390SJung-uk Kim#endif
3837e382390SJung-uk Kim
3847e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
3857e382390SJung-uk Kim[[
3867e382390SJung-uk Kim/* The state buf must be large enough to hold one state per character in the main buffer.
3877e382390SJung-uk Kim */
3887e382390SJung-uk Kim#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
3897e382390SJung-uk Kim]])
3907e382390SJung-uk Kim
3917e382390SJung-uk Kim
3927e382390SJung-uk Kim#ifndef YY_TYPEDEF_YY_BUFFER_STATE
3937e382390SJung-uk Kim#define YY_TYPEDEF_YY_BUFFER_STATE
3947e382390SJung-uk Kimtypedef struct yy_buffer_state *YY_BUFFER_STATE;
3957e382390SJung-uk Kim#endif
3967e382390SJung-uk Kim
3977e382390SJung-uk Kim#ifndef YY_TYPEDEF_YY_SIZE_T
3987e382390SJung-uk Kim#define YY_TYPEDEF_YY_SIZE_T
3997e382390SJung-uk Kimtypedef size_t yy_size_t;
4007e382390SJung-uk Kim#endif
4017e382390SJung-uk Kim
4027e382390SJung-uk Kim%if-not-reentrant
4037e382390SJung-uk Kimextern int yyleng;
4047e382390SJung-uk Kim%endif
4057e382390SJung-uk Kim
4067e382390SJung-uk Kim%if-c-only
4077e382390SJung-uk Kim%if-not-reentrant
4087e382390SJung-uk Kimextern FILE *yyin, *yyout;
4097e382390SJung-uk Kim%endif
4107e382390SJung-uk Kim%endif
4117e382390SJung-uk Kim
4127e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
4137e382390SJung-uk Kim[[
4147e382390SJung-uk Kim#define EOB_ACT_CONTINUE_SCAN 0
4157e382390SJung-uk Kim#define EOB_ACT_END_OF_FILE 1
4167e382390SJung-uk Kim#define EOB_ACT_LAST_MATCH 2
4177e382390SJung-uk Kim    m4_ifdef( [[M4_YY_USE_LINENO]],
4187e382390SJung-uk Kim    [[
4197e382390SJung-uk Kim    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
4207e382390SJung-uk Kim     *       access to the local variable yy_act. Since yyless() is a macro, it would break
4217e382390SJung-uk Kim     *       existing scanners that call yyless() from OUTSIDE yylex.
4227e382390SJung-uk Kim     *       One obvious solution it to make yy_act a global. I tried that, and saw
4237e382390SJung-uk Kim     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
4247e382390SJung-uk Kim     *       normally declared as a register variable-- so it is not worth it.
4257e382390SJung-uk Kim     */
4267e382390SJung-uk Kim    #define  YY_LESS_LINENO(n) \
4277e382390SJung-uk Kim            do { \
4287e382390SJung-uk Kim                int yyl;\
4297e382390SJung-uk Kim                for ( yyl = n; yyl < yyleng; ++yyl )\
4307e382390SJung-uk Kim                    if ( yytext[yyl] == '\n' )\
4317e382390SJung-uk Kim                        --yylineno;\
4327e382390SJung-uk Kim            }while(0)
4337e382390SJung-uk Kim    #define YY_LINENO_REWIND_TO(dst) \
4347e382390SJung-uk Kim            do {\
4357e382390SJung-uk Kim                const char *p;\
4367e382390SJung-uk Kim                for ( p = yy_cp-1; p >= (dst); --p)\
4377e382390SJung-uk Kim                    if ( *p == '\n' )\
4387e382390SJung-uk Kim                        --yylineno;\
4397e382390SJung-uk Kim            }while(0)
4407e382390SJung-uk Kim    ]],
4417e382390SJung-uk Kim    [[
4427e382390SJung-uk Kim    #define YY_LESS_LINENO(n)
4437e382390SJung-uk Kim    #define YY_LINENO_REWIND_TO(ptr)
4447e382390SJung-uk Kim    ]])
4457e382390SJung-uk Kim/* Return all but the first "n" matched characters back to the input stream. */
4467e382390SJung-uk Kim#define yyless(n) \
4477e382390SJung-uk Kim	do \
4487e382390SJung-uk Kim		{ \
4497e382390SJung-uk Kim		/* Undo effects of setting up yytext. */ \
4507e382390SJung-uk Kim        int yyless_macro_arg = (n); \
4517e382390SJung-uk Kim        YY_LESS_LINENO(yyless_macro_arg);\
4527e382390SJung-uk Kim		*yy_cp = YY_G(yy_hold_char); \
4537e382390SJung-uk Kim		YY_RESTORE_YY_MORE_OFFSET \
4547e382390SJung-uk Kim		YY_G(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
4557e382390SJung-uk Kim		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
4567e382390SJung-uk Kim		} \
4577e382390SJung-uk Kim	while ( 0 )
4587e382390SJung-uk Kim#define unput(c) yyunput( c, YY_G(yytext_ptr) M4_YY_CALL_LAST_ARG )
4597e382390SJung-uk Kim]])
4607e382390SJung-uk Kim
4617e382390SJung-uk Kim#ifndef YY_STRUCT_YY_BUFFER_STATE
4627e382390SJung-uk Kim#define YY_STRUCT_YY_BUFFER_STATE
4637e382390SJung-uk Kimstruct yy_buffer_state
4647e382390SJung-uk Kim	{
4657e382390SJung-uk Kim%if-c-only
4667e382390SJung-uk Kim	FILE *yy_input_file;
4677e382390SJung-uk Kim%endif
4687e382390SJung-uk Kim
4697e382390SJung-uk Kim%if-c++-only
4707e382390SJung-uk Kim	std::streambuf* yy_input_file;
4717e382390SJung-uk Kim%endif
4727e382390SJung-uk Kim
4737e382390SJung-uk Kim
4747e382390SJung-uk Kim	char *yy_ch_buf;		/* input buffer */
4757e382390SJung-uk Kim	char *yy_buf_pos;		/* current position in input buffer */
4767e382390SJung-uk Kim
4777e382390SJung-uk Kim	/* Size of input buffer in bytes, not including room for EOB
4787e382390SJung-uk Kim	 * characters.
4797e382390SJung-uk Kim	 */
4807e382390SJung-uk Kim	int yy_buf_size;
4817e382390SJung-uk Kim
4827e382390SJung-uk Kim	/* Number of characters read into yy_ch_buf, not including EOB
4837e382390SJung-uk Kim	 * characters.
4847e382390SJung-uk Kim	 */
4857e382390SJung-uk Kim	int yy_n_chars;
4867e382390SJung-uk Kim
4877e382390SJung-uk Kim	/* Whether we "own" the buffer - i.e., we know we created it,
4887e382390SJung-uk Kim	 * and can realloc() it to grow it, and should free() it to
4897e382390SJung-uk Kim	 * delete it.
4907e382390SJung-uk Kim	 */
4917e382390SJung-uk Kim	int yy_is_our_buffer;
4927e382390SJung-uk Kim
4937e382390SJung-uk Kim	/* Whether this is an "interactive" input source; if so, and
4947e382390SJung-uk Kim	 * if we're using stdio for input, then we want to use getc()
4957e382390SJung-uk Kim	 * instead of fread(), to make sure we stop fetching input after
4967e382390SJung-uk Kim	 * each newline.
4977e382390SJung-uk Kim	 */
4987e382390SJung-uk Kim	int yy_is_interactive;
4997e382390SJung-uk Kim
5007e382390SJung-uk Kim	/* Whether we're considered to be at the beginning of a line.
5017e382390SJung-uk Kim	 * If so, '^' rules will be active on the next match, otherwise
5027e382390SJung-uk Kim	 * not.
5037e382390SJung-uk Kim	 */
5047e382390SJung-uk Kim	int yy_at_bol;
5057e382390SJung-uk Kim
5067e382390SJung-uk Kim    int yy_bs_lineno; /**< The line count. */
5077e382390SJung-uk Kim    int yy_bs_column; /**< The column count. */
5087e382390SJung-uk Kim
5097e382390SJung-uk Kim
5107e382390SJung-uk Kim	/* Whether to try to fill the input buffer when we reach the
5117e382390SJung-uk Kim	 * end of it.
5127e382390SJung-uk Kim	 */
5137e382390SJung-uk Kim	int yy_fill_buffer;
5147e382390SJung-uk Kim
5157e382390SJung-uk Kim	int yy_buffer_status;
5167e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
5177e382390SJung-uk Kim[[
5187e382390SJung-uk Kim#define YY_BUFFER_NEW 0
5197e382390SJung-uk Kim#define YY_BUFFER_NORMAL 1
5207e382390SJung-uk Kim	/* When an EOF's been seen but there's still some text to process
5217e382390SJung-uk Kim	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
5227e382390SJung-uk Kim	 * shouldn't try reading from the input source any more.  We might
5237e382390SJung-uk Kim	 * still have a bunch of tokens to match, though, because of
5247e382390SJung-uk Kim	 * possible backing-up.
5257e382390SJung-uk Kim	 *
5267e382390SJung-uk Kim	 * When we actually see the EOF, we change the status to "new"
5277e382390SJung-uk Kim	 * (via yyrestart()), so that the user can continue scanning by
5287e382390SJung-uk Kim	 * just pointing yyin at a new input file.
5297e382390SJung-uk Kim	 */
5307e382390SJung-uk Kim#define YY_BUFFER_EOF_PENDING 2
5317e382390SJung-uk Kim]])
5327e382390SJung-uk Kim	};
5337e382390SJung-uk Kim#endif /* !YY_STRUCT_YY_BUFFER_STATE */
5347e382390SJung-uk Kim
5357e382390SJung-uk Kim%if-c-only Standard (non-C++) definition
5367e382390SJung-uk Kim%not-for-header
5377e382390SJung-uk Kim%if-not-reentrant
5387e382390SJung-uk Kim
5397e382390SJung-uk Kim/* Stack of input buffers. */
5407e382390SJung-uk Kimstatic size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
5417e382390SJung-uk Kimstatic size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
5427e382390SJung-uk Kimstatic YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
5437e382390SJung-uk Kim%endif
5447e382390SJung-uk Kim%ok-for-header
5457e382390SJung-uk Kim%endif
5467e382390SJung-uk Kim
5477e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
5487e382390SJung-uk Kim[[
5497e382390SJung-uk Kim/* We provide macros for accessing buffer states in case in the
5507e382390SJung-uk Kim * future we want to put the buffer states in a more general
5517e382390SJung-uk Kim * "scanner state".
5527e382390SJung-uk Kim *
5537e382390SJung-uk Kim * Returns the top of the stack, or NULL.
5547e382390SJung-uk Kim */
5557e382390SJung-uk Kim#define YY_CURRENT_BUFFER ( YY_G(yy_buffer_stack) \
5567e382390SJung-uk Kim                          ? YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)] \
5577e382390SJung-uk Kim                          : NULL)
5587e382390SJung-uk Kim#define yy_current_buffer YY_CURRENT_BUFFER
5597e382390SJung-uk Kim/* Same as previous macro, but useful when we know that the buffer stack is not
5607e382390SJung-uk Kim * NULL or when we need an lvalue. For internal use only.
5617e382390SJung-uk Kim */
5627e382390SJung-uk Kim#define YY_CURRENT_BUFFER_LVALUE YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)]
5637e382390SJung-uk Kim]])
5647e382390SJung-uk Kim
5657e382390SJung-uk Kim%if-c-only Standard (non-C++) definition
5667e382390SJung-uk Kim
5677e382390SJung-uk Kim%if-not-reentrant
5687e382390SJung-uk Kim%not-for-header
5697e382390SJung-uk Kim/* yy_hold_char holds the character lost when yytext is formed. */
5707e382390SJung-uk Kimstatic char yy_hold_char;
5717e382390SJung-uk Kimstatic int yy_n_chars;		/* number of characters read into yy_ch_buf */
5727e382390SJung-uk Kimint yyleng;
5737e382390SJung-uk Kim
5747e382390SJung-uk Kim/* Points to current character in buffer. */
5757e382390SJung-uk Kimstatic char *yy_c_buf_p = NULL;
5767e382390SJung-uk Kimstatic int yy_init = 0;		/* whether we need to initialize */
5777e382390SJung-uk Kimstatic int yy_start = 0;	/* start state number */
5787e382390SJung-uk Kim
5797e382390SJung-uk Kim/* Flag which is used to allow yywrap()'s to do buffer switches
5807e382390SJung-uk Kim * instead of setting up a fresh yyin.  A bit of a hack ...
5817e382390SJung-uk Kim */
5827e382390SJung-uk Kimstatic int yy_did_buffer_switch_on_eof;
5837e382390SJung-uk Kim%ok-for-header
5847e382390SJung-uk Kim%endif
5857e382390SJung-uk Kim
5867e382390SJung-uk Kimvoid yyrestart ( FILE *input_file M4_YY_PROTO_LAST_ARG );
5877e382390SJung-uk Kimvoid yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );
5887e382390SJung-uk KimYY_BUFFER_STATE yy_create_buffer ( FILE *file, int size M4_YY_PROTO_LAST_ARG );
5897e382390SJung-uk Kimvoid yy_delete_buffer ( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );
5907e382390SJung-uk Kimvoid yy_flush_buffer ( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );
5917e382390SJung-uk Kimvoid yypush_buffer_state ( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );
5927e382390SJung-uk Kimvoid yypop_buffer_state ( M4_YY_PROTO_ONLY_ARG );
5937e382390SJung-uk Kim
5947e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
5957e382390SJung-uk Kim[[
5967e382390SJung-uk Kimstatic void yyensure_buffer_stack ( M4_YY_PROTO_ONLY_ARG );
5977e382390SJung-uk Kimstatic void yy_load_buffer_state ( M4_YY_PROTO_ONLY_ARG );
5987e382390SJung-uk Kimstatic void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file M4_YY_PROTO_LAST_ARG );
5997e382390SJung-uk Kim#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG)
6007e382390SJung-uk Kim]])
6017e382390SJung-uk Kim
6027e382390SJung-uk KimYY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size M4_YY_PROTO_LAST_ARG );
6037e382390SJung-uk KimYY_BUFFER_STATE yy_scan_string ( const char *yy_str M4_YY_PROTO_LAST_ARG );
6047e382390SJung-uk KimYY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len M4_YY_PROTO_LAST_ARG );
6057e382390SJung-uk Kim
6067e382390SJung-uk Kim%endif
6077e382390SJung-uk Kim
6087e382390SJung-uk Kimvoid *yyalloc ( yy_size_t M4_YY_PROTO_LAST_ARG );
6097e382390SJung-uk Kimvoid *yyrealloc ( void *, yy_size_t M4_YY_PROTO_LAST_ARG );
6107e382390SJung-uk Kimvoid yyfree ( void * M4_YY_PROTO_LAST_ARG );
6117e382390SJung-uk Kim
6127e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
6137e382390SJung-uk Kim[[
6147e382390SJung-uk Kim#define yy_new_buffer yy_create_buffer
6157e382390SJung-uk Kim#define yy_set_interactive(is_interactive) \
6167e382390SJung-uk Kim	{ \
6177e382390SJung-uk Kim	if ( ! YY_CURRENT_BUFFER ){ \
6187e382390SJung-uk Kim        yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \
6197e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE =    \
6207e382390SJung-uk Kim            yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \
6217e382390SJung-uk Kim	} \
6227e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
6237e382390SJung-uk Kim	}
6247e382390SJung-uk Kim#define yy_set_bol(at_bol) \
6257e382390SJung-uk Kim	{ \
6267e382390SJung-uk Kim	if ( ! YY_CURRENT_BUFFER ){\
6277e382390SJung-uk Kim        yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \
6287e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE =    \
6297e382390SJung-uk Kim            yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \
6307e382390SJung-uk Kim	} \
6317e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
6327e382390SJung-uk Kim	}
6337e382390SJung-uk Kim#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
6347e382390SJung-uk Kim]])
6357e382390SJung-uk Kim
6367e382390SJung-uk Kim%% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
6377e382390SJung-uk Kim
6387e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
6397e382390SJung-uk Kim[[
6407e382390SJung-uk Kim%% [1.5] DFA
6417e382390SJung-uk Kim]])
6427e382390SJung-uk Kim
6437e382390SJung-uk Kim%if-c-only Standard (non-C++) definition
6447e382390SJung-uk Kim
6457e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
6467e382390SJung-uk Kim[[
6477e382390SJung-uk Kimstatic yy_state_type yy_get_previous_state ( M4_YY_PROTO_ONLY_ARG );
6487e382390SJung-uk Kimstatic yy_state_type yy_try_NUL_trans ( yy_state_type current_state  M4_YY_PROTO_LAST_ARG);
6497e382390SJung-uk Kimstatic int yy_get_next_buffer ( M4_YY_PROTO_ONLY_ARG );
650*d37f81e3SAlex Richardsonstatic void yynoreturn yy_fatal_error ( const char* msg M4_YY_PROTO_LAST_ARG );
6517e382390SJung-uk Kim]])
6527e382390SJung-uk Kim
6537e382390SJung-uk Kim%endif
6547e382390SJung-uk Kim
6557e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
6567e382390SJung-uk Kim[[
6577e382390SJung-uk Kim/* Done after the current pattern has been matched and before the
6587e382390SJung-uk Kim * corresponding action - sets up yytext.
6597e382390SJung-uk Kim */
6607e382390SJung-uk Kim#define YY_DO_BEFORE_ACTION \
6617e382390SJung-uk Kim	YY_G(yytext_ptr) = yy_bp; \
6627e382390SJung-uk Kim%% [2.0] code to fiddle yytext and yyleng for yymore() goes here \
6637e382390SJung-uk Kim	YY_G(yy_hold_char) = *yy_cp; \
6647e382390SJung-uk Kim	*yy_cp = '\0'; \
6657e382390SJung-uk Kim%% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \
6667e382390SJung-uk Kim	YY_G(yy_c_buf_p) = yy_cp;
6677e382390SJung-uk Kim%% [4.0] data tables for the DFA and the user's section 1 definitions go here
6687e382390SJung-uk Kim]])
6697e382390SJung-uk Kim
6707e382390SJung-uk Kimm4_ifdef( [[M4_YY_IN_HEADER]], [[#ifdef YY_HEADER_EXPORT_START_CONDITIONS]])
6717e382390SJung-uk KimM4_YY_SC_DEFS
6727e382390SJung-uk Kimm4_ifdef( [[M4_YY_IN_HEADER]], [[#endif]])
6737e382390SJung-uk Kim
6747e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_UNISTD_H]],,
6757e382390SJung-uk Kim[[
6767e382390SJung-uk Kim#ifndef YY_NO_UNISTD_H
6777e382390SJung-uk Kim/* Special case for "unistd.h", since it is non-ANSI. We include it way
6787e382390SJung-uk Kim * down here because we want the user's section 1 to have been scanned first.
6797e382390SJung-uk Kim * The user has a chance to override it with an option.
6807e382390SJung-uk Kim */
6817e382390SJung-uk Kim%if-c-only
6827e382390SJung-uk Kim#include <unistd.h>
6837e382390SJung-uk Kim%endif
6847e382390SJung-uk Kim%if-c++-only
6857e382390SJung-uk Kim#include <unistd.h>
6867e382390SJung-uk Kim%endif
6877e382390SJung-uk Kim#endif
6887e382390SJung-uk Kim]])
6897e382390SJung-uk Kim
6907e382390SJung-uk Kimm4_ifdef( [[M4_EXTRA_TYPE_DEFS]],
6917e382390SJung-uk Kim[[
6927e382390SJung-uk Kim#define YY_EXTRA_TYPE M4_EXTRA_TYPE_DEFS
6937e382390SJung-uk Kim]],
6947e382390SJung-uk Kim[[
6957e382390SJung-uk Kim#ifndef YY_EXTRA_TYPE
6967e382390SJung-uk Kim#define YY_EXTRA_TYPE void *
6977e382390SJung-uk Kim#endif
6987e382390SJung-uk Kim]]
6997e382390SJung-uk Kim)
7007e382390SJung-uk Kim
7017e382390SJung-uk Kim%if-c-only Reentrant structure and macros (non-C++).
7027e382390SJung-uk Kim%if-reentrant
7037e382390SJung-uk Kim
7047e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
7057e382390SJung-uk Kim[[
7067e382390SJung-uk Kim/* Holds the entire state of the reentrant scanner. */
7077e382390SJung-uk Kimstruct yyguts_t
7087e382390SJung-uk Kim    {
7097e382390SJung-uk Kim
7107e382390SJung-uk Kim    /* User-defined. Not touched by flex. */
7117e382390SJung-uk Kim    YY_EXTRA_TYPE yyextra_r;
7127e382390SJung-uk Kim
7137e382390SJung-uk Kim    /* The rest are the same as the globals declared in the non-reentrant scanner. */
7147e382390SJung-uk Kim    FILE *yyin_r, *yyout_r;
7157e382390SJung-uk Kim    size_t yy_buffer_stack_top; /**< index of top of stack. */
7167e382390SJung-uk Kim    size_t yy_buffer_stack_max; /**< capacity of stack. */
7177e382390SJung-uk Kim    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
7187e382390SJung-uk Kim    char yy_hold_char;
7197e382390SJung-uk Kim    int yy_n_chars;
7207e382390SJung-uk Kim    int yyleng_r;
7217e382390SJung-uk Kim    char *yy_c_buf_p;
7227e382390SJung-uk Kim    int yy_init;
7237e382390SJung-uk Kim    int yy_start;
7247e382390SJung-uk Kim    int yy_did_buffer_switch_on_eof;
7257e382390SJung-uk Kim    int yy_start_stack_ptr;
7267e382390SJung-uk Kim    int yy_start_stack_depth;
7277e382390SJung-uk Kim    int *yy_start_stack;
7287e382390SJung-uk Kim    yy_state_type yy_last_accepting_state;
7297e382390SJung-uk Kim    char* yy_last_accepting_cpos;
7307e382390SJung-uk Kim
7317e382390SJung-uk Kim    int yylineno_r;
7327e382390SJung-uk Kim    int yy_flex_debug_r;
7337e382390SJung-uk Kim
7347e382390SJung-uk Kimm4_ifdef( [[M4_YY_USES_REJECT]],
7357e382390SJung-uk Kim[[
7367e382390SJung-uk Kim    yy_state_type *yy_state_buf;
7377e382390SJung-uk Kim    yy_state_type *yy_state_ptr;
7387e382390SJung-uk Kim    char *yy_full_match;
7397e382390SJung-uk Kim    int yy_lp;
7407e382390SJung-uk Kim
7417e382390SJung-uk Kim    /* These are only needed for trailing context rules,
7427e382390SJung-uk Kim     * but there's no conditional variable for that yet. */
7437e382390SJung-uk Kim    int yy_looking_for_trail_begin;
7447e382390SJung-uk Kim    int yy_full_lp;
7457e382390SJung-uk Kim    int *yy_full_state;
7467e382390SJung-uk Kim]])
7477e382390SJung-uk Kim
7487e382390SJung-uk Kimm4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],
7497e382390SJung-uk Kim[[
7507e382390SJung-uk Kim    char yytext_r[YYLMAX];
7517e382390SJung-uk Kim    char *yytext_ptr;
7527e382390SJung-uk Kim    int yy_more_offset;
7537e382390SJung-uk Kim    int yy_prev_more_offset;
7547e382390SJung-uk Kim]],
7557e382390SJung-uk Kim[[
7567e382390SJung-uk Kim    char *yytext_r;
7577e382390SJung-uk Kim    int yy_more_flag;
7587e382390SJung-uk Kim    int yy_more_len;
7597e382390SJung-uk Kim]])
7607e382390SJung-uk Kim
7617e382390SJung-uk Kimm4_ifdef( [[M4_YY_BISON_LVAL]],
7627e382390SJung-uk Kim[[
7637e382390SJung-uk Kim    YYSTYPE * yylval_r;
7647e382390SJung-uk Kim]])
7657e382390SJung-uk Kim
7667e382390SJung-uk Kimm4_ifdef( [[<M4_YY_BISON_LLOC>]],
7677e382390SJung-uk Kim[[
7687e382390SJung-uk Kim    YYLTYPE * yylloc_r;
7697e382390SJung-uk Kim]])
7707e382390SJung-uk Kim
7717e382390SJung-uk Kim    }; /* end struct yyguts_t */
7727e382390SJung-uk Kim]])
7737e382390SJung-uk Kim
7747e382390SJung-uk Kim
7757e382390SJung-uk Kim%if-c-only
7767e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
7777e382390SJung-uk Kim[[
7787e382390SJung-uk Kimstatic int yy_init_globals ( M4_YY_PROTO_ONLY_ARG );
7797e382390SJung-uk Kim]])
7807e382390SJung-uk Kim%endif
7817e382390SJung-uk Kim
7827e382390SJung-uk Kim%if-reentrant
7837e382390SJung-uk Kim
7847e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
7857e382390SJung-uk Kim[[
7867e382390SJung-uk Kim    m4_ifdef( [[M4_YY_BISON_LVAL]],
7877e382390SJung-uk Kim    [[
7887e382390SJung-uk Kim    /* This must go here because YYSTYPE and YYLTYPE are included
7897e382390SJung-uk Kim     * from bison output in section 1.*/
7907e382390SJung-uk Kim    #    define yylval YY_G(yylval_r)
7917e382390SJung-uk Kim    ]])
7927e382390SJung-uk Kim
7937e382390SJung-uk Kim    m4_ifdef( [[<M4_YY_BISON_LLOC>]],
7947e382390SJung-uk Kim    [[
7957e382390SJung-uk Kim    #    define yylloc YY_G(yylloc_r)
7967e382390SJung-uk Kim    ]])
7977e382390SJung-uk Kim]])
7987e382390SJung-uk Kim
7997e382390SJung-uk Kimint yylex_init (yyscan_t* scanner);
8007e382390SJung-uk Kim
8017e382390SJung-uk Kimint yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
8027e382390SJung-uk Kim
8037e382390SJung-uk Kim%endif
8047e382390SJung-uk Kim
8057e382390SJung-uk Kim%endif End reentrant structures and macros.
8067e382390SJung-uk Kim
8077e382390SJung-uk Kim/* Accessor methods to globals.
8087e382390SJung-uk Kim   These are made visible to non-reentrant scanners for convenience. */
8097e382390SJung-uk Kim
8107e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_DESTROY]],,
8117e382390SJung-uk Kim[[
8127e382390SJung-uk Kimint yylex_destroy ( M4_YY_PROTO_ONLY_ARG );
8137e382390SJung-uk Kim]])
8147e382390SJung-uk Kim
8157e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_DEBUG]],,
8167e382390SJung-uk Kim[[
8177e382390SJung-uk Kimint yyget_debug ( M4_YY_PROTO_ONLY_ARG );
8187e382390SJung-uk Kim]])
8197e382390SJung-uk Kim
8207e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_DEBUG]],,
8217e382390SJung-uk Kim[[
8227e382390SJung-uk Kimvoid yyset_debug ( int debug_flag M4_YY_PROTO_LAST_ARG );
8237e382390SJung-uk Kim]])
8247e382390SJung-uk Kim
8257e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_EXTRA]],,
8267e382390SJung-uk Kim[[
8277e382390SJung-uk KimYY_EXTRA_TYPE yyget_extra ( M4_YY_PROTO_ONLY_ARG );
8287e382390SJung-uk Kim]])
8297e382390SJung-uk Kim
8307e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_EXTRA]],,
8317e382390SJung-uk Kim[[
8327e382390SJung-uk Kimvoid yyset_extra ( YY_EXTRA_TYPE user_defined M4_YY_PROTO_LAST_ARG );
8337e382390SJung-uk Kim]])
8347e382390SJung-uk Kim
8357e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_IN]],,
8367e382390SJung-uk Kim[[
8377e382390SJung-uk KimFILE *yyget_in ( M4_YY_PROTO_ONLY_ARG );
8387e382390SJung-uk Kim]])
8397e382390SJung-uk Kim
8407e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_IN]],,
8417e382390SJung-uk Kim[[
8427e382390SJung-uk Kimvoid yyset_in  ( FILE * _in_str M4_YY_PROTO_LAST_ARG );
8437e382390SJung-uk Kim]])
8447e382390SJung-uk Kim
8457e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_OUT]],,
8467e382390SJung-uk Kim[[
8477e382390SJung-uk KimFILE *yyget_out ( M4_YY_PROTO_ONLY_ARG );
8487e382390SJung-uk Kim]])
8497e382390SJung-uk Kim
8507e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_OUT]],,
8517e382390SJung-uk Kim[[
8527e382390SJung-uk Kimvoid yyset_out  ( FILE * _out_str M4_YY_PROTO_LAST_ARG );
8537e382390SJung-uk Kim]])
8547e382390SJung-uk Kim
8557e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_LENG]],,
8567e382390SJung-uk Kim[[
8577e382390SJung-uk Kim			int yyget_leng ( M4_YY_PROTO_ONLY_ARG );
8587e382390SJung-uk Kim]])
8597e382390SJung-uk Kim
8607e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_TEXT]],,
8617e382390SJung-uk Kim[[
8627e382390SJung-uk Kimchar *yyget_text ( M4_YY_PROTO_ONLY_ARG );
8637e382390SJung-uk Kim]])
8647e382390SJung-uk Kim
8657e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_LINENO]],,
8667e382390SJung-uk Kim[[
8677e382390SJung-uk Kimint yyget_lineno ( M4_YY_PROTO_ONLY_ARG );
8687e382390SJung-uk Kim]])
8697e382390SJung-uk Kim
8707e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_LINENO]],,
8717e382390SJung-uk Kim[[
8727e382390SJung-uk Kimvoid yyset_lineno ( int _line_number M4_YY_PROTO_LAST_ARG );
8737e382390SJung-uk Kim]])
8747e382390SJung-uk Kim
8757e382390SJung-uk Kimm4_ifdef( [[M4_YY_REENTRANT]],
8767e382390SJung-uk Kim[[
8777e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
8787e382390SJung-uk Kim[[
8797e382390SJung-uk Kimint yyget_column  ( M4_YY_PROTO_ONLY_ARG );
8807e382390SJung-uk Kim]])
8817e382390SJung-uk Kim]])
8827e382390SJung-uk Kim
8837e382390SJung-uk Kimm4_ifdef( [[M4_YY_REENTRANT]],
8847e382390SJung-uk Kim[[
8857e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
8867e382390SJung-uk Kim[[
8877e382390SJung-uk Kimvoid yyset_column ( int _column_no M4_YY_PROTO_LAST_ARG );
8887e382390SJung-uk Kim]])
8897e382390SJung-uk Kim]])
8907e382390SJung-uk Kim
8917e382390SJung-uk Kim%if-bison-bridge
8927e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_LVAL]],,
8937e382390SJung-uk Kim[[
8947e382390SJung-uk KimYYSTYPE * yyget_lval ( M4_YY_PROTO_ONLY_ARG );
8957e382390SJung-uk Kim]])
8967e382390SJung-uk Kim
8977e382390SJung-uk Kimvoid yyset_lval ( YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG );
8987e382390SJung-uk Kim
8997e382390SJung-uk Kimm4_ifdef( [[<M4_YY_BISON_LLOC>]],
9007e382390SJung-uk Kim[[
9017e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_GET_LLOC]],,
9027e382390SJung-uk Kim    [[
9037e382390SJung-uk Kim       YYLTYPE *yyget_lloc ( M4_YY_PROTO_ONLY_ARG );
9047e382390SJung-uk Kim    ]])
9057e382390SJung-uk Kim
9067e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_SET_LLOC]],,
9077e382390SJung-uk Kim    [[
9087e382390SJung-uk Kim        void yyset_lloc ( YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG );
9097e382390SJung-uk Kim    ]])
9107e382390SJung-uk Kim]])
9117e382390SJung-uk Kim%endif
9127e382390SJung-uk Kim
9137e382390SJung-uk Kim/* Macros after this point can all be overridden by user definitions in
9147e382390SJung-uk Kim * section 1.
9157e382390SJung-uk Kim */
9167e382390SJung-uk Kim
9177e382390SJung-uk Kim#ifndef YY_SKIP_YYWRAP
9187e382390SJung-uk Kim#ifdef __cplusplus
9197e382390SJung-uk Kimextern "C" int yywrap ( M4_YY_PROTO_ONLY_ARG );
9207e382390SJung-uk Kim#else
9217e382390SJung-uk Kimextern int yywrap ( M4_YY_PROTO_ONLY_ARG );
9227e382390SJung-uk Kim#endif
9237e382390SJung-uk Kim#endif
9247e382390SJung-uk Kim
9257e382390SJung-uk Kim%not-for-header
9267e382390SJung-uk Kim#ifndef YY_NO_UNPUT
9277e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_UNPUT]],,
9287e382390SJung-uk Kim    [[
9297e382390SJung-uk Kim    static void yyunput ( int c, char *buf_ptr  M4_YY_PROTO_LAST_ARG);
9307e382390SJung-uk Kim    ]])
9317e382390SJung-uk Kim#endif
9327e382390SJung-uk Kim%ok-for-header
9337e382390SJung-uk Kim%endif
9347e382390SJung-uk Kim
9357e382390SJung-uk Kim#ifndef yytext_ptr
9367e382390SJung-uk Kimstatic void yy_flex_strncpy ( char *, const char *, int M4_YY_PROTO_LAST_ARG);
9377e382390SJung-uk Kim#endif
9387e382390SJung-uk Kim
9397e382390SJung-uk Kim#ifdef YY_NEED_STRLEN
9407e382390SJung-uk Kimstatic int yy_flex_strlen ( const char * M4_YY_PROTO_LAST_ARG);
9417e382390SJung-uk Kim#endif
9427e382390SJung-uk Kim
9437e382390SJung-uk Kim#ifndef YY_NO_INPUT
9447e382390SJung-uk Kim%if-c-only Standard (non-C++) definition
9457e382390SJung-uk Kim%not-for-header
9467e382390SJung-uk Kim#ifdef __cplusplus
9477e382390SJung-uk Kimstatic int yyinput ( M4_YY_PROTO_ONLY_ARG );
9487e382390SJung-uk Kim#else
9497e382390SJung-uk Kimstatic int input ( M4_YY_PROTO_ONLY_ARG );
9507e382390SJung-uk Kim#endif
9517e382390SJung-uk Kim%ok-for-header
9527e382390SJung-uk Kim%endif
9537e382390SJung-uk Kim#endif
9547e382390SJung-uk Kim
9557e382390SJung-uk Kim
9567e382390SJung-uk Kim%if-c-only
9577e382390SJung-uk Kim%# TODO: This is messy.
9587e382390SJung-uk Kimm4_ifdef( [[M4_YY_STACK_USED]],
9597e382390SJung-uk Kim[[
9607e382390SJung-uk Kim
9617e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_REENTRANT]],
9627e382390SJung-uk Kim[[
9637e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
9647e382390SJung-uk Kim    [[
9657e382390SJung-uk Kim        static int yy_start_stack_ptr = 0;
9667e382390SJung-uk Kim        static int yy_start_stack_depth = 0;
9677e382390SJung-uk Kim        static int *yy_start_stack = NULL;
9687e382390SJung-uk Kim    ]])
9697e382390SJung-uk Kim]])
9707e382390SJung-uk Kim
9717e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
9727e382390SJung-uk Kim[[
9737e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,
9747e382390SJung-uk Kim    [[
9757e382390SJung-uk Kim    static void yy_push_state ( int _new_state M4_YY_PROTO_LAST_ARG);
9767e382390SJung-uk Kim    ]])
9777e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_POP_STATE]],,
9787e382390SJung-uk Kim    [[
9797e382390SJung-uk Kim    static void yy_pop_state ( M4_YY_PROTO_ONLY_ARG );
9807e382390SJung-uk Kim    ]])
9817e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
9827e382390SJung-uk Kim    [[
9837e382390SJung-uk Kim    static int yy_top_state ( M4_YY_PROTO_ONLY_ARG );
9847e382390SJung-uk Kim    ]])
9857e382390SJung-uk Kim]])
9867e382390SJung-uk Kim
9877e382390SJung-uk Kim]],
9887e382390SJung-uk Kim[[
9897e382390SJung-uk Kimm4_define( [[M4_YY_NO_PUSH_STATE]])
9907e382390SJung-uk Kimm4_define( [[M4_YY_NO_POP_STATE]])
9917e382390SJung-uk Kimm4_define( [[M4_YY_NO_TOP_STATE]])
9927e382390SJung-uk Kim]])
9937e382390SJung-uk Kim%endif
9947e382390SJung-uk Kim
9957e382390SJung-uk Kim/* Amount of stuff to slurp up with each read. */
9967e382390SJung-uk Kim#ifndef YY_READ_BUF_SIZE
9977e382390SJung-uk Kim#ifdef __ia64__
9987e382390SJung-uk Kim/* On IA-64, the buffer size is 16k, not 8k */
9997e382390SJung-uk Kim#define YY_READ_BUF_SIZE 16384
10007e382390SJung-uk Kim#else
10017e382390SJung-uk Kim#define YY_READ_BUF_SIZE 8192
10027e382390SJung-uk Kim#endif /* __ia64__ */
10037e382390SJung-uk Kim#endif
10047e382390SJung-uk Kim
10057e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
10067e382390SJung-uk Kim[[
10077e382390SJung-uk Kim/* Copy whatever the last rule matched to the standard output. */
10087e382390SJung-uk Kim#ifndef ECHO
10097e382390SJung-uk Kim%if-c-only Standard (non-C++) definition
10107e382390SJung-uk Kim/* This used to be an fputs(), but since the string might contain NUL's,
10117e382390SJung-uk Kim * we now use fwrite().
10127e382390SJung-uk Kim */
10137e382390SJung-uk Kim#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
10147e382390SJung-uk Kim%endif
10157e382390SJung-uk Kim%if-c++-only C++ definition
10167e382390SJung-uk Kim#define ECHO LexerOutput( yytext, yyleng )
10177e382390SJung-uk Kim%endif
10187e382390SJung-uk Kim#endif
10197e382390SJung-uk Kim]])
10207e382390SJung-uk Kim
10217e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
10227e382390SJung-uk Kim[[
10237e382390SJung-uk Kim/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
10247e382390SJung-uk Kim * is returned in "result".
10257e382390SJung-uk Kim */
10267e382390SJung-uk Kim#ifndef YY_INPUT
10277e382390SJung-uk Kim#define YY_INPUT(buf,result,max_size) \
10287e382390SJung-uk Kim%% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \
10297e382390SJung-uk Kim\
10307e382390SJung-uk Kim%if-c++-only C++ definition \
10317e382390SJung-uk Kim	if ( (int)(result = LexerInput( (char *) buf, max_size )) < 0 ) \
10327e382390SJung-uk Kim		YY_FATAL_ERROR( "input in flex scanner failed" );
10337e382390SJung-uk Kim%endif
10347e382390SJung-uk Kim
10357e382390SJung-uk Kim#endif
10367e382390SJung-uk Kim]])
10377e382390SJung-uk Kim
10387e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
10397e382390SJung-uk Kim[[
10407e382390SJung-uk Kim/* No semi-colon after return; correct usage is to write "yyterminate();" -
10417e382390SJung-uk Kim * we don't want an extra ';' after the "return" because that will cause
10427e382390SJung-uk Kim * some compilers to complain about unreachable statements.
10437e382390SJung-uk Kim */
10447e382390SJung-uk Kim#ifndef yyterminate
10457e382390SJung-uk Kim#define yyterminate() return YY_NULL
10467e382390SJung-uk Kim#endif
10477e382390SJung-uk Kim]])
10487e382390SJung-uk Kim
10497e382390SJung-uk Kim/* Number of entries by which start-condition stack grows. */
10507e382390SJung-uk Kim#ifndef YY_START_STACK_INCR
10517e382390SJung-uk Kim#define YY_START_STACK_INCR 25
10527e382390SJung-uk Kim#endif
10537e382390SJung-uk Kim
10547e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
10557e382390SJung-uk Kim[[
10567e382390SJung-uk Kim/* Report a fatal error. */
10577e382390SJung-uk Kim#ifndef YY_FATAL_ERROR
10587e382390SJung-uk Kim%if-c-only
10597e382390SJung-uk Kim#define YY_FATAL_ERROR(msg) yy_fatal_error( msg M4_YY_CALL_LAST_ARG)
10607e382390SJung-uk Kim%endif
10617e382390SJung-uk Kim%if-c++-only
10627e382390SJung-uk Kim#define YY_FATAL_ERROR(msg) LexerError( msg )
10637e382390SJung-uk Kim%endif
10647e382390SJung-uk Kim#endif
10657e382390SJung-uk Kim]])
10667e382390SJung-uk Kim
10677e382390SJung-uk Kim%if-tables-serialization structures and prototypes
10687e382390SJung-uk Kimm4preproc_include(`tables_shared.h')
10697e382390SJung-uk Kim
10707e382390SJung-uk Kim/* Load the DFA tables from the given stream.  */
10717e382390SJung-uk Kimint yytables_fload (FILE * fp M4_YY_PROTO_LAST_ARG);
10727e382390SJung-uk Kim
10737e382390SJung-uk Kim/* Unload the tables from memory. */
10747e382390SJung-uk Kimint yytables_destroy (M4_YY_PROTO_ONLY_ARG);
10757e382390SJung-uk Kim%not-for-header
10767e382390SJung-uk Kim
10777e382390SJung-uk Kim/** Describes a mapping from a serialized table id to its deserialized state in
10787e382390SJung-uk Kim * this scanner.  This is the bridge between our "generic" deserialization code
10797e382390SJung-uk Kim * and the specifics of this scanner.
10807e382390SJung-uk Kim */
10817e382390SJung-uk Kimstruct yytbl_dmap {
10827e382390SJung-uk Kim	enum yytbl_id dm_id;/**< table identifier */
10837e382390SJung-uk Kim	void  **dm_arr;		/**< address of pointer to store the deserialized table. */
10847e382390SJung-uk Kim	size_t  dm_sz;		/**< local sizeof() each element in table. */
10857e382390SJung-uk Kim};
10867e382390SJung-uk Kim
10877e382390SJung-uk Kim/** A {0,0,0}-terminated list of structs, forming the map */
10887e382390SJung-uk Kimstatic struct yytbl_dmap yydmap[] =
10897e382390SJung-uk Kim{
10907e382390SJung-uk Kim%tables-yydmap generated elements
10917e382390SJung-uk Kim    {0,0,0}
10927e382390SJung-uk Kim};
10937e382390SJung-uk Kim
10947e382390SJung-uk Kim/** A tables-reader object to maintain some state in the read. */
10957e382390SJung-uk Kimstruct yytbl_reader {
10967e382390SJung-uk Kim    FILE * fp; /**< input stream */
10977e382390SJung-uk Kim    flex_uint32_t bread; /**< bytes read since beginning of current tableset */
10987e382390SJung-uk Kim};
10997e382390SJung-uk Kim
11007e382390SJung-uk Kim%endif
11017e382390SJung-uk Kim/* end tables serialization structures and prototypes */
11027e382390SJung-uk Kim
11037e382390SJung-uk Kim%ok-for-header
11047e382390SJung-uk Kim
11057e382390SJung-uk Kim/* Default declaration of generated scanner - a define so the user can
11067e382390SJung-uk Kim * easily add parameters.
11077e382390SJung-uk Kim */
11087e382390SJung-uk Kim#ifndef YY_DECL
11097e382390SJung-uk Kim#define YY_DECL_IS_OURS 1
11107e382390SJung-uk Kim%if-c-only Standard (non-C++) definition
11117e382390SJung-uk Kim
11127e382390SJung-uk Kim
11137e382390SJung-uk Kimm4_define( [[M4_YY_LEX_PROTO]], [[(M4_YY_PROTO_ONLY_ARG)]])
11147e382390SJung-uk Kimm4_define( [[M4_YY_LEX_DECLARATION]], [[(M4_YY_DEF_ONLY_ARG)]])
11157e382390SJung-uk Kim
11167e382390SJung-uk Kimm4_ifdef( [[M4_YY_BISON_LVAL]],
11177e382390SJung-uk Kim[[
11187e382390SJung-uk Kim    m4_dnl  The bison pure parser is used. Redefine yylex to
11197e382390SJung-uk Kim    m4_dnl  accept the lval parameter.
11207e382390SJung-uk Kim
11217e382390SJung-uk Kim    m4_define( [[M4_YY_LEX_PROTO]], [[\]]
11227e382390SJung-uk Kim               [[(YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG)]])
11237e382390SJung-uk Kim    m4_define( [[M4_YY_LEX_DECLARATION]], [[\]]
11247e382390SJung-uk Kim               [[YYFARGS1(YYSTYPE *,yylval_param)]])
11257e382390SJung-uk Kim]])
11267e382390SJung-uk Kim
11277e382390SJung-uk Kimm4_ifdef( [[<M4_YY_BISON_LLOC>]],
11287e382390SJung-uk Kim[[
11297e382390SJung-uk Kim    m4_dnl  Locations are used. yylex should also accept the ylloc parameter.
11307e382390SJung-uk Kim
11317e382390SJung-uk Kim    m4_define( [[M4_YY_LEX_PROTO]], [[\]]
11327e382390SJung-uk Kim               [[(YYSTYPE * yylval_param, YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG)]])
11337e382390SJung-uk Kim    m4_define( [[M4_YY_LEX_DECLARATION]], [[\]]
11347e382390SJung-uk Kim               [[YYFARGS2(YYSTYPE *,yylval_param, YYLTYPE *,yylloc_param)]])
11357e382390SJung-uk Kim]])
11367e382390SJung-uk Kim
11377e382390SJung-uk Kimextern int yylex M4_YY_LEX_PROTO;
11387e382390SJung-uk Kim
11397e382390SJung-uk Kim#define YY_DECL int yylex M4_YY_LEX_DECLARATION
11407e382390SJung-uk Kim%endif
11417e382390SJung-uk Kim%if-c++-only C++ definition
11427e382390SJung-uk Kim#define YY_DECL int yyFlexLexer::yylex()
11437e382390SJung-uk Kim%endif
11447e382390SJung-uk Kim#endif /* !YY_DECL */
11457e382390SJung-uk Kim
11467e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
11477e382390SJung-uk Kim[[
11487e382390SJung-uk Kim/* Code executed at the beginning of each rule, after yytext and yyleng
11497e382390SJung-uk Kim * have been set up.
11507e382390SJung-uk Kim */
11517e382390SJung-uk Kim#ifndef YY_USER_ACTION
11527e382390SJung-uk Kim#define YY_USER_ACTION
11537e382390SJung-uk Kim#endif
11547e382390SJung-uk Kim]])
11557e382390SJung-uk Kim
11567e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
11577e382390SJung-uk Kim[[
11587e382390SJung-uk Kim/* Code executed at the end of each rule. */
11597e382390SJung-uk Kim#ifndef YY_BREAK
11607e382390SJung-uk Kim#define YY_BREAK /*LINTED*/break;
11617e382390SJung-uk Kim#endif
11627e382390SJung-uk Kim]])
11637e382390SJung-uk Kim
11647e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
11657e382390SJung-uk Kim[[
11667e382390SJung-uk Kim%% [6.0] YY_RULE_SETUP definition goes here
11677e382390SJung-uk Kim]])
11687e382390SJung-uk Kim
11697e382390SJung-uk Kim%not-for-header
11707e382390SJung-uk Kim/** The main scanner function which does all the work.
11717e382390SJung-uk Kim */
11727e382390SJung-uk KimYY_DECL
11737e382390SJung-uk Kim{
11747e382390SJung-uk Kim	yy_state_type yy_current_state;
11757e382390SJung-uk Kim	char *yy_cp, *yy_bp;
11767e382390SJung-uk Kim	int yy_act;
11777e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
11787e382390SJung-uk Kim
11797e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_REENTRANT]],
11807e382390SJung-uk Kim[[
11817e382390SJung-uk Kim    m4_ifdef( [[M4_YY_BISON_LVAL]],
11827e382390SJung-uk Kim    [[
11837e382390SJung-uk Kim        YYSTYPE * yylval;
11847e382390SJung-uk Kim    ]])
11857e382390SJung-uk Kim    m4_ifdef( [[<M4_YY_BISON_LLOC>]],
11867e382390SJung-uk Kim    [[
11877e382390SJung-uk Kim        YYLTYPE * yylloc;
11887e382390SJung-uk Kim    ]])
11897e382390SJung-uk Kim]])
11907e382390SJung-uk Kim
11917e382390SJung-uk Kimm4_ifdef( [[M4_YY_BISON_LVAL]],
11927e382390SJung-uk Kim[[
11937e382390SJung-uk Kim    yylval = yylval_param;
11947e382390SJung-uk Kim]])
11957e382390SJung-uk Kim
11967e382390SJung-uk Kimm4_ifdef( [[<M4_YY_BISON_LLOC>]],
11977e382390SJung-uk Kim[[
11987e382390SJung-uk Kim    yylloc = yylloc_param;
11997e382390SJung-uk Kim]])
12007e382390SJung-uk Kim
12017e382390SJung-uk Kim	if ( !YY_G(yy_init) )
12027e382390SJung-uk Kim		{
12037e382390SJung-uk Kim		YY_G(yy_init) = 1;
12047e382390SJung-uk Kim
12057e382390SJung-uk Kim#ifdef YY_USER_INIT
12067e382390SJung-uk Kim		YY_USER_INIT;
12077e382390SJung-uk Kim#endif
12087e382390SJung-uk Kim
12097e382390SJung-uk Kimm4_ifdef( [[M4_YY_USES_REJECT]],
12107e382390SJung-uk Kim[[
12117e382390SJung-uk Kim        /* Create the reject buffer large enough to save one state per allowed character. */
12127e382390SJung-uk Kim        if ( ! YY_G(yy_state_buf) )
12137e382390SJung-uk Kim            YY_G(yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  M4_YY_CALL_LAST_ARG);
12147e382390SJung-uk Kim            if ( ! YY_G(yy_state_buf) )
12157e382390SJung-uk Kim                YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
12167e382390SJung-uk Kim]])
12177e382390SJung-uk Kim
12187e382390SJung-uk Kim		if ( ! YY_G(yy_start) )
12197e382390SJung-uk Kim			YY_G(yy_start) = 1;	/* first start state */
12207e382390SJung-uk Kim
12217e382390SJung-uk Kim		if ( ! yyin )
12227e382390SJung-uk Kim%if-c-only
12237e382390SJung-uk Kim			yyin = stdin;
12247e382390SJung-uk Kim%endif
12257e382390SJung-uk Kim%if-c++-only
12267e382390SJung-uk Kim			yyin.rdbuf(std::cin.rdbuf());
12277e382390SJung-uk Kim%endif
12287e382390SJung-uk Kim
12297e382390SJung-uk Kim		if ( ! yyout )
12307e382390SJung-uk Kim%if-c-only
12317e382390SJung-uk Kim			yyout = stdout;
12327e382390SJung-uk Kim%endif
12337e382390SJung-uk Kim%if-c++-only
12347e382390SJung-uk Kim			yyout.rdbuf(std::cout.rdbuf());
12357e382390SJung-uk Kim%endif
12367e382390SJung-uk Kim
12377e382390SJung-uk Kim		if ( ! YY_CURRENT_BUFFER ) {
12387e382390SJung-uk Kim			yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
12397e382390SJung-uk Kim			YY_CURRENT_BUFFER_LVALUE =
12407e382390SJung-uk Kim				yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);
12417e382390SJung-uk Kim		}
12427e382390SJung-uk Kim
12437e382390SJung-uk Kim		yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
12447e382390SJung-uk Kim		}
12457e382390SJung-uk Kim
12467e382390SJung-uk Kim	{
12477e382390SJung-uk Kim%% [7.0] user's declarations go here
12487e382390SJung-uk Kim
12497e382390SJung-uk Kim	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
12507e382390SJung-uk Kim		{
12517e382390SJung-uk Kim%% [8.0] yymore()-related code goes here
12527e382390SJung-uk Kim		yy_cp = YY_G(yy_c_buf_p);
12537e382390SJung-uk Kim
12547e382390SJung-uk Kim		/* Support of yytext. */
12557e382390SJung-uk Kim		*yy_cp = YY_G(yy_hold_char);
12567e382390SJung-uk Kim
12577e382390SJung-uk Kim		/* yy_bp points to the position in yy_ch_buf of the start of
12587e382390SJung-uk Kim		 * the current run.
12597e382390SJung-uk Kim		 */
12607e382390SJung-uk Kim		yy_bp = yy_cp;
12617e382390SJung-uk Kim
12627e382390SJung-uk Kim%% [9.0] code to set up and find next match goes here
12637e382390SJung-uk Kim
12647e382390SJung-uk Kimyy_find_action:
12657e382390SJung-uk Kim%% [10.0] code to find the action number goes here
12667e382390SJung-uk Kim
12677e382390SJung-uk Kim		YY_DO_BEFORE_ACTION;
12687e382390SJung-uk Kim
12697e382390SJung-uk Kim%% [11.0] code for yylineno update goes here
12707e382390SJung-uk Kim
12717e382390SJung-uk Kimdo_action:	/* This label is used only to access EOF actions. */
12727e382390SJung-uk Kim
12737e382390SJung-uk Kim%% [12.0] debug code goes here
12747e382390SJung-uk Kim
12757e382390SJung-uk Kim		switch ( yy_act )
12767e382390SJung-uk Kim	{ /* beginning of action switch */
12777e382390SJung-uk Kim%% [13.0] actions go here
12787e382390SJung-uk Kim
12797e382390SJung-uk Kim	case YY_END_OF_BUFFER:
12807e382390SJung-uk Kim		{
12817e382390SJung-uk Kim		/* Amount of text matched not including the EOB char. */
12827e382390SJung-uk Kim		int yy_amount_of_matched_text = (int) (yy_cp - YY_G(yytext_ptr)) - 1;
12837e382390SJung-uk Kim
12847e382390SJung-uk Kim		/* Undo the effects of YY_DO_BEFORE_ACTION. */
12857e382390SJung-uk Kim		*yy_cp = YY_G(yy_hold_char);
12867e382390SJung-uk Kim		YY_RESTORE_YY_MORE_OFFSET
12877e382390SJung-uk Kim
12887e382390SJung-uk Kim		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
12897e382390SJung-uk Kim			{
12907e382390SJung-uk Kim			/* We're scanning a new file or input source.  It's
12917e382390SJung-uk Kim			 * possible that this happened because the user
12927e382390SJung-uk Kim			 * just pointed yyin at a new source and called
12937e382390SJung-uk Kim			 * yylex().  If so, then we have to assure
12947e382390SJung-uk Kim			 * consistency between YY_CURRENT_BUFFER and our
12957e382390SJung-uk Kim			 * globals.  Here is the right place to do so, because
12967e382390SJung-uk Kim			 * this is the first action (other than possibly a
12977e382390SJung-uk Kim			 * back-up) that will match for the new input source.
12987e382390SJung-uk Kim			 */
12997e382390SJung-uk Kim			YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
13007e382390SJung-uk Kim%if-c-only
13017e382390SJung-uk Kim			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
13027e382390SJung-uk Kim%endif
13037e382390SJung-uk Kim%if-c++-only
13047e382390SJung-uk Kim			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin.rdbuf();
13057e382390SJung-uk Kim%endif
13067e382390SJung-uk Kim			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
13077e382390SJung-uk Kim			}
13087e382390SJung-uk Kim
13097e382390SJung-uk Kim		/* Note that here we test for yy_c_buf_p "<=" to the position
13107e382390SJung-uk Kim		 * of the first EOB in the buffer, since yy_c_buf_p will
13117e382390SJung-uk Kim		 * already have been incremented past the NUL character
13127e382390SJung-uk Kim		 * (since all states make transitions on EOB to the
13137e382390SJung-uk Kim		 * end-of-buffer state).  Contrast this with the test
13147e382390SJung-uk Kim		 * in input().
13157e382390SJung-uk Kim		 */
13167e382390SJung-uk Kim		if ( YY_G(yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )
13177e382390SJung-uk Kim			{ /* This was really a NUL. */
13187e382390SJung-uk Kim			yy_state_type yy_next_state;
13197e382390SJung-uk Kim
13207e382390SJung-uk Kim			YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + yy_amount_of_matched_text;
13217e382390SJung-uk Kim
13227e382390SJung-uk Kim			yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
13237e382390SJung-uk Kim
13247e382390SJung-uk Kim			/* Okay, we're now positioned to make the NUL
13257e382390SJung-uk Kim			 * transition.  We couldn't have
13267e382390SJung-uk Kim			 * yy_get_previous_state() go ahead and do it
13277e382390SJung-uk Kim			 * for us because it doesn't know how to deal
13287e382390SJung-uk Kim			 * with the possibility of jamming (and we don't
13297e382390SJung-uk Kim			 * want to build jamming into it because then it
13307e382390SJung-uk Kim			 * will run more slowly).
13317e382390SJung-uk Kim			 */
13327e382390SJung-uk Kim
13337e382390SJung-uk Kim			yy_next_state = yy_try_NUL_trans( yy_current_state M4_YY_CALL_LAST_ARG);
13347e382390SJung-uk Kim
13357e382390SJung-uk Kim			yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
13367e382390SJung-uk Kim
13377e382390SJung-uk Kim			if ( yy_next_state )
13387e382390SJung-uk Kim				{
13397e382390SJung-uk Kim				/* Consume the NUL. */
13407e382390SJung-uk Kim				yy_cp = ++YY_G(yy_c_buf_p);
13417e382390SJung-uk Kim				yy_current_state = yy_next_state;
13427e382390SJung-uk Kim				goto yy_match;
13437e382390SJung-uk Kim				}
13447e382390SJung-uk Kim
13457e382390SJung-uk Kim			else
13467e382390SJung-uk Kim				{
13477e382390SJung-uk Kim%% [14.0] code to do back-up for compressed tables and set up yy_cp goes here
13487e382390SJung-uk Kim				goto yy_find_action;
13497e382390SJung-uk Kim				}
13507e382390SJung-uk Kim			}
13517e382390SJung-uk Kim
13527e382390SJung-uk Kim		else switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )
13537e382390SJung-uk Kim			{
13547e382390SJung-uk Kim			case EOB_ACT_END_OF_FILE:
13557e382390SJung-uk Kim				{
13567e382390SJung-uk Kim				YY_G(yy_did_buffer_switch_on_eof) = 0;
13577e382390SJung-uk Kim
13587e382390SJung-uk Kim				if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
13597e382390SJung-uk Kim					{
13607e382390SJung-uk Kim					/* Note: because we've taken care in
13617e382390SJung-uk Kim					 * yy_get_next_buffer() to have set up
13627e382390SJung-uk Kim					 * yytext, we can now set up
13637e382390SJung-uk Kim					 * yy_c_buf_p so that if some total
13647e382390SJung-uk Kim					 * hoser (like flex itself) wants to
13657e382390SJung-uk Kim					 * call the scanner after we return the
13667e382390SJung-uk Kim					 * YY_NULL, it'll still work - another
13677e382390SJung-uk Kim					 * YY_NULL will get returned.
13687e382390SJung-uk Kim					 */
13697e382390SJung-uk Kim					YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + YY_MORE_ADJ;
13707e382390SJung-uk Kim
13717e382390SJung-uk Kim					yy_act = YY_STATE_EOF(YY_START);
13727e382390SJung-uk Kim					goto do_action;
13737e382390SJung-uk Kim					}
13747e382390SJung-uk Kim
13757e382390SJung-uk Kim				else
13767e382390SJung-uk Kim					{
13777e382390SJung-uk Kim					if ( ! YY_G(yy_did_buffer_switch_on_eof) )
13787e382390SJung-uk Kim						YY_NEW_FILE;
13797e382390SJung-uk Kim					}
13807e382390SJung-uk Kim				break;
13817e382390SJung-uk Kim				}
13827e382390SJung-uk Kim
13837e382390SJung-uk Kim			case EOB_ACT_CONTINUE_SCAN:
13847e382390SJung-uk Kim				YY_G(yy_c_buf_p) =
13857e382390SJung-uk Kim					YY_G(yytext_ptr) + yy_amount_of_matched_text;
13867e382390SJung-uk Kim
13877e382390SJung-uk Kim				yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
13887e382390SJung-uk Kim
13897e382390SJung-uk Kim				yy_cp = YY_G(yy_c_buf_p);
13907e382390SJung-uk Kim				yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
13917e382390SJung-uk Kim				goto yy_match;
13927e382390SJung-uk Kim
13937e382390SJung-uk Kim			case EOB_ACT_LAST_MATCH:
13947e382390SJung-uk Kim				YY_G(yy_c_buf_p) =
13957e382390SJung-uk Kim				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)];
13967e382390SJung-uk Kim
13977e382390SJung-uk Kim				yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
13987e382390SJung-uk Kim
13997e382390SJung-uk Kim				yy_cp = YY_G(yy_c_buf_p);
14007e382390SJung-uk Kim				yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
14017e382390SJung-uk Kim				goto yy_find_action;
14027e382390SJung-uk Kim			}
14037e382390SJung-uk Kim		break;
14047e382390SJung-uk Kim		}
14057e382390SJung-uk Kim
14067e382390SJung-uk Kim	default:
14077e382390SJung-uk Kim		YY_FATAL_ERROR(
14087e382390SJung-uk Kim			"fatal flex scanner internal error--no action found" );
14097e382390SJung-uk Kim	} /* end of action switch */
14107e382390SJung-uk Kim		} /* end of scanning one token */
14117e382390SJung-uk Kim	} /* end of user's declarations */
14127e382390SJung-uk Kim} /* end of yylex */
14137e382390SJung-uk Kim%ok-for-header
14147e382390SJung-uk Kim
14157e382390SJung-uk Kim%if-c++-only
14167e382390SJung-uk Kim%not-for-header
14177e382390SJung-uk Kim/* The contents of this function are C++ specific, so the YY_G macro is not used.
14187e382390SJung-uk Kim * This constructor simply maintains backward compatibility.
14197e382390SJung-uk Kim * DEPRECATED
14207e382390SJung-uk Kim */
14217e382390SJung-uk KimyyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ):
14227e382390SJung-uk Kim	yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()),
14237e382390SJung-uk Kim	yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf())
14247e382390SJung-uk Kim{
14257e382390SJung-uk Kim	ctor_common();
14267e382390SJung-uk Kim}
14277e382390SJung-uk Kim
14287e382390SJung-uk Kim/* The contents of this function are C++ specific, so the YY_G macro is not used.
14297e382390SJung-uk Kim */
14307e382390SJung-uk KimyyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout ):
14317e382390SJung-uk Kim	yyin(arg_yyin.rdbuf()),
14327e382390SJung-uk Kim	yyout(arg_yyout.rdbuf())
14337e382390SJung-uk Kim{
14347e382390SJung-uk Kim	ctor_common();
14357e382390SJung-uk Kim}
14367e382390SJung-uk Kim
14377e382390SJung-uk Kim/* The contents of this function are C++ specific, so the YY_G macro is not used.
14387e382390SJung-uk Kim */
14397e382390SJung-uk Kimvoid yyFlexLexer::ctor_common()
14407e382390SJung-uk Kim{
14417e382390SJung-uk Kim	yy_c_buf_p = 0;
14427e382390SJung-uk Kim	yy_init = 0;
14437e382390SJung-uk Kim	yy_start = 0;
14447e382390SJung-uk Kim	yy_flex_debug = 0;
14457e382390SJung-uk Kim	yylineno = 1;	// this will only get updated if %option yylineno
14467e382390SJung-uk Kim
14477e382390SJung-uk Kim	yy_did_buffer_switch_on_eof = 0;
14487e382390SJung-uk Kim
14497e382390SJung-uk Kim	yy_looking_for_trail_begin = 0;
14507e382390SJung-uk Kim	yy_more_flag = 0;
14517e382390SJung-uk Kim	yy_more_len = 0;
14527e382390SJung-uk Kim	yy_more_offset = yy_prev_more_offset = 0;
14537e382390SJung-uk Kim
14547e382390SJung-uk Kim	yy_start_stack_ptr = yy_start_stack_depth = 0;
14557e382390SJung-uk Kim	yy_start_stack = NULL;
14567e382390SJung-uk Kim
14577e382390SJung-uk Kim	yy_buffer_stack = NULL;
14587e382390SJung-uk Kim	yy_buffer_stack_top = 0;
14597e382390SJung-uk Kim	yy_buffer_stack_max = 0;
14607e382390SJung-uk Kim
14617e382390SJung-uk Kim
14627e382390SJung-uk Kimm4_ifdef( [[M4_YY_USES_REJECT]],
14637e382390SJung-uk Kim[[
14647e382390SJung-uk Kim	yy_state_buf = new yy_state_type[YY_STATE_BUF_SIZE];
14657e382390SJung-uk Kim]],
14667e382390SJung-uk Kim[[
14677e382390SJung-uk Kim	yy_state_buf = 0;
14687e382390SJung-uk Kim]])
14697e382390SJung-uk Kim}
14707e382390SJung-uk Kim
14717e382390SJung-uk Kim/* The contents of this function are C++ specific, so the YY_G macro is not used.
14727e382390SJung-uk Kim */
14737e382390SJung-uk KimyyFlexLexer::~yyFlexLexer()
14747e382390SJung-uk Kim{
14757e382390SJung-uk Kim	delete [] yy_state_buf;
14767e382390SJung-uk Kim	yyfree( yy_start_stack M4_YY_CALL_LAST_ARG );
14777e382390SJung-uk Kim	yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
14787e382390SJung-uk Kim	yyfree( yy_buffer_stack M4_YY_CALL_LAST_ARG );
14797e382390SJung-uk Kim}
14807e382390SJung-uk Kim
14817e382390SJung-uk Kim/* The contents of this function are C++ specific, so the YY_G macro is not used.
14827e382390SJung-uk Kim */
14837e382390SJung-uk Kimvoid yyFlexLexer::switch_streams( std::istream& new_in, std::ostream& new_out )
14847e382390SJung-uk Kim{
14857e382390SJung-uk Kim	// was if( new_in )
14867e382390SJung-uk Kim	yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
14877e382390SJung-uk Kim	yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  M4_YY_CALL_LAST_ARG) M4_YY_CALL_LAST_ARG);
14887e382390SJung-uk Kim
14897e382390SJung-uk Kim	// was if( new_out )
14907e382390SJung-uk Kim	yyout.rdbuf(new_out.rdbuf());
14917e382390SJung-uk Kim}
14927e382390SJung-uk Kim
14937e382390SJung-uk Kim/* The contents of this function are C++ specific, so the YY_G macro is not used.
14947e382390SJung-uk Kim */
14957e382390SJung-uk Kimvoid yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
14967e382390SJung-uk Kim{
14977e382390SJung-uk Kim	if( ! new_in ) {
14987e382390SJung-uk Kim		new_in = &yyin;
14997e382390SJung-uk Kim	}
15007e382390SJung-uk Kim
15017e382390SJung-uk Kim	if ( ! new_out ) {
15027e382390SJung-uk Kim		new_out = &yyout;
15037e382390SJung-uk Kim	}
15047e382390SJung-uk Kim
15057e382390SJung-uk Kim	switch_streams(*new_in, *new_out);
15067e382390SJung-uk Kim}
15077e382390SJung-uk Kim
15087e382390SJung-uk Kim#ifdef YY_INTERACTIVE
15097e382390SJung-uk Kimint yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
15107e382390SJung-uk Kim#else
15117e382390SJung-uk Kimint yyFlexLexer::LexerInput( char* buf, int max_size )
15127e382390SJung-uk Kim#endif
15137e382390SJung-uk Kim{
15147e382390SJung-uk Kim	if ( yyin.eof() || yyin.fail() )
15157e382390SJung-uk Kim		return 0;
15167e382390SJung-uk Kim
15177e382390SJung-uk Kim#ifdef YY_INTERACTIVE
15187e382390SJung-uk Kim	yyin.get( buf[0] );
15197e382390SJung-uk Kim
15207e382390SJung-uk Kim	if ( yyin.eof() )
15217e382390SJung-uk Kim		return 0;
15227e382390SJung-uk Kim
15237e382390SJung-uk Kim	if ( yyin.bad() )
15247e382390SJung-uk Kim		return -1;
15257e382390SJung-uk Kim
15267e382390SJung-uk Kim	return 1;
15277e382390SJung-uk Kim
15287e382390SJung-uk Kim#else
15297e382390SJung-uk Kim	(void) yyin.read( buf, max_size );
15307e382390SJung-uk Kim
15317e382390SJung-uk Kim	if ( yyin.bad() )
15327e382390SJung-uk Kim		return -1;
15337e382390SJung-uk Kim	else
15347e382390SJung-uk Kim		return yyin.gcount();
15357e382390SJung-uk Kim#endif
15367e382390SJung-uk Kim}
15377e382390SJung-uk Kim
15387e382390SJung-uk Kimvoid yyFlexLexer::LexerOutput( const char* buf, int size )
15397e382390SJung-uk Kim{
15407e382390SJung-uk Kim	(void) yyout.write( buf, size );
15417e382390SJung-uk Kim}
15427e382390SJung-uk Kim%ok-for-header
15437e382390SJung-uk Kim%endif
15447e382390SJung-uk Kim
15457e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
15467e382390SJung-uk Kim[[
15477e382390SJung-uk Kim/* yy_get_next_buffer - try to read in a new buffer
15487e382390SJung-uk Kim *
15497e382390SJung-uk Kim * Returns a code representing an action:
15507e382390SJung-uk Kim *	EOB_ACT_LAST_MATCH -
15517e382390SJung-uk Kim *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
15527e382390SJung-uk Kim *	EOB_ACT_END_OF_FILE - end of file
15537e382390SJung-uk Kim */
15547e382390SJung-uk Kim%if-c-only
15557e382390SJung-uk Kimstatic int yy_get_next_buffer (M4_YY_DEF_ONLY_ARG)
15567e382390SJung-uk Kim%endif
15577e382390SJung-uk Kim%if-c++-only
15587e382390SJung-uk Kimint yyFlexLexer::yy_get_next_buffer()
15597e382390SJung-uk Kim%endif
15607e382390SJung-uk Kim{
15617e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
15627e382390SJung-uk Kim	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
15637e382390SJung-uk Kim	char *source = YY_G(yytext_ptr);
15647e382390SJung-uk Kim	int number_to_move, i;
15657e382390SJung-uk Kim	int ret_val;
15667e382390SJung-uk Kim
15677e382390SJung-uk Kim	if ( YY_G(yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] )
15687e382390SJung-uk Kim		YY_FATAL_ERROR(
15697e382390SJung-uk Kim		"fatal flex scanner internal error--end of buffer missed" );
15707e382390SJung-uk Kim
15717e382390SJung-uk Kim	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
15727e382390SJung-uk Kim		{ /* Don't try to fill the buffer, so this is an EOF. */
15737e382390SJung-uk Kim		if ( YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - YY_MORE_ADJ == 1 )
15747e382390SJung-uk Kim			{
15757e382390SJung-uk Kim			/* We matched a single character, the EOB, so
15767e382390SJung-uk Kim			 * treat this as a final EOF.
15777e382390SJung-uk Kim			 */
15787e382390SJung-uk Kim			return EOB_ACT_END_OF_FILE;
15797e382390SJung-uk Kim			}
15807e382390SJung-uk Kim
15817e382390SJung-uk Kim		else
15827e382390SJung-uk Kim			{
15837e382390SJung-uk Kim			/* We matched some text prior to the EOB, first
15847e382390SJung-uk Kim			 * process it.
15857e382390SJung-uk Kim			 */
15867e382390SJung-uk Kim			return EOB_ACT_LAST_MATCH;
15877e382390SJung-uk Kim			}
15887e382390SJung-uk Kim		}
15897e382390SJung-uk Kim
15907e382390SJung-uk Kim	/* Try to read more data. */
15917e382390SJung-uk Kim
15927e382390SJung-uk Kim	/* First move last chars to start of buffer. */
15937e382390SJung-uk Kim	number_to_move = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - 1);
15947e382390SJung-uk Kim
15957e382390SJung-uk Kim	for ( i = 0; i < number_to_move; ++i )
15967e382390SJung-uk Kim		*(dest++) = *(source++);
15977e382390SJung-uk Kim
15987e382390SJung-uk Kim	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
15997e382390SJung-uk Kim		/* don't do the read, it's not guaranteed to return an EOF,
16007e382390SJung-uk Kim		 * just force an EOF
16017e382390SJung-uk Kim		 */
16027e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars) = 0;
16037e382390SJung-uk Kim
16047e382390SJung-uk Kim	else
16057e382390SJung-uk Kim		{
16067e382390SJung-uk Kim			int num_to_read =
16077e382390SJung-uk Kim			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
16087e382390SJung-uk Kim
16097e382390SJung-uk Kim		while ( num_to_read <= 0 )
16107e382390SJung-uk Kim			{ /* Not enough room in the buffer - grow it. */
16117e382390SJung-uk Kimm4_ifdef( [[M4_YY_USES_REJECT]],
16127e382390SJung-uk Kim[[
16137e382390SJung-uk Kim			YY_FATAL_ERROR(
16147e382390SJung-uk Kim"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
16157e382390SJung-uk Kim]],
16167e382390SJung-uk Kim[[
16177e382390SJung-uk Kim			/* just a shorter name for the current buffer */
16187e382390SJung-uk Kim			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
16197e382390SJung-uk Kim
16207e382390SJung-uk Kim			int yy_c_buf_p_offset =
16217e382390SJung-uk Kim				(int) (YY_G(yy_c_buf_p) - b->yy_ch_buf);
16227e382390SJung-uk Kim
16237e382390SJung-uk Kim			if ( b->yy_is_our_buffer )
16247e382390SJung-uk Kim				{
16257e382390SJung-uk Kim				int new_size = b->yy_buf_size * 2;
16267e382390SJung-uk Kim
16277e382390SJung-uk Kim				if ( new_size <= 0 )
16287e382390SJung-uk Kim					b->yy_buf_size += b->yy_buf_size / 8;
16297e382390SJung-uk Kim				else
16307e382390SJung-uk Kim					b->yy_buf_size *= 2;
16317e382390SJung-uk Kim
16327e382390SJung-uk Kim				b->yy_ch_buf = (char *)
16337e382390SJung-uk Kim					/* Include room in for 2 EOB chars. */
16347e382390SJung-uk Kim					yyrealloc( (void *) b->yy_ch_buf,
16357e382390SJung-uk Kim							 (yy_size_t) (b->yy_buf_size + 2) M4_YY_CALL_LAST_ARG );
16367e382390SJung-uk Kim				}
16377e382390SJung-uk Kim			else
16387e382390SJung-uk Kim				/* Can't grow it, we don't own it. */
16397e382390SJung-uk Kim				b->yy_ch_buf = NULL;
16407e382390SJung-uk Kim
16417e382390SJung-uk Kim			if ( ! b->yy_ch_buf )
16427e382390SJung-uk Kim				YY_FATAL_ERROR(
16437e382390SJung-uk Kim				"fatal error - scanner input buffer overflow" );
16447e382390SJung-uk Kim
16457e382390SJung-uk Kim			YY_G(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
16467e382390SJung-uk Kim
16477e382390SJung-uk Kim			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
16487e382390SJung-uk Kim						number_to_move - 1;
16497e382390SJung-uk Kim]])
16507e382390SJung-uk Kim			}
16517e382390SJung-uk Kim
16527e382390SJung-uk Kim		if ( num_to_read > YY_READ_BUF_SIZE )
16537e382390SJung-uk Kim			num_to_read = YY_READ_BUF_SIZE;
16547e382390SJung-uk Kim
16557e382390SJung-uk Kim		/* Read in more data. */
16567e382390SJung-uk Kim		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
16577e382390SJung-uk Kim			YY_G(yy_n_chars), num_to_read );
16587e382390SJung-uk Kim
16597e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
16607e382390SJung-uk Kim		}
16617e382390SJung-uk Kim
16627e382390SJung-uk Kim	if ( YY_G(yy_n_chars) == 0 )
16637e382390SJung-uk Kim		{
16647e382390SJung-uk Kim		if ( number_to_move == YY_MORE_ADJ )
16657e382390SJung-uk Kim			{
16667e382390SJung-uk Kim			ret_val = EOB_ACT_END_OF_FILE;
16677e382390SJung-uk Kim			yyrestart( yyin  M4_YY_CALL_LAST_ARG);
16687e382390SJung-uk Kim			}
16697e382390SJung-uk Kim
16707e382390SJung-uk Kim		else
16717e382390SJung-uk Kim			{
16727e382390SJung-uk Kim			ret_val = EOB_ACT_LAST_MATCH;
16737e382390SJung-uk Kim			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
16747e382390SJung-uk Kim				YY_BUFFER_EOF_PENDING;
16757e382390SJung-uk Kim			}
16767e382390SJung-uk Kim		}
16777e382390SJung-uk Kim
16787e382390SJung-uk Kim	else
16797e382390SJung-uk Kim		ret_val = EOB_ACT_CONTINUE_SCAN;
16807e382390SJung-uk Kim
16817e382390SJung-uk Kim	if ((YY_G(yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
16827e382390SJung-uk Kim		/* Extend the array by 50%, plus the number we really need. */
16837e382390SJung-uk Kim		int new_size = YY_G(yy_n_chars) + number_to_move + (YY_G(yy_n_chars) >> 1);
16847e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
16857e382390SJung-uk Kim			(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size M4_YY_CALL_LAST_ARG );
16867e382390SJung-uk Kim		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
16877e382390SJung-uk Kim			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
16887e382390SJung-uk Kim		/* "- 2" to take care of EOB's */
16897e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
16907e382390SJung-uk Kim	}
16917e382390SJung-uk Kim
16927e382390SJung-uk Kim	YY_G(yy_n_chars) += number_to_move;
16937e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
16947e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
16957e382390SJung-uk Kim
16967e382390SJung-uk Kim	YY_G(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
16977e382390SJung-uk Kim
16987e382390SJung-uk Kim	return ret_val;
16997e382390SJung-uk Kim}
17007e382390SJung-uk Kim]])
17017e382390SJung-uk Kim
17027e382390SJung-uk Kim/* yy_get_previous_state - get the state just before the EOB char was reached */
17037e382390SJung-uk Kim
17047e382390SJung-uk Kim%if-c-only
17057e382390SJung-uk Kim%not-for-header
17067e382390SJung-uk Kim    static yy_state_type yy_get_previous_state (M4_YY_DEF_ONLY_ARG)
17077e382390SJung-uk Kim%endif
17087e382390SJung-uk Kim%if-c++-only
17097e382390SJung-uk Kim    yy_state_type yyFlexLexer::yy_get_previous_state()
17107e382390SJung-uk Kim%endif
17117e382390SJung-uk Kim{
17127e382390SJung-uk Kim	yy_state_type yy_current_state;
17137e382390SJung-uk Kim	char *yy_cp;
17147e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
17157e382390SJung-uk Kim
17167e382390SJung-uk Kim%% [15.0] code to get the start state into yy_current_state goes here
17177e382390SJung-uk Kim
17187e382390SJung-uk Kim	for ( yy_cp = YY_G(yytext_ptr) + YY_MORE_ADJ; yy_cp < YY_G(yy_c_buf_p); ++yy_cp )
17197e382390SJung-uk Kim		{
17207e382390SJung-uk Kim%% [16.0] code to find the next state goes here
17217e382390SJung-uk Kim		}
17227e382390SJung-uk Kim
17237e382390SJung-uk Kim	return yy_current_state;
17247e382390SJung-uk Kim}
17257e382390SJung-uk Kim
17267e382390SJung-uk Kim
17277e382390SJung-uk Kim/* yy_try_NUL_trans - try to make a transition on the NUL character
17287e382390SJung-uk Kim *
17297e382390SJung-uk Kim * synopsis
17307e382390SJung-uk Kim *	next_state = yy_try_NUL_trans( current_state );
17317e382390SJung-uk Kim */
17327e382390SJung-uk Kim%if-c-only
17337e382390SJung-uk Kim    static yy_state_type yy_try_NUL_trans  YYFARGS1( yy_state_type, yy_current_state)
17347e382390SJung-uk Kim%endif
17357e382390SJung-uk Kim%if-c++-only
17367e382390SJung-uk Kim    yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
17377e382390SJung-uk Kim%endif
17387e382390SJung-uk Kim{
17397e382390SJung-uk Kim	int yy_is_jam;
17407e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR(); /* This var may be unused depending upon options. */
17417e382390SJung-uk Kim%% [17.0] code to find the next state, and perhaps do backing up, goes here
17427e382390SJung-uk Kim
17437e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
17447e382390SJung-uk Kim	return yy_is_jam ? 0 : yy_current_state;
17457e382390SJung-uk Kim}
17467e382390SJung-uk Kim
17477e382390SJung-uk Kim
17487e382390SJung-uk Kim#ifndef YY_NO_UNPUT
17497e382390SJung-uk Kim%if-c-only
17507e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_UNPUT]],,
17517e382390SJung-uk Kim[[
17527e382390SJung-uk Kim    static void yyunput YYFARGS2( int,c, char *,yy_bp)
17537e382390SJung-uk Kim%endif
17547e382390SJung-uk Kim%if-c++-only
17557e382390SJung-uk Kim    void yyFlexLexer::yyunput( int c, char* yy_bp)
17567e382390SJung-uk Kim%endif
17577e382390SJung-uk Kim{
17587e382390SJung-uk Kim	char *yy_cp;
17597e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
17607e382390SJung-uk Kim
17617e382390SJung-uk Kim    yy_cp = YY_G(yy_c_buf_p);
17627e382390SJung-uk Kim
17637e382390SJung-uk Kim	/* undo effects of setting up yytext */
17647e382390SJung-uk Kim	*yy_cp = YY_G(yy_hold_char);
17657e382390SJung-uk Kim
17667e382390SJung-uk Kim	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
17677e382390SJung-uk Kim		{ /* need to shift things up to make room */
17687e382390SJung-uk Kim		/* +2 for EOB chars. */
17697e382390SJung-uk Kim		int number_to_move = YY_G(yy_n_chars) + 2;
17707e382390SJung-uk Kim		char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
17717e382390SJung-uk Kim					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
17727e382390SJung-uk Kim		char *source =
17737e382390SJung-uk Kim				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
17747e382390SJung-uk Kim
17757e382390SJung-uk Kim		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
17767e382390SJung-uk Kim			*--dest = *--source;
17777e382390SJung-uk Kim
17787e382390SJung-uk Kim		yy_cp += (int) (dest - source);
17797e382390SJung-uk Kim		yy_bp += (int) (dest - source);
17807e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
17817e382390SJung-uk Kim			YY_G(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
17827e382390SJung-uk Kim
17837e382390SJung-uk Kim		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
17847e382390SJung-uk Kim			YY_FATAL_ERROR( "flex scanner push-back overflow" );
17857e382390SJung-uk Kim		}
17867e382390SJung-uk Kim
17877e382390SJung-uk Kim	*--yy_cp = (char) c;
17887e382390SJung-uk Kim
17897e382390SJung-uk Kim%% [18.0] update yylineno here
17907e382390SJung-uk Kimm4_ifdef( [[M4_YY_USE_LINENO]],
17917e382390SJung-uk Kim[[
17927e382390SJung-uk Kim    if ( c == '\n' ){
17937e382390SJung-uk Kim        --yylineno;
17947e382390SJung-uk Kim    }
17957e382390SJung-uk Kim]])
17967e382390SJung-uk Kim
17977e382390SJung-uk Kim	YY_G(yytext_ptr) = yy_bp;
17987e382390SJung-uk Kim	YY_G(yy_hold_char) = *yy_cp;
17997e382390SJung-uk Kim	YY_G(yy_c_buf_p) = yy_cp;
18007e382390SJung-uk Kim}
18017e382390SJung-uk Kim%if-c-only
18027e382390SJung-uk Kim]])
18037e382390SJung-uk Kim%endif
18047e382390SJung-uk Kim#endif
18057e382390SJung-uk Kim
18067e382390SJung-uk Kim%if-c-only
18077e382390SJung-uk Kim#ifndef YY_NO_INPUT
18087e382390SJung-uk Kim#ifdef __cplusplus
18097e382390SJung-uk Kim    static int yyinput (M4_YY_DEF_ONLY_ARG)
18107e382390SJung-uk Kim#else
18117e382390SJung-uk Kim    static int input  (M4_YY_DEF_ONLY_ARG)
18127e382390SJung-uk Kim#endif
18137e382390SJung-uk Kim
18147e382390SJung-uk Kim%endif
18157e382390SJung-uk Kim%if-c++-only
18167e382390SJung-uk Kim    int yyFlexLexer::yyinput()
18177e382390SJung-uk Kim%endif
18187e382390SJung-uk Kim{
18197e382390SJung-uk Kim	int c;
18207e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
18217e382390SJung-uk Kim
18227e382390SJung-uk Kim	*YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
18237e382390SJung-uk Kim
18247e382390SJung-uk Kim	if ( *YY_G(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
18257e382390SJung-uk Kim		{
18267e382390SJung-uk Kim		/* yy_c_buf_p now points to the character we want to return.
18277e382390SJung-uk Kim		 * If this occurs *before* the EOB characters, then it's a
18287e382390SJung-uk Kim		 * valid NUL; if not, then we've hit the end of the buffer.
18297e382390SJung-uk Kim		 */
18307e382390SJung-uk Kim		if ( YY_G(yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )
18317e382390SJung-uk Kim			/* This was really a NUL. */
18327e382390SJung-uk Kim			*YY_G(yy_c_buf_p) = '\0';
18337e382390SJung-uk Kim
18347e382390SJung-uk Kim		else
18357e382390SJung-uk Kim			{ /* need more input */
18367e382390SJung-uk Kim			int offset = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr));
18377e382390SJung-uk Kim			++YY_G(yy_c_buf_p);
18387e382390SJung-uk Kim
18397e382390SJung-uk Kim			switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )
18407e382390SJung-uk Kim				{
18417e382390SJung-uk Kim				case EOB_ACT_LAST_MATCH:
18427e382390SJung-uk Kim					/* This happens because yy_g_n_b()
18437e382390SJung-uk Kim					 * sees that we've accumulated a
18447e382390SJung-uk Kim					 * token and flags that we need to
18457e382390SJung-uk Kim					 * try matching the token before
18467e382390SJung-uk Kim					 * proceeding.  But for input(),
18477e382390SJung-uk Kim					 * there's no matching to consider.
18487e382390SJung-uk Kim					 * So convert the EOB_ACT_LAST_MATCH
18497e382390SJung-uk Kim					 * to EOB_ACT_END_OF_FILE.
18507e382390SJung-uk Kim					 */
18517e382390SJung-uk Kim
18527e382390SJung-uk Kim					/* Reset buffer status. */
18537e382390SJung-uk Kim					yyrestart( yyin M4_YY_CALL_LAST_ARG);
18547e382390SJung-uk Kim
18557e382390SJung-uk Kim					/*FALLTHROUGH*/
18567e382390SJung-uk Kim
18577e382390SJung-uk Kim				case EOB_ACT_END_OF_FILE:
18587e382390SJung-uk Kim					{
18597e382390SJung-uk Kim					if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
18606b7e592cSJung-uk Kim#ifdef YY_FLEX_LEX_COMPAT
18617e382390SJung-uk Kim						return 0;
18626b7e592cSJung-uk Kim#else
18636b7e592cSJung-uk Kim						return EOF;
18646b7e592cSJung-uk Kim#endif
18657e382390SJung-uk Kim
18667e382390SJung-uk Kim					if ( ! YY_G(yy_did_buffer_switch_on_eof) )
18677e382390SJung-uk Kim						YY_NEW_FILE;
18687e382390SJung-uk Kim#ifdef __cplusplus
18697e382390SJung-uk Kim					return yyinput(M4_YY_CALL_ONLY_ARG);
18707e382390SJung-uk Kim#else
18717e382390SJung-uk Kim					return input(M4_YY_CALL_ONLY_ARG);
18727e382390SJung-uk Kim#endif
18737e382390SJung-uk Kim					}
18747e382390SJung-uk Kim
18757e382390SJung-uk Kim				case EOB_ACT_CONTINUE_SCAN:
18767e382390SJung-uk Kim					YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + offset;
18777e382390SJung-uk Kim					break;
18787e382390SJung-uk Kim				}
18797e382390SJung-uk Kim			}
18807e382390SJung-uk Kim		}
18817e382390SJung-uk Kim
18827e382390SJung-uk Kim	c = *(unsigned char *) YY_G(yy_c_buf_p);	/* cast for 8-bit char's */
18837e382390SJung-uk Kim	*YY_G(yy_c_buf_p) = '\0';	/* preserve yytext */
18847e382390SJung-uk Kim	YY_G(yy_hold_char) = *++YY_G(yy_c_buf_p);
18857e382390SJung-uk Kim
18867e382390SJung-uk Kim%% [19.0] update BOL and yylineno
18877e382390SJung-uk Kim
18887e382390SJung-uk Kim	return c;
18897e382390SJung-uk Kim}
18907e382390SJung-uk Kim%if-c-only
18917e382390SJung-uk Kim#endif	/* ifndef YY_NO_INPUT */
18927e382390SJung-uk Kim%endif
18937e382390SJung-uk Kim
18947e382390SJung-uk Kim/** Immediately switch to a different input stream.
18957e382390SJung-uk Kim * @param input_file A readable stream.
18967e382390SJung-uk Kim * M4_YY_DOC_PARAM
18977e382390SJung-uk Kim * @note This function does not reset the start condition to @c INITIAL .
18987e382390SJung-uk Kim */
18997e382390SJung-uk Kim%if-c-only
19007e382390SJung-uk Kim    void yyrestart  YYFARGS1( FILE *,input_file)
19017e382390SJung-uk Kim%endif
19027e382390SJung-uk Kim%if-c++-only
19037e382390SJung-uk Kim    void yyFlexLexer::yyrestart( std::istream& input_file )
19047e382390SJung-uk Kim%endif
19057e382390SJung-uk Kim{
19067e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
19077e382390SJung-uk Kim
19087e382390SJung-uk Kim	if ( ! YY_CURRENT_BUFFER ){
19097e382390SJung-uk Kim        yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
19107e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE =
19117e382390SJung-uk Kim            yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);
19127e382390SJung-uk Kim	}
19137e382390SJung-uk Kim
19147e382390SJung-uk Kim	yy_init_buffer( YY_CURRENT_BUFFER, input_file M4_YY_CALL_LAST_ARG);
19157e382390SJung-uk Kim	yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
19167e382390SJung-uk Kim}
19177e382390SJung-uk Kim
19187e382390SJung-uk Kim%if-c++-only
19197e382390SJung-uk Kim/** Delegate to the new version that takes an istream reference.
19207e382390SJung-uk Kim * @param input_file A readable stream.
19217e382390SJung-uk Kim * M4_YY_DOC_PARAM
19227e382390SJung-uk Kim * @note This function does not reset the start condition to @c INITIAL .
19237e382390SJung-uk Kim */
19247e382390SJung-uk Kimvoid yyFlexLexer::yyrestart( std::istream* input_file )
19257e382390SJung-uk Kim{
19267e382390SJung-uk Kim	if( ! input_file ) {
19277e382390SJung-uk Kim		input_file = &yyin;
19287e382390SJung-uk Kim	}
19297e382390SJung-uk Kim	yyrestart( *input_file );
19307e382390SJung-uk Kim}
19317e382390SJung-uk Kim%endif
19327e382390SJung-uk Kim
19337e382390SJung-uk Kim/** Switch to a different input buffer.
19347e382390SJung-uk Kim * @param new_buffer The new input buffer.
19357e382390SJung-uk Kim * M4_YY_DOC_PARAM
19367e382390SJung-uk Kim */
19377e382390SJung-uk Kim%if-c-only
19387e382390SJung-uk Kim    void yy_switch_to_buffer  YYFARGS1( YY_BUFFER_STATE ,new_buffer)
19397e382390SJung-uk Kim%endif
19407e382390SJung-uk Kim%if-c++-only
19417e382390SJung-uk Kim    void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
19427e382390SJung-uk Kim%endif
19437e382390SJung-uk Kim{
19447e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
19457e382390SJung-uk Kim
19467e382390SJung-uk Kim	/* TODO. We should be able to replace this entire function body
19477e382390SJung-uk Kim	 * with
19487e382390SJung-uk Kim	 *		yypop_buffer_state();
19497e382390SJung-uk Kim	 *		yypush_buffer_state(new_buffer);
19507e382390SJung-uk Kim     */
19517e382390SJung-uk Kim	yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
19527e382390SJung-uk Kim	if ( YY_CURRENT_BUFFER == new_buffer )
19537e382390SJung-uk Kim		return;
19547e382390SJung-uk Kim
19557e382390SJung-uk Kim	if ( YY_CURRENT_BUFFER )
19567e382390SJung-uk Kim		{
19577e382390SJung-uk Kim		/* Flush out information for old buffer. */
19587e382390SJung-uk Kim		*YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
19597e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);
19607e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
19617e382390SJung-uk Kim		}
19627e382390SJung-uk Kim
19637e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE = new_buffer;
19647e382390SJung-uk Kim	yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
19657e382390SJung-uk Kim
19667e382390SJung-uk Kim	/* We don't actually know whether we did this switch during
19677e382390SJung-uk Kim	 * EOF (yywrap()) processing, but the only time this flag
19687e382390SJung-uk Kim	 * is looked at is after yywrap() is called, so it's safe
19697e382390SJung-uk Kim	 * to go ahead and always set it.
19707e382390SJung-uk Kim	 */
19717e382390SJung-uk Kim	YY_G(yy_did_buffer_switch_on_eof) = 1;
19727e382390SJung-uk Kim}
19737e382390SJung-uk Kim
19747e382390SJung-uk Kim
19757e382390SJung-uk Kim%if-c-only
19767e382390SJung-uk Kimstatic void yy_load_buffer_state  (M4_YY_DEF_ONLY_ARG)
19777e382390SJung-uk Kim%endif
19787e382390SJung-uk Kim%if-c++-only
19797e382390SJung-uk Kim    void yyFlexLexer::yy_load_buffer_state()
19807e382390SJung-uk Kim%endif
19817e382390SJung-uk Kim{
19827e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
19837e382390SJung-uk Kim	YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
19847e382390SJung-uk Kim	YY_G(yytext_ptr) = YY_G(yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
19857e382390SJung-uk Kim%if-c-only
19867e382390SJung-uk Kim	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
19877e382390SJung-uk Kim%endif
19887e382390SJung-uk Kim%if-c++-only
19897e382390SJung-uk Kim	yyin.rdbuf(YY_CURRENT_BUFFER_LVALUE->yy_input_file);
19907e382390SJung-uk Kim%endif
19917e382390SJung-uk Kim	YY_G(yy_hold_char) = *YY_G(yy_c_buf_p);
19927e382390SJung-uk Kim}
19937e382390SJung-uk Kim
19947e382390SJung-uk Kim/** Allocate and initialize an input buffer state.
19957e382390SJung-uk Kim * @param file A readable stream.
19967e382390SJung-uk Kim * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
19977e382390SJung-uk Kim * M4_YY_DOC_PARAM
19987e382390SJung-uk Kim * @return the allocated buffer state.
19997e382390SJung-uk Kim */
20007e382390SJung-uk Kim%if-c-only
20017e382390SJung-uk Kim    YY_BUFFER_STATE yy_create_buffer  YYFARGS2( FILE *,file, int ,size)
20027e382390SJung-uk Kim%endif
20037e382390SJung-uk Kim%if-c++-only
20047e382390SJung-uk Kim    YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream& file, int size )
20057e382390SJung-uk Kim%endif
20067e382390SJung-uk Kim{
20077e382390SJung-uk Kim	YY_BUFFER_STATE b;
20087e382390SJung-uk Kim    m4_dnl M4_YY_DECL_GUTS_VAR();
20097e382390SJung-uk Kim
20107e382390SJung-uk Kim	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );
20117e382390SJung-uk Kim	if ( ! b )
20127e382390SJung-uk Kim		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
20137e382390SJung-uk Kim
20147e382390SJung-uk Kim	b->yy_buf_size = size;
20157e382390SJung-uk Kim
20167e382390SJung-uk Kim	/* yy_ch_buf has to be 2 characters longer than the size given because
20177e382390SJung-uk Kim	 * we need to put in 2 end-of-buffer characters.
20187e382390SJung-uk Kim	 */
20197e382390SJung-uk Kim	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) M4_YY_CALL_LAST_ARG );
20207e382390SJung-uk Kim	if ( ! b->yy_ch_buf )
20217e382390SJung-uk Kim		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
20227e382390SJung-uk Kim
20237e382390SJung-uk Kim	b->yy_is_our_buffer = 1;
20247e382390SJung-uk Kim
20257e382390SJung-uk Kim	yy_init_buffer( b, file M4_YY_CALL_LAST_ARG);
20267e382390SJung-uk Kim
20277e382390SJung-uk Kim	return b;
20287e382390SJung-uk Kim}
20297e382390SJung-uk Kim
20307e382390SJung-uk Kim%if-c++-only
20317e382390SJung-uk Kim/** Delegate creation of buffers to the new version that takes an istream reference.
20327e382390SJung-uk Kim * @param file A readable stream.
20337e382390SJung-uk Kim * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
20347e382390SJung-uk Kim * M4_YY_DOC_PARAM
20357e382390SJung-uk Kim * @return the allocated buffer state.
20367e382390SJung-uk Kim */
20377e382390SJung-uk Kim	YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
20387e382390SJung-uk Kim{
20397e382390SJung-uk Kim	return yy_create_buffer( *file, size );
20407e382390SJung-uk Kim}
20417e382390SJung-uk Kim%endif
20427e382390SJung-uk Kim
20437e382390SJung-uk Kim/** Destroy the buffer.
20447e382390SJung-uk Kim * @param b a buffer created with yy_create_buffer()
20457e382390SJung-uk Kim * M4_YY_DOC_PARAM
20467e382390SJung-uk Kim */
20477e382390SJung-uk Kim%if-c-only
20487e382390SJung-uk Kim    void yy_delete_buffer YYFARGS1( YY_BUFFER_STATE ,b)
20497e382390SJung-uk Kim%endif
20507e382390SJung-uk Kim%if-c++-only
20517e382390SJung-uk Kim    void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
20527e382390SJung-uk Kim%endif
20537e382390SJung-uk Kim{
20547e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
20557e382390SJung-uk Kim
20567e382390SJung-uk Kim	if ( ! b )
20577e382390SJung-uk Kim		return;
20587e382390SJung-uk Kim
20597e382390SJung-uk Kim	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
20607e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
20617e382390SJung-uk Kim
20627e382390SJung-uk Kim	if ( b->yy_is_our_buffer )
20637e382390SJung-uk Kim		yyfree( (void *) b->yy_ch_buf M4_YY_CALL_LAST_ARG );
20647e382390SJung-uk Kim
20657e382390SJung-uk Kim	yyfree( (void *) b M4_YY_CALL_LAST_ARG );
20667e382390SJung-uk Kim}
20677e382390SJung-uk Kim
20687e382390SJung-uk Kim
20697e382390SJung-uk Kim/* Initializes or reinitializes a buffer.
20707e382390SJung-uk Kim * This function is sometimes called more than once on the same buffer,
20717e382390SJung-uk Kim * such as during a yyrestart() or at EOF.
20727e382390SJung-uk Kim */
20737e382390SJung-uk Kim%if-c-only
20747e382390SJung-uk Kim    static void yy_init_buffer  YYFARGS2( YY_BUFFER_STATE ,b, FILE *,file)
20757e382390SJung-uk Kim%endif
20767e382390SJung-uk Kim%if-c++-only
20777e382390SJung-uk Kim    void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream& file )
20787e382390SJung-uk Kim%endif
20797e382390SJung-uk Kim
20807e382390SJung-uk Kim{
20817e382390SJung-uk Kim	int oerrno = errno;
20827e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
20837e382390SJung-uk Kim
20847e382390SJung-uk Kim	yy_flush_buffer( b M4_YY_CALL_LAST_ARG);
20857e382390SJung-uk Kim
20867e382390SJung-uk Kim%if-c-only
20877e382390SJung-uk Kim	b->yy_input_file = file;
20887e382390SJung-uk Kim%endif
20897e382390SJung-uk Kim%if-c++-only
20907e382390SJung-uk Kim	b->yy_input_file = file.rdbuf();
20917e382390SJung-uk Kim%endif
20927e382390SJung-uk Kim	b->yy_fill_buffer = 1;
20937e382390SJung-uk Kim
20947e382390SJung-uk Kim    /* If b is the current buffer, then yy_init_buffer was _probably_
20957e382390SJung-uk Kim     * called from yyrestart() or through yy_get_next_buffer.
20967e382390SJung-uk Kim     * In that case, we don't want to reset the lineno or column.
20977e382390SJung-uk Kim     */
20987e382390SJung-uk Kim    if (b != YY_CURRENT_BUFFER){
20997e382390SJung-uk Kim        b->yy_bs_lineno = 1;
21007e382390SJung-uk Kim        b->yy_bs_column = 0;
21017e382390SJung-uk Kim    }
21027e382390SJung-uk Kim
21037e382390SJung-uk Kim%if-c-only
21047e382390SJung-uk Kimm4_ifdef( [[M4_YY_ALWAYS_INTERACTIVE]],
21057e382390SJung-uk Kim[[
21067e382390SJung-uk Kim	b->yy_is_interactive = 1;
21077e382390SJung-uk Kim]],
21087e382390SJung-uk Kim[[
21097e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NEVER_INTERACTIVE]],
21107e382390SJung-uk Kim    [[
21117e382390SJung-uk Kim        b->yy_is_interactive = 0;
21127e382390SJung-uk Kim    ]],
21137e382390SJung-uk Kim    [[
21147e382390SJung-uk Kim        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
21157e382390SJung-uk Kim    ]])
21167e382390SJung-uk Kim]])
21177e382390SJung-uk Kim%endif
21187e382390SJung-uk Kim%if-c++-only
21197e382390SJung-uk Kim	b->yy_is_interactive = 0;
21207e382390SJung-uk Kim%endif
21217e382390SJung-uk Kim	errno = oerrno;
21227e382390SJung-uk Kim}
21237e382390SJung-uk Kim
21247e382390SJung-uk Kim/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
21257e382390SJung-uk Kim * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
21267e382390SJung-uk Kim * M4_YY_DOC_PARAM
21277e382390SJung-uk Kim */
21287e382390SJung-uk Kim%if-c-only
21297e382390SJung-uk Kim    void yy_flush_buffer YYFARGS1( YY_BUFFER_STATE ,b)
21307e382390SJung-uk Kim%endif
21317e382390SJung-uk Kim%if-c++-only
21327e382390SJung-uk Kim    void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
21337e382390SJung-uk Kim%endif
21347e382390SJung-uk Kim{
21357e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
21367e382390SJung-uk Kim	if ( ! b )
21377e382390SJung-uk Kim		return;
21387e382390SJung-uk Kim
21397e382390SJung-uk Kim	b->yy_n_chars = 0;
21407e382390SJung-uk Kim
21417e382390SJung-uk Kim	/* We always need two end-of-buffer characters.  The first causes
21427e382390SJung-uk Kim	 * a transition to the end-of-buffer state.  The second causes
21437e382390SJung-uk Kim	 * a jam in that state.
21447e382390SJung-uk Kim	 */
21457e382390SJung-uk Kim	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
21467e382390SJung-uk Kim	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
21477e382390SJung-uk Kim
21487e382390SJung-uk Kim	b->yy_buf_pos = &b->yy_ch_buf[0];
21497e382390SJung-uk Kim
21507e382390SJung-uk Kim	b->yy_at_bol = 1;
21517e382390SJung-uk Kim	b->yy_buffer_status = YY_BUFFER_NEW;
21527e382390SJung-uk Kim
21537e382390SJung-uk Kim	if ( b == YY_CURRENT_BUFFER )
21547e382390SJung-uk Kim		yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
21557e382390SJung-uk Kim}
21567e382390SJung-uk Kim
21577e382390SJung-uk Kim%if-c-or-c++
21587e382390SJung-uk Kim/** Pushes the new state onto the stack. The new state becomes
21597e382390SJung-uk Kim *  the current state. This function will allocate the stack
21607e382390SJung-uk Kim *  if necessary.
21617e382390SJung-uk Kim *  @param new_buffer The new state.
21627e382390SJung-uk Kim *  M4_YY_DOC_PARAM
21637e382390SJung-uk Kim */
21647e382390SJung-uk Kim%if-c-only
21657e382390SJung-uk Kimvoid yypush_buffer_state YYFARGS1(YY_BUFFER_STATE,new_buffer)
21667e382390SJung-uk Kim%endif
21677e382390SJung-uk Kim%if-c++-only
21687e382390SJung-uk Kimvoid yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
21697e382390SJung-uk Kim%endif
21707e382390SJung-uk Kim{
21717e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
21727e382390SJung-uk Kim	if (new_buffer == NULL)
21737e382390SJung-uk Kim		return;
21747e382390SJung-uk Kim
21757e382390SJung-uk Kim	yyensure_buffer_stack(M4_YY_CALL_ONLY_ARG);
21767e382390SJung-uk Kim
21777e382390SJung-uk Kim	/* This block is copied from yy_switch_to_buffer. */
21787e382390SJung-uk Kim	if ( YY_CURRENT_BUFFER )
21797e382390SJung-uk Kim		{
21807e382390SJung-uk Kim		/* Flush out information for old buffer. */
21817e382390SJung-uk Kim		*YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
21827e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);
21837e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
21847e382390SJung-uk Kim		}
21857e382390SJung-uk Kim
21867e382390SJung-uk Kim	/* Only push if top exists. Otherwise, replace top. */
21877e382390SJung-uk Kim	if (YY_CURRENT_BUFFER)
21887e382390SJung-uk Kim		YY_G(yy_buffer_stack_top)++;
21897e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE = new_buffer;
21907e382390SJung-uk Kim
21917e382390SJung-uk Kim	/* copied from yy_switch_to_buffer. */
21927e382390SJung-uk Kim	yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
21937e382390SJung-uk Kim	YY_G(yy_did_buffer_switch_on_eof) = 1;
21947e382390SJung-uk Kim}
21957e382390SJung-uk Kim%endif
21967e382390SJung-uk Kim
21977e382390SJung-uk Kim
21987e382390SJung-uk Kim%if-c-or-c++
21997e382390SJung-uk Kim/** Removes and deletes the top of the stack, if present.
22007e382390SJung-uk Kim *  The next element becomes the new top.
22017e382390SJung-uk Kim *  M4_YY_DOC_PARAM
22027e382390SJung-uk Kim */
22037e382390SJung-uk Kim%if-c-only
22047e382390SJung-uk Kimvoid yypop_buffer_state (M4_YY_DEF_ONLY_ARG)
22057e382390SJung-uk Kim%endif
22067e382390SJung-uk Kim%if-c++-only
22077e382390SJung-uk Kimvoid yyFlexLexer::yypop_buffer_state (void)
22087e382390SJung-uk Kim%endif
22097e382390SJung-uk Kim{
22107e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
22117e382390SJung-uk Kim	if (!YY_CURRENT_BUFFER)
22127e382390SJung-uk Kim		return;
22137e382390SJung-uk Kim
22147e382390SJung-uk Kim	yy_delete_buffer(YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
22157e382390SJung-uk Kim	YY_CURRENT_BUFFER_LVALUE = NULL;
22167e382390SJung-uk Kim	if (YY_G(yy_buffer_stack_top) > 0)
22177e382390SJung-uk Kim		--YY_G(yy_buffer_stack_top);
22187e382390SJung-uk Kim
22197e382390SJung-uk Kim	if (YY_CURRENT_BUFFER) {
22207e382390SJung-uk Kim		yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
22217e382390SJung-uk Kim		YY_G(yy_did_buffer_switch_on_eof) = 1;
22227e382390SJung-uk Kim	}
22237e382390SJung-uk Kim}
22247e382390SJung-uk Kim%endif
22257e382390SJung-uk Kim
22267e382390SJung-uk Kim
22277e382390SJung-uk Kim%if-c-or-c++
22287e382390SJung-uk Kim/* Allocates the stack if it does not exist.
22297e382390SJung-uk Kim *  Guarantees space for at least one push.
22307e382390SJung-uk Kim */
22317e382390SJung-uk Kim%if-c-only
22327e382390SJung-uk Kimstatic void yyensure_buffer_stack (M4_YY_DEF_ONLY_ARG)
22337e382390SJung-uk Kim%endif
22347e382390SJung-uk Kim%if-c++-only
22357e382390SJung-uk Kimvoid yyFlexLexer::yyensure_buffer_stack(void)
22367e382390SJung-uk Kim%endif
22377e382390SJung-uk Kim{
22387e382390SJung-uk Kim	yy_size_t num_to_alloc;
22397e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
22407e382390SJung-uk Kim
22417e382390SJung-uk Kim	if (!YY_G(yy_buffer_stack)) {
22427e382390SJung-uk Kim
22437e382390SJung-uk Kim		/* First allocation is just for 2 elements, since we don't know if this
22447e382390SJung-uk Kim		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
22457e382390SJung-uk Kim		 * immediate realloc on the next call.
22467e382390SJung-uk Kim         */
22477e382390SJung-uk Kim      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
22487e382390SJung-uk Kim		YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
22497e382390SJung-uk Kim								(num_to_alloc * sizeof(struct yy_buffer_state*)
22507e382390SJung-uk Kim								M4_YY_CALL_LAST_ARG);
22517e382390SJung-uk Kim		if ( ! YY_G(yy_buffer_stack) )
22527e382390SJung-uk Kim			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
22537e382390SJung-uk Kim
22547e382390SJung-uk Kim
22557e382390SJung-uk Kim		memset(YY_G(yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
22567e382390SJung-uk Kim
22577e382390SJung-uk Kim		YY_G(yy_buffer_stack_max) = num_to_alloc;
22587e382390SJung-uk Kim		YY_G(yy_buffer_stack_top) = 0;
22597e382390SJung-uk Kim		return;
22607e382390SJung-uk Kim	}
22617e382390SJung-uk Kim
22627e382390SJung-uk Kim	if (YY_G(yy_buffer_stack_top) >= (YY_G(yy_buffer_stack_max)) - 1){
22637e382390SJung-uk Kim
22647e382390SJung-uk Kim		/* Increase the buffer to prepare for a possible push. */
22657e382390SJung-uk Kim		yy_size_t grow_size = 8 /* arbitrary grow size */;
22667e382390SJung-uk Kim
22677e382390SJung-uk Kim		num_to_alloc = YY_G(yy_buffer_stack_max) + grow_size;
22687e382390SJung-uk Kim		YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
22697e382390SJung-uk Kim								(YY_G(yy_buffer_stack),
22707e382390SJung-uk Kim								num_to_alloc * sizeof(struct yy_buffer_state*)
22717e382390SJung-uk Kim								M4_YY_CALL_LAST_ARG);
22727e382390SJung-uk Kim		if ( ! YY_G(yy_buffer_stack) )
22737e382390SJung-uk Kim			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
22747e382390SJung-uk Kim
22757e382390SJung-uk Kim		/* zero only the new slots.*/
22767e382390SJung-uk Kim		memset(YY_G(yy_buffer_stack) + YY_G(yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
22777e382390SJung-uk Kim		YY_G(yy_buffer_stack_max) = num_to_alloc;
22787e382390SJung-uk Kim	}
22797e382390SJung-uk Kim}
22807e382390SJung-uk Kim%endif
22817e382390SJung-uk Kim
22827e382390SJung-uk Kim
22837e382390SJung-uk Kim
22847e382390SJung-uk Kim
22857e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SCAN_BUFFER]],,
22867e382390SJung-uk Kim[[
22877e382390SJung-uk Kim%if-c-only
22887e382390SJung-uk Kim/** Setup the input buffer state to scan directly from a user-specified character buffer.
22897e382390SJung-uk Kim * @param base the character buffer
22907e382390SJung-uk Kim * @param size the size in bytes of the character buffer
22917e382390SJung-uk Kim * M4_YY_DOC_PARAM
22927e382390SJung-uk Kim * @return the newly allocated buffer state object.
22937e382390SJung-uk Kim */
22947e382390SJung-uk KimYY_BUFFER_STATE yy_scan_buffer  YYFARGS2( char *,base, yy_size_t ,size)
22957e382390SJung-uk Kim{
22967e382390SJung-uk Kim	YY_BUFFER_STATE b;
22977e382390SJung-uk Kim    m4_dnl M4_YY_DECL_GUTS_VAR();
22987e382390SJung-uk Kim
22997e382390SJung-uk Kim	if ( size < 2 ||
23007e382390SJung-uk Kim	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
23017e382390SJung-uk Kim	     base[size-1] != YY_END_OF_BUFFER_CHAR )
23027e382390SJung-uk Kim		/* They forgot to leave room for the EOB's. */
23037e382390SJung-uk Kim		return NULL;
23047e382390SJung-uk Kim
23057e382390SJung-uk Kim	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );
23067e382390SJung-uk Kim	if ( ! b )
23077e382390SJung-uk Kim		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
23087e382390SJung-uk Kim
23097e382390SJung-uk Kim	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
23107e382390SJung-uk Kim	b->yy_buf_pos = b->yy_ch_buf = base;
23117e382390SJung-uk Kim	b->yy_is_our_buffer = 0;
23127e382390SJung-uk Kim	b->yy_input_file = NULL;
23137e382390SJung-uk Kim	b->yy_n_chars = b->yy_buf_size;
23147e382390SJung-uk Kim	b->yy_is_interactive = 0;
23157e382390SJung-uk Kim	b->yy_at_bol = 1;
23167e382390SJung-uk Kim	b->yy_fill_buffer = 0;
23177e382390SJung-uk Kim	b->yy_buffer_status = YY_BUFFER_NEW;
23187e382390SJung-uk Kim
23197e382390SJung-uk Kim	yy_switch_to_buffer( b M4_YY_CALL_LAST_ARG );
23207e382390SJung-uk Kim
23217e382390SJung-uk Kim	return b;
23227e382390SJung-uk Kim}
23237e382390SJung-uk Kim%endif
23247e382390SJung-uk Kim]])
23257e382390SJung-uk Kim
23267e382390SJung-uk Kim
23277e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SCAN_STRING]],,
23287e382390SJung-uk Kim[[
23297e382390SJung-uk Kim%if-c-only
23307e382390SJung-uk Kim/** Setup the input buffer state to scan a string. The next call to yylex() will
23317e382390SJung-uk Kim * scan from a @e copy of @a str.
23327e382390SJung-uk Kim * @param yystr a NUL-terminated string to scan
23337e382390SJung-uk Kim * M4_YY_DOC_PARAM
23347e382390SJung-uk Kim * @return the newly allocated buffer state object.
23357e382390SJung-uk Kim * @note If you want to scan bytes that may contain NUL values, then use
23367e382390SJung-uk Kim *       yy_scan_bytes() instead.
23377e382390SJung-uk Kim */
23387e382390SJung-uk KimYY_BUFFER_STATE yy_scan_string YYFARGS1( const char *, yystr)
23397e382390SJung-uk Kim{
23407e382390SJung-uk Kim    m4_dnl M4_YY_DECL_GUTS_VAR();
23417e382390SJung-uk Kim
23427e382390SJung-uk Kim	return yy_scan_bytes( yystr, (int) strlen(yystr) M4_YY_CALL_LAST_ARG);
23437e382390SJung-uk Kim}
23447e382390SJung-uk Kim%endif
23457e382390SJung-uk Kim]])
23467e382390SJung-uk Kim
23477e382390SJung-uk Kim
23487e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SCAN_BYTES]],,
23497e382390SJung-uk Kim[[
23507e382390SJung-uk Kim%if-c-only
23517e382390SJung-uk Kim/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
23527e382390SJung-uk Kim * scan from a @e copy of @a bytes.
23537e382390SJung-uk Kim * @param yybytes the byte buffer to scan
23547e382390SJung-uk Kim * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
23557e382390SJung-uk Kim * M4_YY_DOC_PARAM
23567e382390SJung-uk Kim * @return the newly allocated buffer state object.
23577e382390SJung-uk Kim */
23587e382390SJung-uk KimYY_BUFFER_STATE yy_scan_bytes  YYFARGS2( const char *,yybytes, int ,_yybytes_len)
23597e382390SJung-uk Kim{
23607e382390SJung-uk Kim	YY_BUFFER_STATE b;
23617e382390SJung-uk Kim	char *buf;
23627e382390SJung-uk Kim	yy_size_t n;
23637e382390SJung-uk Kim	int i;
23647e382390SJung-uk Kim    m4_dnl M4_YY_DECL_GUTS_VAR();
23657e382390SJung-uk Kim
23667e382390SJung-uk Kim	/* Get memory for full buffer, including space for trailing EOB's. */
23677e382390SJung-uk Kim	n = (yy_size_t) (_yybytes_len + 2);
23687e382390SJung-uk Kim	buf = (char *) yyalloc( n M4_YY_CALL_LAST_ARG );
23697e382390SJung-uk Kim	if ( ! buf )
23707e382390SJung-uk Kim		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
23717e382390SJung-uk Kim
23727e382390SJung-uk Kim	for ( i = 0; i < _yybytes_len; ++i )
23737e382390SJung-uk Kim		buf[i] = yybytes[i];
23747e382390SJung-uk Kim
23757e382390SJung-uk Kim	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
23767e382390SJung-uk Kim
23777e382390SJung-uk Kim	b = yy_scan_buffer( buf, n M4_YY_CALL_LAST_ARG);
23787e382390SJung-uk Kim	if ( ! b )
23797e382390SJung-uk Kim		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
23807e382390SJung-uk Kim
23817e382390SJung-uk Kim	/* It's okay to grow etc. this buffer, and we should throw it
23827e382390SJung-uk Kim	 * away when we're done.
23837e382390SJung-uk Kim	 */
23847e382390SJung-uk Kim	b->yy_is_our_buffer = 1;
23857e382390SJung-uk Kim
23867e382390SJung-uk Kim	return b;
23877e382390SJung-uk Kim}
23887e382390SJung-uk Kim%endif
23897e382390SJung-uk Kim]])
23907e382390SJung-uk Kim
23917e382390SJung-uk Kim
23927e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_PUSH_STATE]],,
23937e382390SJung-uk Kim[[
23947e382390SJung-uk Kim%if-c-only
23957e382390SJung-uk Kim    static void yy_push_state YYFARGS1( int ,_new_state)
23967e382390SJung-uk Kim%endif
23977e382390SJung-uk Kim%if-c++-only
23987e382390SJung-uk Kim    void yyFlexLexer::yy_push_state( int _new_state )
23997e382390SJung-uk Kim%endif
24007e382390SJung-uk Kim{
24017e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
24027e382390SJung-uk Kim	if ( YY_G(yy_start_stack_ptr) >= YY_G(yy_start_stack_depth) )
24037e382390SJung-uk Kim		{
24047e382390SJung-uk Kim		yy_size_t new_size;
24057e382390SJung-uk Kim
24067e382390SJung-uk Kim		YY_G(yy_start_stack_depth) += YY_START_STACK_INCR;
24077e382390SJung-uk Kim		new_size = (yy_size_t) YY_G(yy_start_stack_depth) * sizeof( int );
24087e382390SJung-uk Kim
24097e382390SJung-uk Kim		if ( ! YY_G(yy_start_stack) )
24107e382390SJung-uk Kim			YY_G(yy_start_stack) = (int *) yyalloc( new_size M4_YY_CALL_LAST_ARG );
24117e382390SJung-uk Kim
24127e382390SJung-uk Kim		else
24137e382390SJung-uk Kim			YY_G(yy_start_stack) = (int *) yyrealloc(
24147e382390SJung-uk Kim					(void *) YY_G(yy_start_stack), new_size M4_YY_CALL_LAST_ARG );
24157e382390SJung-uk Kim
24167e382390SJung-uk Kim		if ( ! YY_G(yy_start_stack) )
24177e382390SJung-uk Kim			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
24187e382390SJung-uk Kim		}
24197e382390SJung-uk Kim
24207e382390SJung-uk Kim	YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)++] = YY_START;
24217e382390SJung-uk Kim
24227e382390SJung-uk Kim	BEGIN(_new_state);
24237e382390SJung-uk Kim}
24247e382390SJung-uk Kim]])
24257e382390SJung-uk Kim
24267e382390SJung-uk Kim
24277e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_POP_STATE]],,
24287e382390SJung-uk Kim[[
24297e382390SJung-uk Kim%if-c-only
24307e382390SJung-uk Kim    static void yy_pop_state  (M4_YY_DEF_ONLY_ARG)
24317e382390SJung-uk Kim%endif
24327e382390SJung-uk Kim%if-c++-only
24337e382390SJung-uk Kim    void yyFlexLexer::yy_pop_state()
24347e382390SJung-uk Kim%endif
24357e382390SJung-uk Kim{
24367e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
24377e382390SJung-uk Kim	if ( --YY_G(yy_start_stack_ptr) < 0 )
24387e382390SJung-uk Kim		YY_FATAL_ERROR( "start-condition stack underflow" );
24397e382390SJung-uk Kim
24407e382390SJung-uk Kim	BEGIN(YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)]);
24417e382390SJung-uk Kim}
24427e382390SJung-uk Kim]])
24437e382390SJung-uk Kim
24447e382390SJung-uk Kim
24457e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_TOP_STATE]],,
24467e382390SJung-uk Kim[[
24477e382390SJung-uk Kim%if-c-only
24487e382390SJung-uk Kim    static int yy_top_state  (M4_YY_DEF_ONLY_ARG)
24497e382390SJung-uk Kim%endif
24507e382390SJung-uk Kim%if-c++-only
24517e382390SJung-uk Kim    int yyFlexLexer::yy_top_state()
24527e382390SJung-uk Kim%endif
24537e382390SJung-uk Kim{
24547e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
24557e382390SJung-uk Kim	return YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1];
24567e382390SJung-uk Kim}
24577e382390SJung-uk Kim]])
24587e382390SJung-uk Kim
24597e382390SJung-uk Kim#ifndef YY_EXIT_FAILURE
24607e382390SJung-uk Kim#define YY_EXIT_FAILURE 2
24617e382390SJung-uk Kim#endif
24627e382390SJung-uk Kim
24637e382390SJung-uk Kim%if-c-only
24647e382390SJung-uk Kimstatic void yynoreturn yy_fatal_error YYFARGS1(const char*, msg)
24657e382390SJung-uk Kim{
24667e382390SJung-uk Kim	M4_YY_DECL_GUTS_VAR();
24677e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
24687e382390SJung-uk Kim	fprintf( stderr, "%s\n", msg );
24697e382390SJung-uk Kim	exit( YY_EXIT_FAILURE );
24707e382390SJung-uk Kim}
24717e382390SJung-uk Kim%endif
24727e382390SJung-uk Kim%if-c++-only
24737e382390SJung-uk Kimvoid yyFlexLexer::LexerError( const char* msg )
24747e382390SJung-uk Kim{
24757e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
24767e382390SJung-uk Kim	std::cerr << msg << std::endl;
24777e382390SJung-uk Kim	exit( YY_EXIT_FAILURE );
24787e382390SJung-uk Kim}
24797e382390SJung-uk Kim%endif
24807e382390SJung-uk Kim
24817e382390SJung-uk Kim/* Redefine yyless() so it works in section 3 code. */
24827e382390SJung-uk Kim
24837e382390SJung-uk Kim#undef yyless
24847e382390SJung-uk Kim#define yyless(n) \
24857e382390SJung-uk Kim	do \
24867e382390SJung-uk Kim		{ \
24877e382390SJung-uk Kim		/* Undo effects of setting up yytext. */ \
24887e382390SJung-uk Kim        int yyless_macro_arg = (n); \
24897e382390SJung-uk Kim        YY_LESS_LINENO(yyless_macro_arg);\
24907e382390SJung-uk Kim		yytext[yyleng] = YY_G(yy_hold_char); \
24917e382390SJung-uk Kim		YY_G(yy_c_buf_p) = yytext + yyless_macro_arg; \
24927e382390SJung-uk Kim		YY_G(yy_hold_char) = *YY_G(yy_c_buf_p); \
24937e382390SJung-uk Kim		*YY_G(yy_c_buf_p) = '\0'; \
24947e382390SJung-uk Kim		yyleng = yyless_macro_arg; \
24957e382390SJung-uk Kim		} \
24967e382390SJung-uk Kim	while ( 0 )
24977e382390SJung-uk Kim
24987e382390SJung-uk Kim
24997e382390SJung-uk Kim
25007e382390SJung-uk Kim/* Accessor  methods (get/set functions) to struct members. */
25017e382390SJung-uk Kim
25027e382390SJung-uk Kim%if-c-only
25037e382390SJung-uk Kim%if-reentrant
25047e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_EXTRA]],,
25057e382390SJung-uk Kim[[
25067e382390SJung-uk Kim/** Get the user-defined data for this scanner.
25077e382390SJung-uk Kim * M4_YY_DOC_PARAM
25087e382390SJung-uk Kim */
25097e382390SJung-uk KimYY_EXTRA_TYPE yyget_extra  (M4_YY_DEF_ONLY_ARG)
25107e382390SJung-uk Kim{
25117e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
25127e382390SJung-uk Kim    return yyextra;
25137e382390SJung-uk Kim}
25147e382390SJung-uk Kim]])
25157e382390SJung-uk Kim%endif
25167e382390SJung-uk Kim
25177e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_LINENO]],,
25187e382390SJung-uk Kim[[
25197e382390SJung-uk Kim/** Get the current line number.
25207e382390SJung-uk Kim * M4_YY_DOC_PARAM
25217e382390SJung-uk Kim */
25227e382390SJung-uk Kimint yyget_lineno  (M4_YY_DEF_ONLY_ARG)
25237e382390SJung-uk Kim{
25247e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
25257e382390SJung-uk Kim
25267e382390SJung-uk Kim    m4_ifdef( [[M4_YY_REENTRANT]],
25277e382390SJung-uk Kim    [[
25287e382390SJung-uk Kim        if (! YY_CURRENT_BUFFER)
25297e382390SJung-uk Kim            return 0;
25307e382390SJung-uk Kim    ]])
25317e382390SJung-uk Kim    return yylineno;
25327e382390SJung-uk Kim}
25337e382390SJung-uk Kim]])
25347e382390SJung-uk Kim
25357e382390SJung-uk Kimm4_ifdef( [[M4_YY_REENTRANT]],
25367e382390SJung-uk Kim[[
25377e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
25387e382390SJung-uk Kim[[
25397e382390SJung-uk Kim/** Get the current column number.
25407e382390SJung-uk Kim * M4_YY_DOC_PARAM
25417e382390SJung-uk Kim */
25427e382390SJung-uk Kimint yyget_column  (M4_YY_DEF_ONLY_ARG)
25437e382390SJung-uk Kim{
25447e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
25457e382390SJung-uk Kim
25467e382390SJung-uk Kim    m4_ifdef( [[M4_YY_REENTRANT]],
25477e382390SJung-uk Kim    [[
25487e382390SJung-uk Kim        if (! YY_CURRENT_BUFFER)
25497e382390SJung-uk Kim            return 0;
25507e382390SJung-uk Kim    ]])
25517e382390SJung-uk Kim    return yycolumn;
25527e382390SJung-uk Kim}
25537e382390SJung-uk Kim]])
25547e382390SJung-uk Kim]])
25557e382390SJung-uk Kim
25567e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_IN]],,
25577e382390SJung-uk Kim[[
25587e382390SJung-uk Kim/** Get the input stream.
25597e382390SJung-uk Kim * M4_YY_DOC_PARAM
25607e382390SJung-uk Kim */
25617e382390SJung-uk KimFILE *yyget_in  (M4_YY_DEF_ONLY_ARG)
25627e382390SJung-uk Kim{
25637e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
25647e382390SJung-uk Kim    return yyin;
25657e382390SJung-uk Kim}
25667e382390SJung-uk Kim]])
25677e382390SJung-uk Kim
25687e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_OUT]],,
25697e382390SJung-uk Kim[[
25707e382390SJung-uk Kim/** Get the output stream.
25717e382390SJung-uk Kim * M4_YY_DOC_PARAM
25727e382390SJung-uk Kim */
25737e382390SJung-uk KimFILE *yyget_out  (M4_YY_DEF_ONLY_ARG)
25747e382390SJung-uk Kim{
25757e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
25767e382390SJung-uk Kim    return yyout;
25777e382390SJung-uk Kim}
25787e382390SJung-uk Kim]])
25797e382390SJung-uk Kim
25807e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_LENG]],,
25817e382390SJung-uk Kim[[
25827e382390SJung-uk Kim/** Get the length of the current token.
25837e382390SJung-uk Kim * M4_YY_DOC_PARAM
25847e382390SJung-uk Kim */
25857e382390SJung-uk Kimint yyget_leng  (M4_YY_DEF_ONLY_ARG)
25867e382390SJung-uk Kim{
25877e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
25887e382390SJung-uk Kim    return yyleng;
25897e382390SJung-uk Kim}
25907e382390SJung-uk Kim]])
25917e382390SJung-uk Kim
25927e382390SJung-uk Kim/** Get the current token.
25937e382390SJung-uk Kim * M4_YY_DOC_PARAM
25947e382390SJung-uk Kim */
25957e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_TEXT]],,
25967e382390SJung-uk Kim[[
25977e382390SJung-uk Kimchar *yyget_text  (M4_YY_DEF_ONLY_ARG)
25987e382390SJung-uk Kim{
25997e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26007e382390SJung-uk Kim    return yytext;
26017e382390SJung-uk Kim}
26027e382390SJung-uk Kim]])
26037e382390SJung-uk Kim
26047e382390SJung-uk Kim%if-reentrant
26057e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_EXTRA]],,
26067e382390SJung-uk Kim[[
26077e382390SJung-uk Kim/** Set the user-defined data. This data is never touched by the scanner.
26087e382390SJung-uk Kim * @param user_defined The data to be associated with this scanner.
26097e382390SJung-uk Kim * M4_YY_DOC_PARAM
26107e382390SJung-uk Kim */
26117e382390SJung-uk Kimvoid yyset_extra YYFARGS1( YY_EXTRA_TYPE ,user_defined)
26127e382390SJung-uk Kim{
26137e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26147e382390SJung-uk Kim    yyextra = user_defined ;
26157e382390SJung-uk Kim}
26167e382390SJung-uk Kim]])
26177e382390SJung-uk Kim%endif
26187e382390SJung-uk Kim
26197e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_LINENO]],,
26207e382390SJung-uk Kim[[
26217e382390SJung-uk Kim/** Set the current line number.
26227e382390SJung-uk Kim * @param _line_number line number
26237e382390SJung-uk Kim * M4_YY_DOC_PARAM
26247e382390SJung-uk Kim */
26257e382390SJung-uk Kimvoid yyset_lineno YYFARGS1( int ,_line_number)
26267e382390SJung-uk Kim{
26277e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26287e382390SJung-uk Kim
26297e382390SJung-uk Kim    m4_ifdef( [[M4_YY_REENTRANT]],
26307e382390SJung-uk Kim    [[
26317e382390SJung-uk Kim        /* lineno is only valid if an input buffer exists. */
26327e382390SJung-uk Kim        if (! YY_CURRENT_BUFFER )
26337e382390SJung-uk Kim           YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
26347e382390SJung-uk Kim    ]])
26357e382390SJung-uk Kim    yylineno = _line_number;
26367e382390SJung-uk Kim}
26377e382390SJung-uk Kim]])
26387e382390SJung-uk Kim
26397e382390SJung-uk Kimm4_ifdef( [[M4_YY_REENTRANT]],
26407e382390SJung-uk Kim[[
26417e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
26427e382390SJung-uk Kim[[
26437e382390SJung-uk Kim/** Set the current column.
26447e382390SJung-uk Kim * @param _column_no column number
26457e382390SJung-uk Kim * M4_YY_DOC_PARAM
26467e382390SJung-uk Kim */
26477e382390SJung-uk Kimvoid yyset_column YYFARGS1( int , _column_no)
26487e382390SJung-uk Kim{
26497e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26507e382390SJung-uk Kim
26517e382390SJung-uk Kim    m4_ifdef( [[M4_YY_REENTRANT]],
26527e382390SJung-uk Kim    [[
26537e382390SJung-uk Kim        /* column is only valid if an input buffer exists. */
26547e382390SJung-uk Kim        if (! YY_CURRENT_BUFFER )
26557e382390SJung-uk Kim           YY_FATAL_ERROR( "yyset_column called with no buffer" );
26567e382390SJung-uk Kim    ]])
26577e382390SJung-uk Kim    yycolumn = _column_no;
26587e382390SJung-uk Kim}
26597e382390SJung-uk Kim]])
26607e382390SJung-uk Kim]])
26617e382390SJung-uk Kim
26627e382390SJung-uk Kim
26637e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_IN]],,
26647e382390SJung-uk Kim[[
26657e382390SJung-uk Kim/** Set the input stream. This does not discard the current
26667e382390SJung-uk Kim * input buffer.
26677e382390SJung-uk Kim * @param _in_str A readable stream.
26687e382390SJung-uk Kim * M4_YY_DOC_PARAM
26697e382390SJung-uk Kim * @see yy_switch_to_buffer
26707e382390SJung-uk Kim */
26717e382390SJung-uk Kimvoid yyset_in YYFARGS1( FILE * ,_in_str)
26727e382390SJung-uk Kim{
26737e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26747e382390SJung-uk Kim    yyin = _in_str ;
26757e382390SJung-uk Kim}
26767e382390SJung-uk Kim]])
26777e382390SJung-uk Kim
26787e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_OUT]],,
26797e382390SJung-uk Kim[[
26807e382390SJung-uk Kimvoid yyset_out YYFARGS1( FILE * ,_out_str)
26817e382390SJung-uk Kim{
26827e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26837e382390SJung-uk Kim    yyout = _out_str ;
26847e382390SJung-uk Kim}
26857e382390SJung-uk Kim]])
26867e382390SJung-uk Kim
26877e382390SJung-uk Kim
26887e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_DEBUG]],,
26897e382390SJung-uk Kim[[
26907e382390SJung-uk Kimint yyget_debug  (M4_YY_DEF_ONLY_ARG)
26917e382390SJung-uk Kim{
26927e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
26937e382390SJung-uk Kim    return yy_flex_debug;
26947e382390SJung-uk Kim}
26957e382390SJung-uk Kim]])
26967e382390SJung-uk Kim
26977e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_DEBUG]],,
26987e382390SJung-uk Kim[[
26997e382390SJung-uk Kimvoid yyset_debug YYFARGS1( int ,_bdebug)
27007e382390SJung-uk Kim{
27017e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
27027e382390SJung-uk Kim    yy_flex_debug = _bdebug ;
27037e382390SJung-uk Kim}
27047e382390SJung-uk Kim]])
27057e382390SJung-uk Kim%endif
27067e382390SJung-uk Kim
27077e382390SJung-uk Kim%if-reentrant
27087e382390SJung-uk Kim/* Accessor methods for yylval and yylloc */
27097e382390SJung-uk Kim
27107e382390SJung-uk Kim%if-bison-bridge
27117e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_GET_LVAL]],,
27127e382390SJung-uk Kim[[
27137e382390SJung-uk KimYYSTYPE * yyget_lval  (M4_YY_DEF_ONLY_ARG)
27147e382390SJung-uk Kim{
27157e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
27167e382390SJung-uk Kim    return yylval;
27177e382390SJung-uk Kim}
27187e382390SJung-uk Kim]])
27197e382390SJung-uk Kim
27207e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_SET_LVAL]],,
27217e382390SJung-uk Kim[[
27227e382390SJung-uk Kimvoid yyset_lval YYFARGS1( YYSTYPE * ,yylval_param)
27237e382390SJung-uk Kim{
27247e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
27257e382390SJung-uk Kim    yylval = yylval_param;
27267e382390SJung-uk Kim}
27277e382390SJung-uk Kim]])
27287e382390SJung-uk Kim
27297e382390SJung-uk Kimm4_ifdef( [[<M4_YY_BISON_LLOC>]],
27307e382390SJung-uk Kim[[
27317e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_GET_LLOC]],,
27327e382390SJung-uk Kim    [[
27337e382390SJung-uk KimYYLTYPE *yyget_lloc  (M4_YY_DEF_ONLY_ARG)
27347e382390SJung-uk Kim{
27357e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
27367e382390SJung-uk Kim    return yylloc;
27377e382390SJung-uk Kim}
27387e382390SJung-uk Kim    ]])
27397e382390SJung-uk Kim
27407e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NO_SET_LLOC]],,
27417e382390SJung-uk Kim    [[
27427e382390SJung-uk Kimvoid yyset_lloc YYFARGS1( YYLTYPE * ,yylloc_param)
27437e382390SJung-uk Kim{
27447e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
27457e382390SJung-uk Kim    yylloc = yylloc_param;
27467e382390SJung-uk Kim}
27477e382390SJung-uk Kim    ]])
27487e382390SJung-uk Kim]])
27497e382390SJung-uk Kim
27507e382390SJung-uk Kim%endif
27517e382390SJung-uk Kim
27527e382390SJung-uk Kim
27537e382390SJung-uk Kim/* User-visible API */
27547e382390SJung-uk Kim
27557e382390SJung-uk Kim/* yylex_init is special because it creates the scanner itself, so it is
27567e382390SJung-uk Kim * the ONLY reentrant function that doesn't take the scanner as the last argument.
27577e382390SJung-uk Kim * That's why we explicitly handle the declaration, instead of using our macros.
27587e382390SJung-uk Kim */
27597e382390SJung-uk Kimint yylex_init(yyscan_t* ptr_yy_globals)
27607e382390SJung-uk Kim{
27617e382390SJung-uk Kim    if (ptr_yy_globals == NULL){
27627e382390SJung-uk Kim        errno = EINVAL;
27637e382390SJung-uk Kim        return 1;
27647e382390SJung-uk Kim    }
27657e382390SJung-uk Kim
27667e382390SJung-uk Kim    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
27677e382390SJung-uk Kim
27687e382390SJung-uk Kim    if (*ptr_yy_globals == NULL){
27697e382390SJung-uk Kim        errno = ENOMEM;
27707e382390SJung-uk Kim        return 1;
27717e382390SJung-uk Kim    }
27727e382390SJung-uk Kim
27737e382390SJung-uk Kim    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
27747e382390SJung-uk Kim    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
27757e382390SJung-uk Kim
27767e382390SJung-uk Kim    return yy_init_globals ( *ptr_yy_globals );
27777e382390SJung-uk Kim}
27787e382390SJung-uk Kim
27797e382390SJung-uk Kim
27807e382390SJung-uk Kim/* yylex_init_extra has the same functionality as yylex_init, but follows the
27817e382390SJung-uk Kim * convention of taking the scanner as the last argument. Note however, that
27827e382390SJung-uk Kim * this is a *pointer* to a scanner, as it will be allocated by this call (and
27837e382390SJung-uk Kim * is the reason, too, why this function also must handle its own declaration).
27847e382390SJung-uk Kim * The user defined value in the first argument will be available to yyalloc in
27857e382390SJung-uk Kim * the yyextra field.
27867e382390SJung-uk Kim */
27877e382390SJung-uk Kimint yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
27887e382390SJung-uk Kim{
27897e382390SJung-uk Kim    struct yyguts_t dummy_yyguts;
27907e382390SJung-uk Kim
27917e382390SJung-uk Kim    yyset_extra (yy_user_defined, &dummy_yyguts);
27927e382390SJung-uk Kim
27937e382390SJung-uk Kim    if (ptr_yy_globals == NULL){
27947e382390SJung-uk Kim        errno = EINVAL;
27957e382390SJung-uk Kim        return 1;
27967e382390SJung-uk Kim    }
27977e382390SJung-uk Kim
27987e382390SJung-uk Kim    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
27997e382390SJung-uk Kim
28007e382390SJung-uk Kim    if (*ptr_yy_globals == NULL){
28017e382390SJung-uk Kim        errno = ENOMEM;
28027e382390SJung-uk Kim        return 1;
28037e382390SJung-uk Kim    }
28047e382390SJung-uk Kim
28057e382390SJung-uk Kim    /* By setting to 0xAA, we expose bugs in
28067e382390SJung-uk Kim    yy_init_globals. Leave at 0x00 for releases. */
28077e382390SJung-uk Kim    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
28087e382390SJung-uk Kim
28097e382390SJung-uk Kim    yyset_extra (yy_user_defined, *ptr_yy_globals);
28107e382390SJung-uk Kim
28117e382390SJung-uk Kim    return yy_init_globals ( *ptr_yy_globals );
28127e382390SJung-uk Kim}
28137e382390SJung-uk Kim
28147e382390SJung-uk Kim%endif if-c-only
28157e382390SJung-uk Kim%# Actually, that ended an if-rentrant section
28167e382390SJung-uk Kim
28177e382390SJung-uk Kim%if-c-only
28187e382390SJung-uk Kimstatic int yy_init_globals (M4_YY_DEF_ONLY_ARG)
28197e382390SJung-uk Kim{
28207e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
28217e382390SJung-uk Kim    /* Initialization is the same as for the non-reentrant scanner.
28227e382390SJung-uk Kim     * This function is called from yylex_destroy(), so don't allocate here.
28237e382390SJung-uk Kim     */
28247e382390SJung-uk Kim
28257e382390SJung-uk Kimm4_ifdef( [[M4_YY_USE_LINENO]],
28267e382390SJung-uk Kim[[
28277e382390SJung-uk Kim    m4_ifdef( [[M4_YY_NOT_REENTRANT]],
28287e382390SJung-uk Kim    [[
28297e382390SJung-uk Kim    /* We do not touch yylineno unless the option is enabled. */
28307e382390SJung-uk Kim    yylineno =  1;
28317e382390SJung-uk Kim    ]])
28327e382390SJung-uk Kim]])
28337e382390SJung-uk Kim    YY_G(yy_buffer_stack) = NULL;
28347e382390SJung-uk Kim    YY_G(yy_buffer_stack_top) = 0;
28357e382390SJung-uk Kim    YY_G(yy_buffer_stack_max) = 0;
28367e382390SJung-uk Kim    YY_G(yy_c_buf_p) = NULL;
28377e382390SJung-uk Kim    YY_G(yy_init) = 0;
28387e382390SJung-uk Kim    YY_G(yy_start) = 0;
28397e382390SJung-uk Kim
28407e382390SJung-uk Kimm4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],
28417e382390SJung-uk Kim[[
28427e382390SJung-uk Kim    YY_G(yy_start_stack_ptr) = 0;
28437e382390SJung-uk Kim    YY_G(yy_start_stack_depth) = 0;
28447e382390SJung-uk Kim    YY_G(yy_start_stack) =  NULL;
28457e382390SJung-uk Kim]])
28467e382390SJung-uk Kim
28477e382390SJung-uk Kimm4_ifdef( [[M4_YY_USES_REJECT]],
28487e382390SJung-uk Kim[[
28497e382390SJung-uk Kim    YY_G(yy_state_buf) = 0;
28507e382390SJung-uk Kim    YY_G(yy_state_ptr) = 0;
28517e382390SJung-uk Kim    YY_G(yy_full_match) = 0;
28527e382390SJung-uk Kim    YY_G(yy_lp) = 0;
28537e382390SJung-uk Kim]])
28547e382390SJung-uk Kim
28557e382390SJung-uk Kimm4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],
28567e382390SJung-uk Kim[[
28577e382390SJung-uk Kim    YY_G(yytext_ptr) = 0;
28587e382390SJung-uk Kim    YY_G(yy_more_offset) = 0;
28597e382390SJung-uk Kim    YY_G(yy_prev_more_offset) = 0;
28607e382390SJung-uk Kim]])
28617e382390SJung-uk Kim
28627e382390SJung-uk Kim/* Defined in main.c */
28637e382390SJung-uk Kim#ifdef YY_STDINIT
28647e382390SJung-uk Kim    yyin = stdin;
28657e382390SJung-uk Kim    yyout = stdout;
28667e382390SJung-uk Kim#else
28677e382390SJung-uk Kim    yyin = NULL;
28687e382390SJung-uk Kim    yyout = NULL;
28697e382390SJung-uk Kim#endif
28707e382390SJung-uk Kim
28717e382390SJung-uk Kim    /* For future reference: Set errno on error, since we are called by
28727e382390SJung-uk Kim     * yylex_init()
28737e382390SJung-uk Kim     */
28747e382390SJung-uk Kim    return 0;
28757e382390SJung-uk Kim}
28767e382390SJung-uk Kim%endif
28777e382390SJung-uk Kim
28787e382390SJung-uk Kim
28797e382390SJung-uk Kim%if-c-only SNIP! this currently causes conflicts with the c++ scanner
28807e382390SJung-uk Kim/* yylex_destroy is for both reentrant and non-reentrant scanners. */
28817e382390SJung-uk Kimint yylex_destroy  (M4_YY_DEF_ONLY_ARG)
28827e382390SJung-uk Kim{
28837e382390SJung-uk Kim    M4_YY_DECL_GUTS_VAR();
28847e382390SJung-uk Kim
28857e382390SJung-uk Kim    /* Pop the buffer stack, destroying each element. */
28867e382390SJung-uk Kim	while(YY_CURRENT_BUFFER){
28877e382390SJung-uk Kim		yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG );
28887e382390SJung-uk Kim		YY_CURRENT_BUFFER_LVALUE = NULL;
28897e382390SJung-uk Kim		yypop_buffer_state(M4_YY_CALL_ONLY_ARG);
28907e382390SJung-uk Kim	}
28917e382390SJung-uk Kim
28927e382390SJung-uk Kim	/* Destroy the stack itself. */
28937e382390SJung-uk Kim	yyfree(YY_G(yy_buffer_stack) M4_YY_CALL_LAST_ARG);
28947e382390SJung-uk Kim	YY_G(yy_buffer_stack) = NULL;
28957e382390SJung-uk Kim
28967e382390SJung-uk Kimm4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],
28977e382390SJung-uk Kim[[
28987e382390SJung-uk Kim    /* Destroy the start condition stack. */
28997e382390SJung-uk Kim        yyfree( YY_G(yy_start_stack) M4_YY_CALL_LAST_ARG );
29007e382390SJung-uk Kim        YY_G(yy_start_stack) = NULL;
29017e382390SJung-uk Kim]])
29027e382390SJung-uk Kim
29037e382390SJung-uk Kimm4_ifdef( [[M4_YY_USES_REJECT]],
29047e382390SJung-uk Kim[[
29057e382390SJung-uk Kim    yyfree ( YY_G(yy_state_buf) M4_YY_CALL_LAST_ARG);
29067e382390SJung-uk Kim    YY_G(yy_state_buf)  = NULL;
29077e382390SJung-uk Kim]])
29087e382390SJung-uk Kim
29097e382390SJung-uk Kim    /* Reset the globals. This is important in a non-reentrant scanner so the next time
29107e382390SJung-uk Kim     * yylex() is called, initialization will occur. */
29117e382390SJung-uk Kim    yy_init_globals( M4_YY_CALL_ONLY_ARG);
29127e382390SJung-uk Kim
29137e382390SJung-uk Kim%if-reentrant
29147e382390SJung-uk Kim    /* Destroy the main struct (reentrant only). */
29157e382390SJung-uk Kim    yyfree ( yyscanner M4_YY_CALL_LAST_ARG );
29167e382390SJung-uk Kim    yyscanner = NULL;
29177e382390SJung-uk Kim%endif
29187e382390SJung-uk Kim    return 0;
29197e382390SJung-uk Kim}
29207e382390SJung-uk Kim%endif
29217e382390SJung-uk Kim
29227e382390SJung-uk Kim
29237e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
29247e382390SJung-uk Kim[[
29257e382390SJung-uk Kim/*
29267e382390SJung-uk Kim * Internal utility routines.
29277e382390SJung-uk Kim */
29287e382390SJung-uk Kim]])
29297e382390SJung-uk Kim
29307e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
29317e382390SJung-uk Kim[[
29327e382390SJung-uk Kim#ifndef yytext_ptr
29337e382390SJung-uk Kimstatic void yy_flex_strncpy YYFARGS3( char*,s1, const char *,s2, int,n)
29347e382390SJung-uk Kim{
29357e382390SJung-uk Kim	M4_YY_DECL_GUTS_VAR();
29367e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
29377e382390SJung-uk Kim
29387e382390SJung-uk Kim	int i;
29397e382390SJung-uk Kim	for ( i = 0; i < n; ++i )
29407e382390SJung-uk Kim		s1[i] = s2[i];
29417e382390SJung-uk Kim}
29427e382390SJung-uk Kim#endif
29437e382390SJung-uk Kim]])
29447e382390SJung-uk Kim
29457e382390SJung-uk Kimm4_ifdef( [[M4_YY_NOT_IN_HEADER]],
29467e382390SJung-uk Kim[[
29477e382390SJung-uk Kim#ifdef YY_NEED_STRLEN
29487e382390SJung-uk Kimstatic int yy_flex_strlen YYFARGS1( const char *,s)
29497e382390SJung-uk Kim{
29507e382390SJung-uk Kim	int n;
29517e382390SJung-uk Kim	for ( n = 0; s[n]; ++n )
29527e382390SJung-uk Kim		;
29537e382390SJung-uk Kim
29547e382390SJung-uk Kim	return n;
29557e382390SJung-uk Kim}
29567e382390SJung-uk Kim#endif
29577e382390SJung-uk Kim]])
29587e382390SJung-uk Kim
29597e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_FLEX_ALLOC]],,
29607e382390SJung-uk Kim[[
29617e382390SJung-uk Kimvoid *yyalloc YYFARGS1( yy_size_t ,size)
29627e382390SJung-uk Kim{
29637e382390SJung-uk Kim	M4_YY_DECL_GUTS_VAR();
29647e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
29657e382390SJung-uk Kim	return malloc(size);
29667e382390SJung-uk Kim}
29677e382390SJung-uk Kim]])
29687e382390SJung-uk Kim
29697e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_FLEX_REALLOC]],,
29707e382390SJung-uk Kim[[
29717e382390SJung-uk Kimvoid *yyrealloc  YYFARGS2( void *,ptr, yy_size_t ,size)
29727e382390SJung-uk Kim{
29737e382390SJung-uk Kim	M4_YY_DECL_GUTS_VAR();
29747e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
29757e382390SJung-uk Kim
29767e382390SJung-uk Kim	/* The cast to (char *) in the following accommodates both
29777e382390SJung-uk Kim	 * implementations that use char* generic pointers, and those
29787e382390SJung-uk Kim	 * that use void* generic pointers.  It works with the latter
29797e382390SJung-uk Kim	 * because both ANSI C and C++ allow castless assignment from
29807e382390SJung-uk Kim	 * any pointer type to void*, and deal with argument conversions
29817e382390SJung-uk Kim	 * as though doing an assignment.
29827e382390SJung-uk Kim	 */
29837e382390SJung-uk Kim	return realloc(ptr, size);
29847e382390SJung-uk Kim}
29857e382390SJung-uk Kim]])
29867e382390SJung-uk Kim
29877e382390SJung-uk Kimm4_ifdef( [[M4_YY_NO_FLEX_FREE]],,
29887e382390SJung-uk Kim[[
29897e382390SJung-uk Kimvoid yyfree YYFARGS1( void *,ptr)
29907e382390SJung-uk Kim{
29917e382390SJung-uk Kim	M4_YY_DECL_GUTS_VAR();
29927e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
29937e382390SJung-uk Kim	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
29947e382390SJung-uk Kim}
29957e382390SJung-uk Kim]])
29967e382390SJung-uk Kim
29977e382390SJung-uk Kim%if-tables-serialization definitions
29987e382390SJung-uk Kimm4preproc_include(`tables_shared.c')
29997e382390SJung-uk Kim
30007e382390SJung-uk Kimstatic int yytbl_read8 (void *v, struct yytbl_reader * rd)
30017e382390SJung-uk Kim{
30027e382390SJung-uk Kim    errno = 0;
30037e382390SJung-uk Kim    if (fread (v, sizeof (flex_uint8_t), 1, rd->fp) != 1){
30047e382390SJung-uk Kim        errno = EIO;
30057e382390SJung-uk Kim        return -1;
30067e382390SJung-uk Kim    }
30077e382390SJung-uk Kim    rd->bread += (flex_uint32_t) sizeof(flex_uint8_t);
30087e382390SJung-uk Kim    return 0;
30097e382390SJung-uk Kim}
30107e382390SJung-uk Kim
30117e382390SJung-uk Kimstatic int yytbl_read16 (void *v, struct yytbl_reader * rd)
30127e382390SJung-uk Kim{
30137e382390SJung-uk Kim    errno = 0;
30147e382390SJung-uk Kim    if (fread (v, sizeof (flex_uint16_t), 1, rd->fp) != 1){
30157e382390SJung-uk Kim        errno = EIO;
30167e382390SJung-uk Kim        return -1;
30177e382390SJung-uk Kim    }
30187e382390SJung-uk Kim    *((flex_uint16_t *) v) = ntohs (*((flex_uint16_t *) v));
30197e382390SJung-uk Kim    rd->bread += (flex_uint32_t) sizeof(flex_uint16_t);
30207e382390SJung-uk Kim    return 0;
30217e382390SJung-uk Kim}
30227e382390SJung-uk Kim
30237e382390SJung-uk Kimstatic int yytbl_read32 (void *v, struct yytbl_reader * rd)
30247e382390SJung-uk Kim{
30257e382390SJung-uk Kim    errno = 0;
30267e382390SJung-uk Kim    if (fread (v, sizeof (flex_uint32_t), 1, rd->fp) != 1){
30277e382390SJung-uk Kim        errno = EIO;
30287e382390SJung-uk Kim        return -1;
30297e382390SJung-uk Kim    }
30307e382390SJung-uk Kim    *((flex_uint32_t *) v) = ntohl (*((flex_uint32_t *) v));
30317e382390SJung-uk Kim    rd->bread += (flex_uint32_t) sizeof(flex_uint32_t);
30327e382390SJung-uk Kim    return 0;
30337e382390SJung-uk Kim}
30347e382390SJung-uk Kim
30357e382390SJung-uk Kim/** Read the header */
30367e382390SJung-uk Kimstatic int yytbl_hdr_read YYFARGS2(struct yytbl_hdr *, th, struct yytbl_reader *, rd)
30377e382390SJung-uk Kim{
30387e382390SJung-uk Kim    size_t  bytes;
30397e382390SJung-uk Kim    memset (th, 0, sizeof (struct yytbl_hdr));
30407e382390SJung-uk Kim
30417e382390SJung-uk Kim    if (yytbl_read32 (&(th->th_magic), rd) != 0)
30427e382390SJung-uk Kim        return -1;
30437e382390SJung-uk Kim
30447e382390SJung-uk Kim    if (th->th_magic != YYTBL_MAGIC){
30457e382390SJung-uk Kim        YY_FATAL_ERROR( "bad magic number" );   /* TODO: not fatal. */
30467e382390SJung-uk Kim        return -1;
30477e382390SJung-uk Kim    }
30487e382390SJung-uk Kim
30497e382390SJung-uk Kim    if (yytbl_read32 (&(th->th_hsize), rd) != 0
30507e382390SJung-uk Kim        || yytbl_read32 (&(th->th_ssize), rd) != 0
30517e382390SJung-uk Kim        || yytbl_read16 (&(th->th_flags), rd) != 0)
30527e382390SJung-uk Kim        return -1;
30537e382390SJung-uk Kim
30547e382390SJung-uk Kim    /* Sanity check on header size. Greater than 1k suggests some funny business. */
30557e382390SJung-uk Kim    if (th->th_hsize < 16 || th->th_hsize > 1024){
30567e382390SJung-uk Kim        YY_FATAL_ERROR( "insane header size detected" );   /* TODO: not fatal. */
30577e382390SJung-uk Kim        return -1;
30587e382390SJung-uk Kim    }
30597e382390SJung-uk Kim
30607e382390SJung-uk Kim    /* Allocate enough space for the version and name fields */
30617e382390SJung-uk Kim    bytes = th->th_hsize - 14;
30627e382390SJung-uk Kim    th->th_version = (char *) yyalloc (bytes M4_YY_CALL_LAST_ARG);
30637e382390SJung-uk Kim    if ( ! th->th_version )
30647e382390SJung-uk Kim        YY_FATAL_ERROR( "out of dynamic memory in yytbl_hdr_read()" );
30657e382390SJung-uk Kim
30667e382390SJung-uk Kim    /* we read it all into th_version, and point th_name into that data */
30677e382390SJung-uk Kim    if (fread (th->th_version, 1, bytes, rd->fp) != bytes){
30687e382390SJung-uk Kim        errno = EIO;
30697e382390SJung-uk Kim        yyfree(th->th_version M4_YY_CALL_LAST_ARG);
30707e382390SJung-uk Kim        th->th_version = NULL;
30717e382390SJung-uk Kim        return -1;
30727e382390SJung-uk Kim    }
30737e382390SJung-uk Kim    else
30747e382390SJung-uk Kim        rd->bread += (flex_uint32_t) bytes;
30757e382390SJung-uk Kim
30767e382390SJung-uk Kim    th->th_name = th->th_version + strlen (th->th_version) + 1;
30777e382390SJung-uk Kim    return 0;
30787e382390SJung-uk Kim}
30797e382390SJung-uk Kim
30807e382390SJung-uk Kim/** lookup id in the dmap list.
30817e382390SJung-uk Kim *  @param dmap pointer to first element in list
30827e382390SJung-uk Kim *  @return NULL if not found.
30837e382390SJung-uk Kim */
30847e382390SJung-uk Kimstatic struct yytbl_dmap *yytbl_dmap_lookup YYFARGS2(struct yytbl_dmap *, dmap,
30857e382390SJung-uk Kim                                                      int, id)
30867e382390SJung-uk Kim{
30877e382390SJung-uk Kim	M4_YY_DECL_GUTS_VAR();
30887e382390SJung-uk Kim	M4_YY_NOOP_GUTS_VAR();
30897e382390SJung-uk Kim
30907e382390SJung-uk Kim    while (dmap->dm_id)
30917e382390SJung-uk Kim        if ((int)(dmap->dm_id) == id)
30927e382390SJung-uk Kim            return dmap;
30937e382390SJung-uk Kim        else
30947e382390SJung-uk Kim            dmap++;
30957e382390SJung-uk Kim    return NULL;
30967e382390SJung-uk Kim}
30977e382390SJung-uk Kim
30987e382390SJung-uk Kim/** Read a table while mapping its contents to the local array.
30997e382390SJung-uk Kim *  @param dmap used to performing mapping
31007e382390SJung-uk Kim *  @return 0 on success
31017e382390SJung-uk Kim */
31027e382390SJung-uk Kimstatic int yytbl_data_load YYFARGS2(struct yytbl_dmap *, dmap, struct yytbl_reader*, rd)
31037e382390SJung-uk Kim{
31047e382390SJung-uk Kim    struct yytbl_data td;
31057e382390SJung-uk Kim    struct yytbl_dmap *transdmap=0;
31067e382390SJung-uk Kim    int     len, i, rv, inner_loop_count;
31077e382390SJung-uk Kim    void   *p=0;
31087e382390SJung-uk Kim
31097e382390SJung-uk Kim    memset (&td, 0, sizeof (struct yytbl_data));
31107e382390SJung-uk Kim
31117e382390SJung-uk Kim    if (yytbl_read16 (&td.td_id, rd) != 0
31127e382390SJung-uk Kim        || yytbl_read16 (&td.td_flags, rd) != 0
31137e382390SJung-uk Kim        || yytbl_read32 (&td.td_hilen, rd) != 0
31147e382390SJung-uk Kim        || yytbl_read32 (&td.td_lolen, rd) != 0)
31157e382390SJung-uk Kim        return -1;
31167e382390SJung-uk Kim
31177e382390SJung-uk Kim    /* Lookup the map for the transition table so we have it in case we need it
31187e382390SJung-uk Kim     * inside the loop below. This scanner might not even have a transition
31197e382390SJung-uk Kim     * table, which is ok.
31207e382390SJung-uk Kim     */
31217e382390SJung-uk Kim    transdmap = yytbl_dmap_lookup (dmap, YYTD_ID_TRANSITION M4_YY_CALL_LAST_ARG);
31227e382390SJung-uk Kim
31237e382390SJung-uk Kim    if ((dmap = yytbl_dmap_lookup (dmap, td.td_id M4_YY_CALL_LAST_ARG)) == NULL){
31247e382390SJung-uk Kim        YY_FATAL_ERROR( "table id not found in map." );   /* TODO: not fatal. */
31257e382390SJung-uk Kim        return -1;
31267e382390SJung-uk Kim    }
31277e382390SJung-uk Kim
31287e382390SJung-uk Kim    /* Allocate space for table.
31297e382390SJung-uk Kim     * The --full yy_transition table is a special case, since we
31307e382390SJung-uk Kim     * need the dmap.dm_sz entry to tell us the sizeof the individual
31317e382390SJung-uk Kim     * struct members.
31327e382390SJung-uk Kim     */
31337e382390SJung-uk Kim    {
31347e382390SJung-uk Kim    size_t  bytes;
31357e382390SJung-uk Kim
31367e382390SJung-uk Kim    if ((td.td_flags & YYTD_STRUCT))
31377e382390SJung-uk Kim        bytes = sizeof(struct yy_trans_info) * td.td_lolen * (td.td_hilen ? td.td_hilen : 1);
31387e382390SJung-uk Kim    else
31397e382390SJung-uk Kim        bytes = td.td_lolen * (td.td_hilen ? td.td_hilen : 1) * dmap->dm_sz;
31407e382390SJung-uk Kim
31417e382390SJung-uk Kim    if(M4_YY_TABLES_VERIFY)
31427e382390SJung-uk Kim        /* We point to the array itself */
31437e382390SJung-uk Kim        p = dmap->dm_arr;
31447e382390SJung-uk Kim    else
31457e382390SJung-uk Kim        /* We point to the address of a pointer. */
31467e382390SJung-uk Kim        *dmap->dm_arr = p = (void *) yyalloc (bytes M4_YY_CALL_LAST_ARG);
31477e382390SJung-uk Kim        if ( ! p )
31487e382390SJung-uk Kim            YY_FATAL_ERROR( "out of dynamic memory in yytbl_data_load()" );
31497e382390SJung-uk Kim    }
31507e382390SJung-uk Kim
31517e382390SJung-uk Kim    /* If it's a struct, we read 2 integers to get one element */
31527e382390SJung-uk Kim    if ((td.td_flags & YYTD_STRUCT) != 0)
31537e382390SJung-uk Kim        inner_loop_count = 2;
31547e382390SJung-uk Kim    else
31557e382390SJung-uk Kim        inner_loop_count = 1;
31567e382390SJung-uk Kim
31577e382390SJung-uk Kim    /* read and map each element.
31587e382390SJung-uk Kim     * This loop iterates once for each element of the td_data array.
31597e382390SJung-uk Kim     * Notice that we increment 'i' in the inner loop.
31607e382390SJung-uk Kim     */
31617e382390SJung-uk Kim    len = yytbl_calc_total_len (&td);
31627e382390SJung-uk Kim    for (i = 0; i < len; ){
31637e382390SJung-uk Kim        int    j;
31647e382390SJung-uk Kim
31657e382390SJung-uk Kim
31667e382390SJung-uk Kim        /* This loop really executes exactly 1 or 2 times.
31677e382390SJung-uk Kim         * The second time is to handle the second member of the
31687e382390SJung-uk Kim         * YYTD_STRUCT for the yy_transition array.
31697e382390SJung-uk Kim         */
31707e382390SJung-uk Kim        for (j = 0; j < inner_loop_count; j++, i++) {
31717e382390SJung-uk Kim            flex_int32_t t32;
31727e382390SJung-uk Kim
31737e382390SJung-uk Kim            /* read into t32 no matter what the real size is. */
31747e382390SJung-uk Kim            {
31757e382390SJung-uk Kim            flex_int16_t t16;
31767e382390SJung-uk Kim            flex_int8_t  t8;
31777e382390SJung-uk Kim
31787e382390SJung-uk Kim            switch (YYTDFLAGS2BYTES (td.td_flags)) {
31797e382390SJung-uk Kim            case sizeof (flex_int32_t):
31807e382390SJung-uk Kim                rv = yytbl_read32 (&t32, rd);
31817e382390SJung-uk Kim                break;
31827e382390SJung-uk Kim            case sizeof (flex_int16_t):
31837e382390SJung-uk Kim                rv = yytbl_read16 (&t16, rd);
31847e382390SJung-uk Kim                t32 = t16;
31857e382390SJung-uk Kim                break;
31867e382390SJung-uk Kim            case sizeof (flex_int8_t):
31877e382390SJung-uk Kim                rv = yytbl_read8 (&t8, rd);
31887e382390SJung-uk Kim                t32 = t8;
31897e382390SJung-uk Kim                break;
31907e382390SJung-uk Kim            default:
31917e382390SJung-uk Kim                YY_FATAL_ERROR( "invalid td_flags" );   /* TODO: not fatal. */
31927e382390SJung-uk Kim                return -1;
31937e382390SJung-uk Kim            }
31947e382390SJung-uk Kim            }
31957e382390SJung-uk Kim            if (rv != 0)
31967e382390SJung-uk Kim                return -1;
31977e382390SJung-uk Kim
31987e382390SJung-uk Kim            /* copy into the deserialized array... */
31997e382390SJung-uk Kim
32007e382390SJung-uk Kim            if ((td.td_flags & YYTD_STRUCT)) {
32017e382390SJung-uk Kim                /* t32 is the j'th member of a two-element struct. */
32027e382390SJung-uk Kim                void   *v;
32037e382390SJung-uk Kim
32047e382390SJung-uk Kim                v = j == 0 ? &(((struct yy_trans_info *) p)->yy_verify)
32057e382390SJung-uk Kim                    : &(((struct yy_trans_info *) p)->yy_nxt);
32067e382390SJung-uk Kim
32077e382390SJung-uk Kim                switch (dmap->dm_sz) {
32087e382390SJung-uk Kim                case sizeof (flex_int32_t):
32097e382390SJung-uk Kim                    if (M4_YY_TABLES_VERIFY){
32107e382390SJung-uk Kim                        if( ((flex_int32_t *) v)[0] != (flex_int32_t) t32)
32117e382390SJung-uk Kim                           YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int32_t" );
32127e382390SJung-uk Kim                    }else
32137e382390SJung-uk Kim                        ((flex_int32_t *) v)[0] = (flex_int32_t) t32;
32147e382390SJung-uk Kim                    break;
32157e382390SJung-uk Kim                case sizeof (flex_int16_t):
32167e382390SJung-uk Kim                    if (M4_YY_TABLES_VERIFY ){
32177e382390SJung-uk Kim                        if(((flex_int16_t *) v)[0] != (flex_int16_t) t32)
32187e382390SJung-uk Kim                        YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int16_t" );
32197e382390SJung-uk Kim                    }else
32207e382390SJung-uk Kim                        ((flex_int16_t *) v)[0] = (flex_int16_t) t32;
32217e382390SJung-uk Kim                    break;
32227e382390SJung-uk Kim                case sizeof(flex_int8_t):
32237e382390SJung-uk Kim                    if (M4_YY_TABLES_VERIFY ){
32247e382390SJung-uk Kim                         if( ((flex_int8_t *) v)[0] != (flex_int8_t) t32)
32257e382390SJung-uk Kim                        YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int8_t" );
32267e382390SJung-uk Kim                    }else
32277e382390SJung-uk Kim                        ((flex_int8_t *) v)[0] = (flex_int8_t) t32;
32287e382390SJung-uk Kim                    break;
32297e382390SJung-uk Kim                default:
32307e382390SJung-uk Kim                    YY_FATAL_ERROR( "invalid dmap->dm_sz for struct" );   /* TODO: not fatal. */
32317e382390SJung-uk Kim                    return -1;
32327e382390SJung-uk Kim                }
32337e382390SJung-uk Kim
32347e382390SJung-uk Kim                /* if we're done with j, increment p */
32357e382390SJung-uk Kim                if (j == 1)
32367e382390SJung-uk Kim                    p = (struct yy_trans_info *) p + 1;
32377e382390SJung-uk Kim            }
32387e382390SJung-uk Kim            else if ((td.td_flags & YYTD_PTRANS)) {
32397e382390SJung-uk Kim                /* t32 is an index into the transition array. */
32407e382390SJung-uk Kim                struct yy_trans_info *v;
32417e382390SJung-uk Kim
32427e382390SJung-uk Kim
32437e382390SJung-uk Kim                if (!transdmap){
32447e382390SJung-uk Kim                    YY_FATAL_ERROR( "transition table not found" );   /* TODO: not fatal. */
32457e382390SJung-uk Kim                    return -1;
32467e382390SJung-uk Kim                }
32477e382390SJung-uk Kim
32487e382390SJung-uk Kim                if( M4_YY_TABLES_VERIFY)
32497e382390SJung-uk Kim                    v = &(((struct yy_trans_info *) (transdmap->dm_arr))[t32]);
32507e382390SJung-uk Kim                else
32517e382390SJung-uk Kim                    v = &((*((struct yy_trans_info **) (transdmap->dm_arr)))[t32]);
32527e382390SJung-uk Kim
32537e382390SJung-uk Kim                if(M4_YY_TABLES_VERIFY ){
32547e382390SJung-uk Kim                    if( ((struct yy_trans_info **) p)[0] != v)
32557e382390SJung-uk Kim                        YY_FATAL_ERROR( "tables verification failed at YYTD_PTRANS" );
32567e382390SJung-uk Kim                }else
32577e382390SJung-uk Kim                    ((struct yy_trans_info **) p)[0] = v;
32587e382390SJung-uk Kim
32597e382390SJung-uk Kim                /* increment p */
32607e382390SJung-uk Kim                p = (struct yy_trans_info **) p + 1;
32617e382390SJung-uk Kim            }
32627e382390SJung-uk Kim            else {
32637e382390SJung-uk Kim                /* t32 is a plain int. copy data, then incrememnt p. */
32647e382390SJung-uk Kim                switch (dmap->dm_sz) {
32657e382390SJung-uk Kim                case sizeof (flex_int32_t):
32667e382390SJung-uk Kim                    if(M4_YY_TABLES_VERIFY ){
32677e382390SJung-uk Kim                        if( ((flex_int32_t *) p)[0] != (flex_int32_t) t32)
32687e382390SJung-uk Kim                        YY_FATAL_ERROR( "tables verification failed at flex_int32_t" );
32697e382390SJung-uk Kim                    }else
32707e382390SJung-uk Kim                        ((flex_int32_t *) p)[0] = (flex_int32_t) t32;
32717e382390SJung-uk Kim                    p = ((flex_int32_t *) p) + 1;
32727e382390SJung-uk Kim                    break;
32737e382390SJung-uk Kim                case sizeof (flex_int16_t):
32747e382390SJung-uk Kim                    if(M4_YY_TABLES_VERIFY ){
32757e382390SJung-uk Kim                        if( ((flex_int16_t *) p)[0] != (flex_int16_t) t32)
32767e382390SJung-uk Kim                        YY_FATAL_ERROR( "tables verification failed at flex_int16_t" );
32777e382390SJung-uk Kim                    }else
32787e382390SJung-uk Kim                        ((flex_int16_t *) p)[0] = (flex_int16_t) t32;
32797e382390SJung-uk Kim                    p = ((flex_int16_t *) p) + 1;
32807e382390SJung-uk Kim                    break;
32817e382390SJung-uk Kim                case sizeof (flex_int8_t):
32827e382390SJung-uk Kim                    if(M4_YY_TABLES_VERIFY ){
32837e382390SJung-uk Kim                        if( ((flex_int8_t *) p)[0] != (flex_int8_t) t32)
32847e382390SJung-uk Kim                        YY_FATAL_ERROR( "tables verification failed at flex_int8_t" );
32857e382390SJung-uk Kim                    }else
32867e382390SJung-uk Kim                        ((flex_int8_t *) p)[0] = (flex_int8_t) t32;
32877e382390SJung-uk Kim                    p = ((flex_int8_t *) p) + 1;
32887e382390SJung-uk Kim                    break;
32897e382390SJung-uk Kim                default:
32907e382390SJung-uk Kim                    YY_FATAL_ERROR( "invalid dmap->dm_sz for plain int" );   /* TODO: not fatal. */
32917e382390SJung-uk Kim                    return -1;
32927e382390SJung-uk Kim                }
32937e382390SJung-uk Kim            }
32947e382390SJung-uk Kim        }
32957e382390SJung-uk Kim
32967e382390SJung-uk Kim    }
32977e382390SJung-uk Kim
32987e382390SJung-uk Kim    /* Now eat padding. */
32997e382390SJung-uk Kim    {
33007e382390SJung-uk Kim        int pad;
33017e382390SJung-uk Kim        pad = yypad64(rd->bread);
33027e382390SJung-uk Kim        while(--pad >= 0){
33037e382390SJung-uk Kim            flex_int8_t t8;
33047e382390SJung-uk Kim            if(yytbl_read8(&t8,rd) != 0)
33057e382390SJung-uk Kim                return -1;
33067e382390SJung-uk Kim        }
33077e382390SJung-uk Kim    }
33087e382390SJung-uk Kim
33097e382390SJung-uk Kim    return 0;
33107e382390SJung-uk Kim}
33117e382390SJung-uk Kim
33127e382390SJung-uk Kim%define-yytables   The name for this specific scanner's tables.
33137e382390SJung-uk Kim
33147e382390SJung-uk Kim/* Find the key and load the DFA tables from the given stream.  */
33157e382390SJung-uk Kimstatic int yytbl_fload YYFARGS2(FILE *, fp, const char *, key)
33167e382390SJung-uk Kim{
33177e382390SJung-uk Kim    int rv=0;
33187e382390SJung-uk Kim    struct yytbl_hdr th;
33197e382390SJung-uk Kim    struct yytbl_reader rd;
33207e382390SJung-uk Kim
33217e382390SJung-uk Kim    rd.fp = fp;
33227e382390SJung-uk Kim    th.th_version = NULL;
33237e382390SJung-uk Kim
33247e382390SJung-uk Kim    /* Keep trying until we find the right set of tables or end of file. */
33257e382390SJung-uk Kim    while (!feof(rd.fp)) {
33267e382390SJung-uk Kim        rd.bread = 0;
33277e382390SJung-uk Kim        if (yytbl_hdr_read (&th, &rd M4_YY_CALL_LAST_ARG) != 0){
33287e382390SJung-uk Kim            rv = -1;
33297e382390SJung-uk Kim            goto return_rv;
33307e382390SJung-uk Kim        }
33317e382390SJung-uk Kim
33327e382390SJung-uk Kim        /* A NULL key means choose the first set of tables. */
33337e382390SJung-uk Kim        if (key == NULL)
33347e382390SJung-uk Kim            break;
33357e382390SJung-uk Kim
33367e382390SJung-uk Kim        if (strcmp(th.th_name,key) != 0){
33377e382390SJung-uk Kim            /* Skip ahead to next set */
33387e382390SJung-uk Kim            fseek(rd.fp, th.th_ssize - th.th_hsize, SEEK_CUR);
33397e382390SJung-uk Kim            yyfree(th.th_version M4_YY_CALL_LAST_ARG);
33407e382390SJung-uk Kim            th.th_version = NULL;
33417e382390SJung-uk Kim        }
33427e382390SJung-uk Kim        else
33437e382390SJung-uk Kim            break;
33447e382390SJung-uk Kim    }
33457e382390SJung-uk Kim
33467e382390SJung-uk Kim    while (rd.bread < th.th_ssize){
33477e382390SJung-uk Kim        /* Load the data tables */
33487e382390SJung-uk Kim        if(yytbl_data_load (yydmap,&rd M4_YY_CALL_LAST_ARG) != 0){
33497e382390SJung-uk Kim            rv = -1;
33507e382390SJung-uk Kim            goto return_rv;
33517e382390SJung-uk Kim        }
33527e382390SJung-uk Kim    }
33537e382390SJung-uk Kim
33547e382390SJung-uk Kimreturn_rv:
33557e382390SJung-uk Kim    if(th.th_version){
33567e382390SJung-uk Kim        yyfree(th.th_version M4_YY_CALL_LAST_ARG);
33577e382390SJung-uk Kim        th.th_version = NULL;
33587e382390SJung-uk Kim    }
33597e382390SJung-uk Kim
33607e382390SJung-uk Kim    return rv;
33617e382390SJung-uk Kim}
33627e382390SJung-uk Kim
33637e382390SJung-uk Kim/** Load the DFA tables for this scanner from the given stream.  */
33647e382390SJung-uk Kimint yytables_fload YYFARGS1(FILE *, fp)
33657e382390SJung-uk Kim{
33667e382390SJung-uk Kim
33677e382390SJung-uk Kim    if( yytbl_fload(fp, YYTABLES_NAME M4_YY_CALL_LAST_ARG) != 0)
33687e382390SJung-uk Kim        return -1;
33697e382390SJung-uk Kim    return 0;
33707e382390SJung-uk Kim}
33717e382390SJung-uk Kim
33727e382390SJung-uk Kim/** Destroy the loaded tables, freeing memory, etc.. */
33737e382390SJung-uk Kimint yytables_destroy (M4_YY_DEF_ONLY_ARG)
33747e382390SJung-uk Kim{
33757e382390SJung-uk Kim    struct yytbl_dmap *dmap=0;
33767e382390SJung-uk Kim
33777e382390SJung-uk Kim    if(!M4_YY_TABLES_VERIFY){
33787e382390SJung-uk Kim        /* Walk the dmap, freeing the pointers */
33797e382390SJung-uk Kim        for(dmap=yydmap; dmap->dm_id; dmap++) {
33807e382390SJung-uk Kim            void * v;
33817e382390SJung-uk Kim            v = dmap->dm_arr;
33827e382390SJung-uk Kim            if(v && *(char**)v){
33837e382390SJung-uk Kim                    yyfree(*(char**)v M4_YY_CALL_LAST_ARG);
33847e382390SJung-uk Kim                    *(char**)v = NULL;
33857e382390SJung-uk Kim            }
33867e382390SJung-uk Kim        }
33877e382390SJung-uk Kim    }
33887e382390SJung-uk Kim
33897e382390SJung-uk Kim    return 0;
33907e382390SJung-uk Kim}
33917e382390SJung-uk Kim
33927e382390SJung-uk Kim/* end table serialization code definitions */
33937e382390SJung-uk Kim%endif
33947e382390SJung-uk Kim
33957e382390SJung-uk Kim
33967e382390SJung-uk Kimm4_ifdef([[M4_YY_MAIN]], [[
33977e382390SJung-uk Kimint main (void);
33987e382390SJung-uk Kim
33997e382390SJung-uk Kimint main ()
34007e382390SJung-uk Kim{
34017e382390SJung-uk Kim
34027e382390SJung-uk Kim%if-reentrant
34037e382390SJung-uk Kim    yyscan_t lexer;
34047e382390SJung-uk Kim    yylex_init(&lexer);
34057e382390SJung-uk Kim    yylex( lexer );
34067e382390SJung-uk Kim    yylex_destroy( lexer);
34077e382390SJung-uk Kim
34087e382390SJung-uk Kim%endif
34097e382390SJung-uk Kim%if-not-reentrant
34107e382390SJung-uk Kim	yylex();
34117e382390SJung-uk Kim%endif
34127e382390SJung-uk Kim
34137e382390SJung-uk Kim	return 0;
34147e382390SJung-uk Kim}
34157e382390SJung-uk Kim]])
34167e382390SJung-uk Kim
34177e382390SJung-uk Kim%ok-for-header
34187e382390SJung-uk Kimm4_ifdef( [[M4_YY_IN_HEADER]],
34197e382390SJung-uk Kim[[
34207e382390SJung-uk Kim#undef YY_NEW_FILE
34217e382390SJung-uk Kim#undef YY_FLUSH_BUFFER
34227e382390SJung-uk Kim#undef yy_set_bol
34237e382390SJung-uk Kim#undef yy_new_buffer
34247e382390SJung-uk Kim#undef yy_set_interactive
34257e382390SJung-uk Kim#undef YY_DO_BEFORE_ACTION
34267e382390SJung-uk Kim
34277e382390SJung-uk Kim#ifdef YY_DECL_IS_OURS
34287e382390SJung-uk Kim#undef YY_DECL_IS_OURS
34297e382390SJung-uk Kim#undef YY_DECL
34307e382390SJung-uk Kim#endif
34317e382390SJung-uk Kimm4preproc_undivert(1)
34327e382390SJung-uk Kim]])
3433