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