| 1 | /* scan.l - scanner for flex input -*-C-*- */ | 
|---|
| 2 |  | 
|---|
| 3 | %{ | 
|---|
| 4 | /*  Copyright (c) 1990 The Regents of the University of California. */ | 
|---|
| 5 | /*  All rights reserved. */ | 
|---|
| 6 |  | 
|---|
| 7 | /*  This code is derived from software contributed to Berkeley by */ | 
|---|
| 8 | /*  Vern Paxson. */ | 
|---|
| 9 |  | 
|---|
| 10 | /*  The United States Government has rights in this work pursuant */ | 
|---|
| 11 | /*  to contract no. DE-AC03-76SF00098 between the United States */ | 
|---|
| 12 | /*  Department of Energy and the University of California. */ | 
|---|
| 13 |  | 
|---|
| 14 | /*  This file is part of flex. */ | 
|---|
| 15 |  | 
|---|
| 16 | /*  Redistribution and use in source and binary forms, with or without */ | 
|---|
| 17 | /*  modification, are permitted provided that the following conditions */ | 
|---|
| 18 | /*  are met: */ | 
|---|
| 19 |  | 
|---|
| 20 | /*  1. Redistributions of source code must retain the above copyright */ | 
|---|
| 21 | /*     notice, this list of conditions and the following disclaimer. */ | 
|---|
| 22 | /*  2. Redistributions in binary form must reproduce the above copyright */ | 
|---|
| 23 | /*     notice, this list of conditions and the following disclaimer in the */ | 
|---|
| 24 | /*     documentation and/or other materials provided with the distribution. */ | 
|---|
| 25 |  | 
|---|
| 26 | /*  Neither the name of the University nor the names of its contributors */ | 
|---|
| 27 | /*  may be used to endorse or promote products derived from this software */ | 
|---|
| 28 | /*  without specific prior written permission. */ | 
|---|
| 29 |  | 
|---|
| 30 | /*  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ | 
|---|
| 31 | /*  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ | 
|---|
| 32 | /*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ | 
|---|
| 33 | /*  PURPOSE. */ | 
|---|
| 34 |  | 
|---|
| 35 | #include "flexdef.h" | 
|---|
| 36 | #include "parse.h" | 
|---|
| 37 | extern bool tablesverify, tablesext; | 
|---|
| 38 | extern int trlcontxt; /* Set in  parse.y for each rule. */ | 
|---|
| 39 |  | 
|---|
| 40 | #define ACTION_ECHO add_action( yytext ) | 
|---|
| 41 | #define ACTION_IFDEF(def, should_define) \ | 
|---|
| 42 | { \ | 
|---|
| 43 | if ( should_define ) \ | 
|---|
| 44 | action_define( def, 1 ); \ | 
|---|
| 45 | } | 
|---|
| 46 |  | 
|---|
| 47 | #define ACTION_M4_IFDEF(def, should_define) \ | 
|---|
| 48 | do{ \ | 
|---|
| 49 | if ( should_define ) \ | 
|---|
| 50 | buf_m4_define( &m4defs_buf, def, NULL);\ | 
|---|
| 51 | else \ | 
|---|
| 52 | buf_m4_undefine( &m4defs_buf, def);\ | 
|---|
| 53 | } while(0) | 
|---|
| 54 |  | 
|---|
| 55 | #define MARK_END_OF_PROLOG mark_prolog(); | 
|---|
| 56 |  | 
|---|
| 57 | #define YY_DECL \ | 
|---|
| 58 | int flexscan() | 
|---|
| 59 |  | 
|---|
| 60 | #define RETURNCHAR \ | 
|---|
| 61 | yylval = (unsigned char) yytext[0]; \ | 
|---|
| 62 | return CHAR; | 
|---|
| 63 |  | 
|---|
| 64 | #define RETURNNAME \ | 
|---|
| 65 | if(yyleng < MAXLINE) \ | 
|---|
| 66 | { \ | 
|---|
| 67 | strcpy( nmstr, yytext ); \ | 
|---|
| 68 | } \ | 
|---|
| 69 | else \ | 
|---|
| 70 | { \ | 
|---|
| 71 | synerr(_("Input line too long\n")); \ | 
|---|
| 72 | FLEX_EXIT(EXIT_FAILURE);  \ | 
|---|
| 73 | }  \ | 
|---|
| 74 | return NAME; | 
|---|
| 75 |  | 
|---|
| 76 | #define PUT_BACK_STRING(str, start) \ | 
|---|
| 77 | for ( i = strlen( str ) - 1; i >= start; --i ) \ | 
|---|
| 78 | unput((str)[i]) | 
|---|
| 79 |  | 
|---|
| 80 | #define CHECK_REJECT(str) \ | 
|---|
| 81 | if ( all_upper( str ) ) \ | 
|---|
| 82 | reject = true; | 
|---|
| 83 |  | 
|---|
| 84 | #define CHECK_YYMORE(str) \ | 
|---|
| 85 | if ( all_lower( str ) ) \ | 
|---|
| 86 | yymore_used = true; | 
|---|
| 87 |  | 
|---|
| 88 | #define YY_USER_INIT \ | 
|---|
| 89 | if ( getenv("POSIXLY_CORRECT") ) \ | 
|---|
| 90 | posix_compat = true; | 
|---|
| 91 |  | 
|---|
| 92 | %} | 
|---|
| 93 |  | 
|---|
| 94 | %option caseless nodefault stack noyy_top_state | 
|---|
| 95 | %option nostdinit | 
|---|
| 96 |  | 
|---|
| 97 | %x SECT2 SECT2PROLOG SECT3 CODEBLOCK PICKUPDEF SC CARETISBOL NUM QUOTE | 
|---|
| 98 | %x FIRSTCCL CCL ACTION RECOVER COMMENT ACTION_STRING PERCENT_BRACE_ACTION | 
|---|
| 99 | %x OPTION LINEDIR CODEBLOCK_MATCH_BRACE | 
|---|
| 100 |  | 
|---|
| 101 | WS              [[:blank:]]+ | 
|---|
| 102 | OPTWS           [[:blank:]]* | 
|---|
| 103 | NOT_WS          [^[:blank:]\r\n] | 
|---|
| 104 |  | 
|---|
| 105 | NL              \r?\n | 
|---|
| 106 |  | 
|---|
| 107 | NAME            ([[:alpha:]_][[:alnum:]_-]*) | 
|---|
| 108 | NOT_NAME        [^[:alpha:]_*\n]+ | 
|---|
| 109 |  | 
|---|
| 110 | SCNAME          {NAME} | 
|---|
| 111 |  | 
|---|
| 112 | ESCSEQ          (\\([^\n]|[0-7]{1,3}|x[[:xdigit:]]{1,2})) | 
|---|
| 113 |  | 
|---|
| 114 | FIRST_CCL_CHAR  ([^\\\n]|{ESCSEQ}) | 
|---|
| 115 | CCL_CHAR        ([^\\\n\]]|{ESCSEQ}) | 
|---|
| 116 | CCL_EXPR        ("[:"[[:alpha:]]+":]") | 
|---|
| 117 |  | 
|---|
| 118 | LEXOPT          [aceknopr] | 
|---|
| 119 |  | 
|---|
| 120 | %% | 
|---|
| 121 | static int bracelevel, didadef, indented_code; | 
|---|
| 122 | static int doing_rule_action = false; | 
|---|
| 123 | static int option_sense; | 
|---|
| 124 |  | 
|---|
| 125 | int doing_codeblock = false; | 
|---|
| 126 | int i, brace_depth=0, brace_start_line=0; | 
|---|
| 127 | Char nmdef[MAXLINE]; | 
|---|
| 128 |  | 
|---|
| 129 |  | 
|---|
| 130 | <INITIAL>{ | 
|---|
| 131 | ^{WS}           indented_code = true; BEGIN(CODEBLOCK); | 
|---|
| 132 | ^"/*"           ACTION_ECHO; yy_push_state( COMMENT ); | 
|---|
| 133 | ^#{OPTWS}line{WS}       yy_push_state( LINEDIR ); | 
|---|
| 134 | ^"%s"{NAME}?    return SCDECL; | 
|---|
| 135 | ^"%x"{NAME}?    return XSCDECL; | 
|---|
| 136 | ^"%{".*{NL}     { | 
|---|
| 137 | ++linenum; | 
|---|
| 138 | line_directive_out( (FILE *) 0, 1 ); | 
|---|
| 139 | indented_code = false; | 
|---|
| 140 | BEGIN(CODEBLOCK); | 
|---|
| 141 | } | 
|---|
| 142 | ^"%top"[[:blank:]]*"{"[[:blank:]]*{NL}    { | 
|---|
| 143 | brace_start_line = linenum; | 
|---|
| 144 | ++linenum; | 
|---|
| 145 | buf_linedir( &top_buf, infilename?infilename:"<stdin>", linenum); | 
|---|
| 146 | brace_depth = 1; | 
|---|
| 147 | yy_push_state(CODEBLOCK_MATCH_BRACE); | 
|---|
| 148 | } | 
|---|
| 149 |  | 
|---|
| 150 | ^"%top".*   synerr( _("malformed '%top' directive") ); | 
|---|
| 151 |  | 
|---|
| 152 | {WS}            /* discard */ | 
|---|
| 153 |  | 
|---|
| 154 | ^"%%".*         { | 
|---|
| 155 | sectnum = 2; | 
|---|
| 156 | bracelevel = 0; | 
|---|
| 157 | mark_defs1(); | 
|---|
| 158 | line_directive_out( (FILE *) 0, 1 ); | 
|---|
| 159 | BEGIN(SECT2PROLOG); | 
|---|
| 160 | return SECTEND; | 
|---|
| 161 | } | 
|---|
| 162 |  | 
|---|
| 163 | ^"%pointer".*{NL}       yytext_is_array = false; ++linenum; | 
|---|
| 164 | ^"%array".*{NL}         yytext_is_array = true; ++linenum; | 
|---|
| 165 |  | 
|---|
| 166 | ^"%option"      BEGIN(OPTION); return OPTION_OP; | 
|---|
| 167 |  | 
|---|
| 168 | ^"%"{LEXOPT}{OPTWS}[[:digit:]]*{OPTWS}{NL}      ++linenum; /* ignore */ | 
|---|
| 169 | ^"%"{LEXOPT}{WS}.*{NL}  ++linenum;      /* ignore */ | 
|---|
| 170 |  | 
|---|
| 171 | /* xgettext: no-c-format */ | 
|---|
| 172 | ^"%"[^sxaceknopr{}].*   synerr( _( "unrecognized '%' directive" ) ); | 
|---|
| 173 |  | 
|---|
| 174 | ^{NAME}         { | 
|---|
| 175 | if(yyleng < MAXLINE) | 
|---|
| 176 | { | 
|---|
| 177 | strcpy( nmstr, yytext ); | 
|---|
| 178 | } | 
|---|
| 179 | else | 
|---|
| 180 | { | 
|---|
| 181 | synerr( _("Input line too long\n")); | 
|---|
| 182 | FLEX_EXIT(EXIT_FAILURE); | 
|---|
| 183 | } | 
|---|
| 184 |  | 
|---|
| 185 | didadef = false; | 
|---|
| 186 | BEGIN(PICKUPDEF); | 
|---|
| 187 | } | 
|---|
| 188 |  | 
|---|
| 189 | {SCNAME}        RETURNNAME; | 
|---|
| 190 | ^{OPTWS}{NL}    ++linenum; /* allows blank lines in section 1 */ | 
|---|
| 191 | {OPTWS}{NL}     ACTION_ECHO; ++linenum; /* maybe end of comment line */ | 
|---|
| 192 | } | 
|---|
| 193 |  | 
|---|
| 194 |  | 
|---|
| 195 | <COMMENT>{ | 
|---|
| 196 | "*/"            ACTION_ECHO; yy_pop_state(); | 
|---|
| 197 | "*"             ACTION_ECHO; | 
|---|
| 198 | [^*\n]+         ACTION_ECHO; | 
|---|
| 199 | [^*\n]*{NL}     ++linenum; ACTION_ECHO; | 
|---|
| 200 | } | 
|---|
| 201 |  | 
|---|
| 202 | <LINEDIR>{ | 
|---|
| 203 | \n              yy_pop_state(); | 
|---|
| 204 | [[:digit:]]+    linenum = myctoi( yytext ); | 
|---|
| 205 |  | 
|---|
| 206 | \"[^"\n]*\"     { | 
|---|
| 207 | flex_free( (void *) infilename ); | 
|---|
| 208 | infilename = copy_string( yytext + 1 ); | 
|---|
| 209 | infilename[strlen( infilename ) - 1] = '\0'; | 
|---|
| 210 | } | 
|---|
| 211 | .               /* ignore spurious characters */ | 
|---|
| 212 | } | 
|---|
| 213 |  | 
|---|
| 214 | <CODEBLOCK>{ | 
|---|
| 215 | ^"%}".*{NL}     ++linenum; BEGIN(INITIAL); | 
|---|
| 216 |  | 
|---|
| 217 | {NAME}|{NOT_NAME}|.     ACTION_ECHO; | 
|---|
| 218 |  | 
|---|
| 219 | {NL}            { | 
|---|
| 220 | ++linenum; | 
|---|
| 221 | ACTION_ECHO; | 
|---|
| 222 | if ( indented_code ) | 
|---|
| 223 | BEGIN(INITIAL); | 
|---|
| 224 | } | 
|---|
| 225 | } | 
|---|
| 226 |  | 
|---|
| 227 | <CODEBLOCK_MATCH_BRACE>{ | 
|---|
| 228 | "}"     { | 
|---|
| 229 | if( --brace_depth == 0){ | 
|---|
| 230 | /* TODO: Matched. */ | 
|---|
| 231 | yy_pop_state(); | 
|---|
| 232 | }else | 
|---|
| 233 | buf_strnappend(&top_buf, yytext, yyleng); | 
|---|
| 234 | } | 
|---|
| 235 |  | 
|---|
| 236 | "{"     { | 
|---|
| 237 | brace_depth++; | 
|---|
| 238 | buf_strnappend(&top_buf, yytext, yyleng); | 
|---|
| 239 | } | 
|---|
| 240 |  | 
|---|
| 241 | {NL}    { | 
|---|
| 242 | ++linenum; | 
|---|
| 243 | buf_strnappend(&top_buf, yytext, yyleng); | 
|---|
| 244 | } | 
|---|
| 245 |  | 
|---|
| 246 | [^{}\r\n]+  { | 
|---|
| 247 | buf_strnappend(&top_buf, yytext, yyleng); | 
|---|
| 248 | } | 
|---|
| 249 |  | 
|---|
| 250 | <<EOF>>     { | 
|---|
| 251 | linenum = brace_start_line; | 
|---|
| 252 | synerr(_("Unmatched '{'")); | 
|---|
| 253 | yyterminate(); | 
|---|
| 254 | } | 
|---|
| 255 | } | 
|---|
| 256 |  | 
|---|
| 257 |  | 
|---|
| 258 | <PICKUPDEF>{ | 
|---|
| 259 | {WS}            /* separates name and definition */ | 
|---|
| 260 |  | 
|---|
| 261 | {NOT_WS}[^\r\n]*        { | 
|---|
| 262 | if(yyleng < MAXLINE) | 
|---|
| 263 | { | 
|---|
| 264 | strcpy( (char *) nmdef, yytext ); | 
|---|
| 265 | } | 
|---|
| 266 | else | 
|---|
| 267 | { | 
|---|
| 268 | synerr( _("Input line too long\n")); | 
|---|
| 269 | FLEX_EXIT(EXIT_FAILURE); | 
|---|
| 270 | } | 
|---|
| 271 | /* Skip trailing whitespace. */ | 
|---|
| 272 | for ( i = strlen( (char *) nmdef ) - 1; | 
|---|
| 273 | i >= 0 && (nmdef[i] == ' ' || nmdef[i] == '\t'); | 
|---|
| 274 | --i ) | 
|---|
| 275 | ; | 
|---|
| 276 |  | 
|---|
| 277 | nmdef[i + 1] = '\0'; | 
|---|
| 278 |  | 
|---|
| 279 | ndinstal( nmstr, nmdef ); | 
|---|
| 280 | didadef = true; | 
|---|
| 281 | } | 
|---|
| 282 |  | 
|---|
| 283 | {NL}            { | 
|---|
| 284 | if ( ! didadef ) | 
|---|
| 285 | synerr( _( "incomplete name definition" ) ); | 
|---|
| 286 | BEGIN(INITIAL); | 
|---|
| 287 | ++linenum; | 
|---|
| 288 | } | 
|---|
| 289 | } | 
|---|
| 290 |  | 
|---|
| 291 |  | 
|---|
| 292 | <OPTION>{ | 
|---|
| 293 | {NL}            ++linenum; BEGIN(INITIAL); | 
|---|
| 294 | {WS}            option_sense = true; | 
|---|
| 295 |  | 
|---|
| 296 | "="             return '='; | 
|---|
| 297 |  | 
|---|
| 298 | no              option_sense = ! option_sense; | 
|---|
| 299 |  | 
|---|
| 300 | 7bit            csize = option_sense ? 128 : 256; | 
|---|
| 301 | 8bit            csize = option_sense ? 256 : 128; | 
|---|
| 302 |  | 
|---|
| 303 | align           long_align = option_sense; | 
|---|
| 304 | always-interactive      { | 
|---|
| 305 | ACTION_M4_IFDEF( "M4""_YY_ALWAYS_INTERACTIVE", option_sense ); | 
|---|
| 306 | interactive = option_sense; | 
|---|
| 307 | } | 
|---|
| 308 | array           yytext_is_array = option_sense; | 
|---|
| 309 | ansi-definitions ansi_func_defs = option_sense; | 
|---|
| 310 | ansi-prototypes  ansi_func_protos = option_sense; | 
|---|
| 311 | backup          backing_up_report = option_sense; | 
|---|
| 312 | batch           interactive = ! option_sense; | 
|---|
| 313 | bison-bridge     bison_bridge_lval = option_sense; | 
|---|
| 314 | bison-locations  { if((bison_bridge_lloc = option_sense)) | 
|---|
| 315 | bison_bridge_lval = true; | 
|---|
| 316 | } | 
|---|
| 317 | "c++"           C_plus_plus = option_sense; | 
|---|
| 318 | caseful|case-sensitive          caseins = ! option_sense; | 
|---|
| 319 | caseless|case-insensitive       caseins = option_sense; | 
|---|
| 320 | debug           ddebug = option_sense; | 
|---|
| 321 | default         spprdflt = ! option_sense; | 
|---|
| 322 | ecs             useecs = option_sense; | 
|---|
| 323 | fast            { | 
|---|
| 324 | useecs = usemecs = false; | 
|---|
| 325 | use_read = fullspd = true; | 
|---|
| 326 | } | 
|---|
| 327 | full            { | 
|---|
| 328 | useecs = usemecs = false; | 
|---|
| 329 | use_read = fulltbl = true; | 
|---|
| 330 | } | 
|---|
| 331 | input           ACTION_IFDEF("YY_NO_INPUT", ! option_sense); | 
|---|
| 332 | interactive     interactive = option_sense; | 
|---|
| 333 | lex-compat      lex_compat = option_sense; | 
|---|
| 334 | posix-compat    posix_compat = option_sense; | 
|---|
| 335 | main            { | 
|---|
| 336 | ACTION_M4_IFDEF( "M4""_YY_MAIN", option_sense); | 
|---|
| 337 | /* Override yywrap */ | 
|---|
| 338 | if( option_sense == true ) | 
|---|
| 339 | do_yywrap = false; | 
|---|
| 340 | } | 
|---|
| 341 | meta-ecs        usemecs = option_sense; | 
|---|
| 342 | never-interactive       { | 
|---|
| 343 | ACTION_M4_IFDEF( "M4""_YY_NEVER_INTERACTIVE", option_sense ); | 
|---|
| 344 | interactive = !option_sense; | 
|---|
| 345 | } | 
|---|
| 346 | perf-report     performance_report += option_sense ? 1 : -1; | 
|---|
| 347 | pointer         yytext_is_array = ! option_sense; | 
|---|
| 348 | read            use_read = option_sense; | 
|---|
| 349 | reentrant   reentrant = option_sense; | 
|---|
| 350 | reject          reject_really_used = option_sense; | 
|---|
| 351 | stack           ACTION_M4_IFDEF( "M4""_YY_STACK_USED", option_sense ); | 
|---|
| 352 | stdinit         do_stdinit = option_sense; | 
|---|
| 353 | stdout          use_stdout = option_sense; | 
|---|
| 354 | unistd      ACTION_IFDEF("YY_NO_UNISTD_H", ! option_sense); | 
|---|
| 355 | unput           ACTION_M4_IFDEF("M4""_YY_NO_UNPUT", ! option_sense); | 
|---|
| 356 | verbose         printstats = option_sense; | 
|---|
| 357 | warn            nowarn = ! option_sense; | 
|---|
| 358 | yylineno        do_yylineno = option_sense; ACTION_M4_IFDEF("M4""_YY_USE_LINENO", option_sense); | 
|---|
| 359 | yymore          yymore_really_used = option_sense; | 
|---|
| 360 | yywrap      do_yywrap = option_sense; | 
|---|
| 361 |  | 
|---|
| 362 | yy_push_state   ACTION_M4_IFDEF("M4""_YY_NO_PUSH_STATE", ! option_sense); | 
|---|
| 363 | yy_pop_state    ACTION_M4_IFDEF("M4""_YY_NO_POP_STATE", ! option_sense); | 
|---|
| 364 | yy_top_state    ACTION_M4_IFDEF("M4""_YY_NO_TOP_STATE", ! option_sense); | 
|---|
| 365 |  | 
|---|
| 366 | yy_scan_buffer  ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BUFFER", ! option_sense); | 
|---|
| 367 | yy_scan_bytes   ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BYTES", ! option_sense); | 
|---|
| 368 | yy_scan_string  ACTION_M4_IFDEF("M4""_YY_NO_SCAN_STRING", ! option_sense); | 
|---|
| 369 |  | 
|---|
| 370 | yyalloc         ACTION_M4_IFDEF("M4""_YY_NO_FLEX_ALLOC", ! option_sense); | 
|---|
| 371 | yyrealloc       ACTION_M4_IFDEF("M4""_YY_NO_FLEX_REALLOC", ! option_sense); | 
|---|
| 372 | yyfree          ACTION_M4_IFDEF("M4""_YY_NO_FLEX_FREE", ! option_sense); | 
|---|
| 373 |  | 
|---|
| 374 | yyget_debug     ACTION_M4_IFDEF("M4""_YY_NO_GET_DEBUG", ! option_sense); | 
|---|
| 375 | yyset_debug     ACTION_M4_IFDEF("M4""_YY_NO_SET_DEBUG", ! option_sense); | 
|---|
| 376 | yyget_extra     ACTION_M4_IFDEF("M4""_YY_NO_GET_EXTRA", ! option_sense); | 
|---|
| 377 | yyset_extra     ACTION_M4_IFDEF("M4""_YY_NO_SET_EXTRA", ! option_sense); | 
|---|
| 378 | yyget_leng      ACTION_M4_IFDEF("M4""_YY_NO_GET_LENG", ! option_sense); | 
|---|
| 379 | yyget_text      ACTION_M4_IFDEF("M4""_YY_NO_GET_TEXT", ! option_sense); | 
|---|
| 380 | yyget_lineno    ACTION_M4_IFDEF("M4""_YY_NO_GET_LINENO", ! option_sense); | 
|---|
| 381 | yyset_lineno    ACTION_M4_IFDEF("M4""_YY_NO_SET_LINENO", ! option_sense); | 
|---|
| 382 | yyget_in        ACTION_M4_IFDEF("M4""_YY_NO_GET_IN", ! option_sense); | 
|---|
| 383 | yyset_in        ACTION_M4_IFDEF("M4""_YY_NO_SET_IN", ! option_sense); | 
|---|
| 384 | yyget_out       ACTION_M4_IFDEF("M4""_YY_NO_GET_OUT", ! option_sense); | 
|---|
| 385 | yyset_out       ACTION_M4_IFDEF("M4""_YY_NO_SET_OUT", ! option_sense); | 
|---|
| 386 | yyget_lval      ACTION_M4_IFDEF("M4""_YY_NO_GET_LVAL", ! option_sense); | 
|---|
| 387 | yyset_lval      ACTION_M4_IFDEF("M4""_YY_NO_SET_LVAL", ! option_sense); | 
|---|
| 388 | yyget_lloc      ACTION_M4_IFDEF("M4""_YY_NO_GET_LLOC", ! option_sense); | 
|---|
| 389 | yyset_lloc      ACTION_M4_IFDEF("M4""_YY_NO_SET_LLOC", ! option_sense); | 
|---|
| 390 |  | 
|---|
| 391 | outfile         return OPT_OUTFILE; | 
|---|
| 392 | prefix          return OPT_PREFIX; | 
|---|
| 393 | yyclass         return OPT_YYCLASS; | 
|---|
| 394 | header(-file)?      return OPT_HEADER; | 
|---|
| 395 | tables-file         return OPT_TABLES; | 
|---|
| 396 | tables-verify   { | 
|---|
| 397 | tablesverify = option_sense; | 
|---|
| 398 | if(!tablesext && option_sense) | 
|---|
| 399 | tablesext = true; | 
|---|
| 400 | } | 
|---|
| 401 |  | 
|---|
| 402 |  | 
|---|
| 403 | \"[^"\n]*\"     { | 
|---|
| 404 | if(yyleng-1 < MAXLINE) | 
|---|
| 405 | { | 
|---|
| 406 | strcpy( nmstr, yytext + 1 ); | 
|---|
| 407 | } | 
|---|
| 408 | else | 
|---|
| 409 | { | 
|---|
| 410 | synerr( _("Input line too long\n")); | 
|---|
| 411 | FLEX_EXIT(EXIT_FAILURE); | 
|---|
| 412 | } | 
|---|
| 413 | nmstr[strlen( nmstr ) - 1] = '\0'; | 
|---|
| 414 | return NAME; | 
|---|
| 415 | } | 
|---|
| 416 |  | 
|---|
| 417 | (([a-mo-z]|n[a-np-z])[[:alpha:]\-+]*)|. { | 
|---|
| 418 | format_synerr( _( "unrecognized %%option: %s" ), | 
|---|
| 419 | yytext ); | 
|---|
| 420 | BEGIN(RECOVER); | 
|---|
| 421 | } | 
|---|
| 422 | } | 
|---|
| 423 |  | 
|---|
| 424 | <RECOVER>.*{NL}         ++linenum; BEGIN(INITIAL); | 
|---|
| 425 |  | 
|---|
| 426 |  | 
|---|
| 427 | <SECT2PROLOG>{ | 
|---|
| 428 | ^"%{".* ++bracelevel; yyless( 2 );      /* eat only %{ */ | 
|---|
| 429 | ^"%}".* --bracelevel; yyless( 2 );      /* eat only %} */ | 
|---|
| 430 |  | 
|---|
| 431 | ^{WS}.* ACTION_ECHO;    /* indented code in prolog */ | 
|---|
| 432 |  | 
|---|
| 433 | ^{NOT_WS}.*     {       /* non-indented code */ | 
|---|
| 434 | if ( bracelevel <= 0 ) | 
|---|
| 435 | { /* not in %{ ... %} */ | 
|---|
| 436 | yyless( 0 );    /* put it all back */ | 
|---|
| 437 | yy_set_bol( 1 ); | 
|---|
| 438 | mark_prolog(); | 
|---|
| 439 | BEGIN(SECT2); | 
|---|
| 440 | } | 
|---|
| 441 | else | 
|---|
| 442 | ACTION_ECHO; | 
|---|
| 443 | } | 
|---|
| 444 |  | 
|---|
| 445 | .*              ACTION_ECHO; | 
|---|
| 446 | {NL}    ++linenum; ACTION_ECHO; | 
|---|
| 447 |  | 
|---|
| 448 | <<EOF>>         { | 
|---|
| 449 | mark_prolog(); | 
|---|
| 450 | sectnum = 0; | 
|---|
| 451 | yyterminate(); /* to stop the parser */ | 
|---|
| 452 | } | 
|---|
| 453 | } | 
|---|
| 454 |  | 
|---|
| 455 | <SECT2>{ | 
|---|
| 456 | ^{OPTWS}{NL}    ++linenum; /* allow blank lines in section 2 */ | 
|---|
| 457 |  | 
|---|
| 458 | ^{OPTWS}"%{"    { | 
|---|
| 459 | indented_code = false; | 
|---|
| 460 | doing_codeblock = true; | 
|---|
| 461 | bracelevel = 1; | 
|---|
| 462 | BEGIN(PERCENT_BRACE_ACTION); | 
|---|
| 463 | } | 
|---|
| 464 |  | 
|---|
| 465 | ^{OPTWS}"<"     BEGIN(SC); return '<'; | 
|---|
| 466 | ^{OPTWS}"^"     return '^'; | 
|---|
| 467 | \"              BEGIN(QUOTE); return '"'; | 
|---|
| 468 | "{"/[[:digit:]] { | 
|---|
| 469 | BEGIN(NUM); | 
|---|
| 470 | if ( lex_compat || posix_compat ) | 
|---|
| 471 | return BEGIN_REPEAT_POSIX; | 
|---|
| 472 | else | 
|---|
| 473 | return BEGIN_REPEAT_FLEX; | 
|---|
| 474 | } | 
|---|
| 475 | "$"/([[:blank:]]|{NL})  return '$'; | 
|---|
| 476 |  | 
|---|
| 477 | {WS}"%{"                { | 
|---|
| 478 | bracelevel = 1; | 
|---|
| 479 | BEGIN(PERCENT_BRACE_ACTION); | 
|---|
| 480 |  | 
|---|
| 481 | if ( in_rule ) | 
|---|
| 482 | { | 
|---|
| 483 | doing_rule_action = true; | 
|---|
| 484 | in_rule = false; | 
|---|
| 485 | return '\n'; | 
|---|
| 486 | } | 
|---|
| 487 | } | 
|---|
| 488 | {WS}"|".*{NL}   continued_action = true; ++linenum; return '\n'; | 
|---|
| 489 |  | 
|---|
| 490 | ^{WS}"/*"       { | 
|---|
| 491 | yyless( yyleng - 2 );   /* put back '/', '*' */ | 
|---|
| 492 | bracelevel = 0; | 
|---|
| 493 | continued_action = false; | 
|---|
| 494 | BEGIN(ACTION); | 
|---|
| 495 | } | 
|---|
| 496 |  | 
|---|
| 497 | ^{WS}           /* allow indented rules */ | 
|---|
| 498 |  | 
|---|
| 499 | {WS}            { | 
|---|
| 500 | /* This rule is separate from the one below because | 
|---|
| 501 | * otherwise we get variable trailing context, so | 
|---|
| 502 | * we can't build the scanner using -{f,F}. | 
|---|
| 503 | */ | 
|---|
| 504 | bracelevel = 0; | 
|---|
| 505 | continued_action = false; | 
|---|
| 506 | BEGIN(ACTION); | 
|---|
| 507 |  | 
|---|
| 508 | if ( in_rule ) | 
|---|
| 509 | { | 
|---|
| 510 | doing_rule_action = true; | 
|---|
| 511 | in_rule = false; | 
|---|
| 512 | return '\n'; | 
|---|
| 513 | } | 
|---|
| 514 | } | 
|---|
| 515 |  | 
|---|
| 516 | {OPTWS}{NL}     { | 
|---|
| 517 | bracelevel = 0; | 
|---|
| 518 | continued_action = false; | 
|---|
| 519 | BEGIN(ACTION); | 
|---|
| 520 | unput( '\n' );  /* so <ACTION> sees it */ | 
|---|
| 521 |  | 
|---|
| 522 | if ( in_rule ) | 
|---|
| 523 | { | 
|---|
| 524 | doing_rule_action = true; | 
|---|
| 525 | in_rule = false; | 
|---|
| 526 | return '\n'; | 
|---|
| 527 | } | 
|---|
| 528 | } | 
|---|
| 529 |  | 
|---|
| 530 | ^{OPTWS}"<<EOF>>"       | | 
|---|
| 531 | "<<EOF>>"       return EOF_OP; | 
|---|
| 532 |  | 
|---|
| 533 | ^"%%".*         { | 
|---|
| 534 | sectnum = 3; | 
|---|
| 535 | BEGIN(SECT3); | 
|---|
| 536 | outn("/* Begin user sect3 */"); | 
|---|
| 537 | yyterminate(); /* to stop the parser */ | 
|---|
| 538 | } | 
|---|
| 539 |  | 
|---|
| 540 | "["({FIRST_CCL_CHAR}|{CCL_EXPR})({CCL_CHAR}|{CCL_EXPR})*        { | 
|---|
| 541 | int cclval; | 
|---|
| 542 |  | 
|---|
| 543 | if(yyleng < MAXLINE) | 
|---|
| 544 | { | 
|---|
| 545 | strcpy( nmstr, yytext ); | 
|---|
| 546 | } | 
|---|
| 547 | else | 
|---|
| 548 | { | 
|---|
| 549 | synerr( _("Input line too long\n")); | 
|---|
| 550 | FLEX_EXIT(EXIT_FAILURE); | 
|---|
| 551 | } | 
|---|
| 552 |  | 
|---|
| 553 | /* Check to see if we've already encountered this | 
|---|
| 554 | * ccl. | 
|---|
| 555 | */ | 
|---|
| 556 | if ( (cclval = ccllookup( (Char *) nmstr )) != 0 ) | 
|---|
| 557 | { | 
|---|
| 558 | if ( input() != ']' ) | 
|---|
| 559 | synerr( _( "bad character class" ) ); | 
|---|
| 560 |  | 
|---|
| 561 | yylval = cclval; | 
|---|
| 562 | ++cclreuse; | 
|---|
| 563 | return PREVCCL; | 
|---|
| 564 | } | 
|---|
| 565 | else | 
|---|
| 566 | { | 
|---|
| 567 | /* We fudge a bit.  We know that this ccl will | 
|---|
| 568 | * soon be numbered as lastccl + 1 by cclinit. | 
|---|
| 569 | */ | 
|---|
| 570 | cclinstal( (Char *) nmstr, lastccl + 1 ); | 
|---|
| 571 |  | 
|---|
| 572 | /* Push back everything but the leading bracket | 
|---|
| 573 | * so the ccl can be rescanned. | 
|---|
| 574 | */ | 
|---|
| 575 | yyless( 1 ); | 
|---|
| 576 |  | 
|---|
| 577 | BEGIN(FIRSTCCL); | 
|---|
| 578 | return '['; | 
|---|
| 579 | } | 
|---|
| 580 | } | 
|---|
| 581 |  | 
|---|
| 582 | /* Check for :space: at the end of the rule so we don't | 
|---|
| 583 | * wrap the expanded regex in '(' ')' -- breaking trailing | 
|---|
| 584 | * context. | 
|---|
| 585 | */ | 
|---|
| 586 | "{"{NAME}"}"[[:space:]]?         { | 
|---|
| 587 | register Char *nmdefptr; | 
|---|
| 588 | int end_is_ws, end_ch; | 
|---|
| 589 |  | 
|---|
| 590 | end_ch = yytext[yyleng-1]; | 
|---|
| 591 | end_is_ws = end_ch != '}' ? 1 : 0; | 
|---|
| 592 |  | 
|---|
| 593 | if(yyleng-1 < MAXLINE) | 
|---|
| 594 | { | 
|---|
| 595 | strcpy( nmstr, yytext + 1 ); | 
|---|
| 596 | } | 
|---|
| 597 | else | 
|---|
| 598 | { | 
|---|
| 599 | synerr( _("Input line too long\n")); | 
|---|
| 600 | FLEX_EXIT(EXIT_FAILURE); | 
|---|
| 601 | } | 
|---|
| 602 | nmstr[yyleng - 2 - end_is_ws] = '\0';  /* chop trailing brace */ | 
|---|
| 603 |  | 
|---|
| 604 | if ( (nmdefptr = ndlookup( nmstr )) == 0 ) | 
|---|
| 605 | format_synerr( | 
|---|
| 606 | _( "undefined definition {%s}" ), | 
|---|
| 607 | nmstr ); | 
|---|
| 608 |  | 
|---|
| 609 | else | 
|---|
| 610 | { /* push back name surrounded by ()'s */ | 
|---|
| 611 | int len = strlen( (char *) nmdefptr ); | 
|---|
| 612 | if (end_is_ws) | 
|---|
| 613 | unput(end_ch); | 
|---|
| 614 |  | 
|---|
| 615 | if ( lex_compat || nmdefptr[0] == '^' || | 
|---|
| 616 | (len > 0 && nmdefptr[len - 1] == '$') | 
|---|
| 617 | || (end_is_ws && trlcontxt)) | 
|---|
| 618 | { /* don't use ()'s after all */ | 
|---|
| 619 | PUT_BACK_STRING((char *) nmdefptr, 0); | 
|---|
| 620 |  | 
|---|
| 621 | if ( nmdefptr[0] == '^' ) | 
|---|
| 622 | BEGIN(CARETISBOL); | 
|---|
| 623 | } | 
|---|
| 624 |  | 
|---|
| 625 | else | 
|---|
| 626 | { | 
|---|
| 627 | unput(')'); | 
|---|
| 628 | PUT_BACK_STRING((char *) nmdefptr, 0); | 
|---|
| 629 | unput('('); | 
|---|
| 630 | } | 
|---|
| 631 | } | 
|---|
| 632 | } | 
|---|
| 633 |  | 
|---|
| 634 | [/|*+?.(){}]    return (unsigned char) yytext[0]; | 
|---|
| 635 | .               RETURNCHAR; | 
|---|
| 636 | } | 
|---|
| 637 |  | 
|---|
| 638 |  | 
|---|
| 639 | <SC>{ | 
|---|
| 640 | {OPTWS}{NL}{OPTWS}      ++linenum;      /* Allow blank lines & continuations */ | 
|---|
| 641 | [,*]            return (unsigned char) yytext[0]; | 
|---|
| 642 | ">"             BEGIN(SECT2); return '>'; | 
|---|
| 643 | ">"/^           BEGIN(CARETISBOL); return '>'; | 
|---|
| 644 | {SCNAME}        RETURNNAME; | 
|---|
| 645 | .               { | 
|---|
| 646 | format_synerr( _( "bad <start condition>: %s" ), | 
|---|
| 647 | yytext ); | 
|---|
| 648 | } | 
|---|
| 649 | } | 
|---|
| 650 |  | 
|---|
| 651 | <CARETISBOL>"^"         BEGIN(SECT2); return '^'; | 
|---|
| 652 |  | 
|---|
| 653 |  | 
|---|
| 654 | <QUOTE>{ | 
|---|
| 655 | [^"\n]          RETURNCHAR; | 
|---|
| 656 | \"              BEGIN(SECT2); return '"'; | 
|---|
| 657 |  | 
|---|
| 658 | {NL}            { | 
|---|
| 659 | synerr( _( "missing quote" ) ); | 
|---|
| 660 | BEGIN(SECT2); | 
|---|
| 661 | ++linenum; | 
|---|
| 662 | return '"'; | 
|---|
| 663 | } | 
|---|
| 664 | } | 
|---|
| 665 |  | 
|---|
| 666 |  | 
|---|
| 667 | <FIRSTCCL>{ | 
|---|
| 668 | "^"/[^-\]\n]    BEGIN(CCL); return '^'; | 
|---|
| 669 | "^"/("-"|"]")   return '^'; | 
|---|
| 670 | .               BEGIN(CCL); RETURNCHAR; | 
|---|
| 671 | } | 
|---|
| 672 |  | 
|---|
| 673 | <CCL>{ | 
|---|
| 674 | -/[^\]\n]       return '-'; | 
|---|
| 675 | [^\]\n]         RETURNCHAR; | 
|---|
| 676 | "]"             BEGIN(SECT2); return ']'; | 
|---|
| 677 | .|{NL}          { | 
|---|
| 678 | synerr( _( "bad character class" ) ); | 
|---|
| 679 | BEGIN(SECT2); | 
|---|
| 680 | return ']'; | 
|---|
| 681 | } | 
|---|
| 682 | } | 
|---|
| 683 |  | 
|---|
| 684 | <FIRSTCCL,CCL>{ | 
|---|
| 685 | "[:alnum:]"     BEGIN(CCL); return CCE_ALNUM; | 
|---|
| 686 | "[:alpha:]"     BEGIN(CCL); return CCE_ALPHA; | 
|---|
| 687 | "[:blank:]"     BEGIN(CCL); return CCE_BLANK; | 
|---|
| 688 | "[:cntrl:]"     BEGIN(CCL); return CCE_CNTRL; | 
|---|
| 689 | "[:digit:]"     BEGIN(CCL); return CCE_DIGIT; | 
|---|
| 690 | "[:graph:]"     BEGIN(CCL); return CCE_GRAPH; | 
|---|
| 691 | "[:lower:]"     BEGIN(CCL); return CCE_LOWER; | 
|---|
| 692 | "[:print:]"     BEGIN(CCL); return CCE_PRINT; | 
|---|
| 693 | "[:punct:]"     BEGIN(CCL); return CCE_PUNCT; | 
|---|
| 694 | "[:space:]"     BEGIN(CCL); return CCE_SPACE; | 
|---|
| 695 | "[:upper:]"     BEGIN(CCL); return CCE_UPPER; | 
|---|
| 696 | "[:xdigit:]"    BEGIN(CCL); return CCE_XDIGIT; | 
|---|
| 697 | {CCL_EXPR}      { | 
|---|
| 698 | format_synerr( | 
|---|
| 699 | _( "bad character class expression: %s" ), | 
|---|
| 700 | yytext ); | 
|---|
| 701 | BEGIN(CCL); return CCE_ALNUM; | 
|---|
| 702 | } | 
|---|
| 703 | } | 
|---|
| 704 |  | 
|---|
| 705 | <NUM>{ | 
|---|
| 706 | [[:digit:]]+    { | 
|---|
| 707 | yylval = myctoi( yytext ); | 
|---|
| 708 | return NUMBER; | 
|---|
| 709 | } | 
|---|
| 710 |  | 
|---|
| 711 | ","             return ','; | 
|---|
| 712 | "}"             { | 
|---|
| 713 | BEGIN(SECT2); | 
|---|
| 714 | if ( lex_compat || posix_compat ) | 
|---|
| 715 | return END_REPEAT_POSIX; | 
|---|
| 716 | else | 
|---|
| 717 | return END_REPEAT_FLEX; | 
|---|
| 718 | } | 
|---|
| 719 |  | 
|---|
| 720 | .               { | 
|---|
| 721 | synerr( _( "bad character inside {}'s" ) ); | 
|---|
| 722 | BEGIN(SECT2); | 
|---|
| 723 | return '}'; | 
|---|
| 724 | } | 
|---|
| 725 |  | 
|---|
| 726 | {NL}            { | 
|---|
| 727 | synerr( _( "missing }" ) ); | 
|---|
| 728 | BEGIN(SECT2); | 
|---|
| 729 | ++linenum; | 
|---|
| 730 | return '}'; | 
|---|
| 731 | } | 
|---|
| 732 | } | 
|---|
| 733 |  | 
|---|
| 734 |  | 
|---|
| 735 | <PERCENT_BRACE_ACTION>{ | 
|---|
| 736 | {OPTWS}"%}".*           bracelevel = 0; | 
|---|
| 737 |  | 
|---|
| 738 | <ACTION>"/*"            ACTION_ECHO; yy_push_state( COMMENT ); | 
|---|
| 739 |  | 
|---|
| 740 | <CODEBLOCK,ACTION>{ | 
|---|
| 741 | "reject"        { | 
|---|
| 742 | ACTION_ECHO; | 
|---|
| 743 | CHECK_REJECT(yytext); | 
|---|
| 744 | } | 
|---|
| 745 | "yymore"        { | 
|---|
| 746 | ACTION_ECHO; | 
|---|
| 747 | CHECK_YYMORE(yytext); | 
|---|
| 748 | } | 
|---|
| 749 | } | 
|---|
| 750 |  | 
|---|
| 751 | {NAME}|{NOT_NAME}|.     ACTION_ECHO; | 
|---|
| 752 | {NL}            { | 
|---|
| 753 | ++linenum; | 
|---|
| 754 | ACTION_ECHO; | 
|---|
| 755 | if ( bracelevel == 0 || | 
|---|
| 756 | (doing_codeblock && indented_code) ) | 
|---|
| 757 | { | 
|---|
| 758 | if ( doing_rule_action ) | 
|---|
| 759 | add_action( "\tYY_BREAK\n" ); | 
|---|
| 760 |  | 
|---|
| 761 | doing_rule_action = doing_codeblock = false; | 
|---|
| 762 | BEGIN(SECT2); | 
|---|
| 763 | } | 
|---|
| 764 | } | 
|---|
| 765 | } | 
|---|
| 766 |  | 
|---|
| 767 |  | 
|---|
| 768 | /* Reject and YYmore() are checked for above, in PERCENT_BRACE_ACTION */ | 
|---|
| 769 | <ACTION>{ | 
|---|
| 770 | "{"             ACTION_ECHO; ++bracelevel; | 
|---|
| 771 | "}"             ACTION_ECHO; --bracelevel; | 
|---|
| 772 | [^[:alpha:]_{}"'/\n]+   ACTION_ECHO; | 
|---|
| 773 | {NAME}          ACTION_ECHO; | 
|---|
| 774 | "'"([^'\\\n]|\\.)*"'"   ACTION_ECHO; /* character constant */ | 
|---|
| 775 | \"              ACTION_ECHO; BEGIN(ACTION_STRING); | 
|---|
| 776 | {NL}            { | 
|---|
| 777 | ++linenum; | 
|---|
| 778 | ACTION_ECHO; | 
|---|
| 779 | if ( bracelevel == 0 ) | 
|---|
| 780 | { | 
|---|
| 781 | if ( doing_rule_action ) | 
|---|
| 782 | add_action( "\tYY_BREAK\n" ); | 
|---|
| 783 |  | 
|---|
| 784 | doing_rule_action = false; | 
|---|
| 785 | BEGIN(SECT2); | 
|---|
| 786 | } | 
|---|
| 787 | } | 
|---|
| 788 | .               ACTION_ECHO; | 
|---|
| 789 | } | 
|---|
| 790 |  | 
|---|
| 791 | <ACTION_STRING>{ | 
|---|
| 792 | [^"\\\n]+       ACTION_ECHO; | 
|---|
| 793 | \\.             ACTION_ECHO; | 
|---|
| 794 | {NL}            ++linenum; ACTION_ECHO; BEGIN(ACTION); | 
|---|
| 795 | \"              ACTION_ECHO; BEGIN(ACTION); | 
|---|
| 796 | .               ACTION_ECHO; | 
|---|
| 797 | } | 
|---|
| 798 |  | 
|---|
| 799 | <COMMENT,ACTION,ACTION_STRING><<EOF>>   { | 
|---|
| 800 | synerr( _( "EOF encountered inside an action" ) ); | 
|---|
| 801 | yyterminate(); | 
|---|
| 802 | } | 
|---|
| 803 |  | 
|---|
| 804 |  | 
|---|
| 805 | <SECT2,QUOTE,FIRSTCCL,CCL>{ESCSEQ}      { | 
|---|
| 806 | yylval = myesc( (Char *) yytext ); | 
|---|
| 807 |  | 
|---|
| 808 | if ( YY_START == FIRSTCCL ) | 
|---|
| 809 | BEGIN(CCL); | 
|---|
| 810 |  | 
|---|
| 811 | return CHAR; | 
|---|
| 812 | } | 
|---|
| 813 |  | 
|---|
| 814 |  | 
|---|
| 815 | <SECT3>{ | 
|---|
| 816 | .*(\n?)         ECHO; | 
|---|
| 817 | <<EOF>>         sectnum = 0; yyterminate(); | 
|---|
| 818 | } | 
|---|
| 819 |  | 
|---|
| 820 | <*>.|\n                 format_synerr( _( "bad character: %s" ), yytext ); | 
|---|
| 821 |  | 
|---|
| 822 | %% | 
|---|
| 823 |  | 
|---|
| 824 |  | 
|---|
| 825 | int yywrap() | 
|---|
| 826 | { | 
|---|
| 827 | if ( --num_input_files > 0 ) | 
|---|
| 828 | { | 
|---|
| 829 | set_input_file( *++input_files ); | 
|---|
| 830 | return 0; | 
|---|
| 831 | } | 
|---|
| 832 |  | 
|---|
| 833 | else | 
|---|
| 834 | return 1; | 
|---|
| 835 | } | 
|---|
| 836 |  | 
|---|
| 837 |  | 
|---|
| 838 | /* set_input_file - open the given file (if NULL, stdin) for scanning */ | 
|---|
| 839 |  | 
|---|
| 840 | void set_input_file( file ) | 
|---|
| 841 | char *file; | 
|---|
| 842 | { | 
|---|
| 843 | if ( file && strcmp( file, "-" ) ) | 
|---|
| 844 | { | 
|---|
| 845 | infilename = copy_string( file ); | 
|---|
| 846 | yyin = fopen( infilename, "r" ); | 
|---|
| 847 |  | 
|---|
| 848 | if ( yyin == NULL ) | 
|---|
| 849 | lerrsf( _( "can't open %s" ), file ); | 
|---|
| 850 | } | 
|---|
| 851 |  | 
|---|
| 852 | else | 
|---|
| 853 | { | 
|---|
| 854 | yyin = stdin; | 
|---|
| 855 | infilename = copy_string( "<stdin>" ); | 
|---|
| 856 | } | 
|---|
| 857 |  | 
|---|
| 858 | linenum = 1; | 
|---|
| 859 | } | 
|---|
| 860 |  | 
|---|
| 861 |  | 
|---|
| 862 | /* Wrapper routines for accessing the scanner's malloc routines. */ | 
|---|
| 863 |  | 
|---|
| 864 | void *flex_alloc( size ) | 
|---|
| 865 | size_t size; | 
|---|
| 866 | { | 
|---|
| 867 | return (void *) malloc( size ); | 
|---|
| 868 | } | 
|---|
| 869 |  | 
|---|
| 870 | void *flex_realloc( ptr, size ) | 
|---|
| 871 | void *ptr; | 
|---|
| 872 | size_t size; | 
|---|
| 873 | { | 
|---|
| 874 | return (void *) realloc( ptr, size ); | 
|---|
| 875 | } | 
|---|
| 876 |  | 
|---|
| 877 | void flex_free( ptr ) | 
|---|
| 878 | void *ptr; | 
|---|
| 879 | { | 
|---|
| 880 | if ( ptr ) | 
|---|
| 881 | free( ptr ); | 
|---|
| 882 | } | 
|---|