scan-code.c revision 05436638acc7c010349a69c3395f1a57c642dc62
105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 2 "scan-code.c" 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 4 "scan-code.c" 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_INT_ALIGNED short int 605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A lexical scanner generated by flex */ 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-not-reentrant */ 1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_create_buffer code__create_buffer 1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_delete_buffer code__delete_buffer 1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_flex_debug code__flex_debug 1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_init_buffer code__init_buffer 1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_flush_buffer code__flush_buffer 1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_load_buffer_state code__load_buffer_state 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_switch_to_buffer code__switch_to_buffer 2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyin code_in 2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyleng code_leng 2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yylex code_lex 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yylineno code_lineno 2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyout code_out 2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyrestart code_restart 2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yytext code_text 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yywrap code_wrap 2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyalloc code_alloc 2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyrealloc code_realloc 3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyfree code_free 3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define FLEX_SCANNER 3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_FLEX_MAJOR_VERSION 2 3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_FLEX_MINOR_VERSION 5 3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_FLEX_SUBMINOR_VERSION 37 4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if YY_FLEX_SUBMINOR_VERSION > 0 4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define FLEX_BETA 4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* First, we deal with platform-specific or compiler-specific issues. */ 5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* begin standard C headers. */ 5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <stdio.h> 6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <string.h> 6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <errno.h> 6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <stdlib.h> 6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-tables-serialization */ 6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* end standard C headers. */ 6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-or-c++ */ 7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* flex integer type definitions */ 7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef FLEXINT_H 7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define FLEXINT_H 7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ 7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, 8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * if you want the limit (max/min) macros for int types. 8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef __STDC_LIMIT_MACROS 8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define __STDC_LIMIT_MACROS 1 8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <inttypes.h> 8705436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int8_t flex_int8_t; 8805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef uint8_t flex_uint8_t; 8905436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int16_t flex_int16_t; 9005436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef uint16_t flex_uint16_t; 9105436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int32_t flex_int32_t; 9205436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef uint32_t flex_uint32_t; 9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 9405436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef signed char flex_int8_t; 9505436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef short int flex_int16_t; 9605436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int flex_int32_t; 9705436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef unsigned char flex_uint8_t; 9805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef unsigned short int flex_uint16_t; 9905436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef unsigned int flex_uint32_t; 10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Limits of integral types. */ 10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef INT8_MIN 10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INT8_MIN (-128) 10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef INT16_MIN 10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INT16_MIN (-32767-1) 10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef INT32_MIN 10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INT32_MIN (-2147483647-1) 11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef INT8_MAX 11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INT8_MAX (127) 11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef INT16_MAX 11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INT16_MAX (32767) 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef INT32_MAX 11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INT32_MAX (2147483647) 11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef UINT8_MAX 12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define UINT8_MAX (255U) 12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef UINT16_MAX 12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define UINT16_MAX (65535U) 12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef UINT32_MAX 12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define UINT32_MAX (4294967295U) 12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* ! C99 */ 13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* ! FLEXINT_H */ 13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef __cplusplus 14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The "const" storage-class-modifier is valid. */ 14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_USE_CONST 14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else /* ! __cplusplus */ 14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* C99 requires __STDC__ to be defined as 1. */ 14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined (__STDC__) 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_USE_CONST 15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* defined (__STDC__) */ 15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* ! __cplusplus */ 15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef YY_USE_CONST 15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyconst const 15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyconst 15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Returned upon end-of-file. */ 16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_NULL 0 16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Promotes a possibly negative, possibly signed char to an unsigned 16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * integer for use as an array index. If the signed char is negative, 17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * we want to instead treat it as an 8-bit unsigned char, hence the 17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * double cast. 17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-not-reentrant */ 18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Enter a start condition. This macro really ought to take a parameter, 18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * but we do it the disgusting crufty way forced on us by the ()-less 18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * definition of BEGIN. 18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define BEGIN (yy_start) = 1 + 2 * 18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Translate the current start state into a value that can be later handed 19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * to BEGIN to return to the state. The YYSTATE alias is for lex 19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * compatibility. 19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_START (((yy_start) - 1) / 2) 19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYSTATE YY_START 19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Action number for EOF rule of a given start state. */ 19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Special action meaning "start processing a new file". */ 20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_NEW_FILE code_restart(code_in ) 20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_END_OF_BUFFER_CHAR 0 20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Size of default input buffer. */ 20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_BUF_SIZE 20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_BUF_SIZE 16384 20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The state buf must be large enough to hold one state per character in the main buffer. 21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) 21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_TYPEDEF_YY_BUFFER_STATE 21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_TYPEDEF_YY_BUFFER_STATE 21505436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef struct yy_buffer_state *YY_BUFFER_STATE; 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_TYPEDEF_YY_SIZE_T 21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_TYPEDEF_YY_SIZE_T 22005436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef size_t yy_size_t; 22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-not-reentrant */ 22405436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern yy_size_t code_leng; 22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-not-reentrant */ 22905436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern FILE *code_in, *code_out; 23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define EOB_ACT_CONTINUE_SCAN 0 23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define EOB_ACT_END_OF_FILE 1 23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define EOB_ACT_LAST_MATCH 2 23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang #define YY_LESS_LINENO(n) 23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return all but the first "n" matched characters back to the input stream. */ 24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyless(n) \ 24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang do \ 24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Undo effects of setting up code_text. */ \ 24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yyless_macro_arg = (n); \ 24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_LESS_LINENO(yyless_macro_arg);\ 24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang *yy_cp = (yy_hold_char); \ 24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_RESTORE_YY_MORE_OFFSET \ 24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ 24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_DO_BEFORE_ACTION; /* set up code_text again */ \ 25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( 0 ) 25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define unput(c) yyunput( c, (yytext_ptr) ) 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_STRUCT_YY_BUFFER_STATE 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_STRUCT_YY_BUFFER_STATE 25705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct yy_buffer_state 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang FILE *yy_input_file; 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *yy_ch_buf; /* input buffer */ 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *yy_buf_pos; /* current position in input buffer */ 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Size of input buffer in bytes, not including room for EOB 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * characters. 27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t yy_buf_size; 27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Number of characters read into yy_ch_buf, not including EOB 27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * characters. 27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t yy_n_chars; 27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Whether we "own" the buffer - i.e., we know we created it, 28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * and can realloc() it to grow it, and should free() it to 28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * delete it. 28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_is_our_buffer; 28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Whether this is an "interactive" input source; if so, and 28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * if we're using stdio for input, then we want to use getc() 28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * instead of fread(), to make sure we stop fetching input after 28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * each newline. 28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_is_interactive; 29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Whether we're considered to be at the beginning of a line. 29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * If so, '^' rules will be active on the next match, otherwise 29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * not. 29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_at_bol; 29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_bs_lineno; /**< The line count. */ 29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_bs_column; /**< The column count. */ 30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Whether to try to fill the input buffer when we reach the 30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * end of it. 30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_fill_buffer; 30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_buffer_status; 30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_BUFFER_NEW 0 30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_BUFFER_NORMAL 1 31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* When an EOF's been seen but there's still some text to process 31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * then we mark the buffer as YY_EOF_PENDING, to indicate that we 31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * shouldn't try reading from the input source any more. We might 31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * still have a bunch of tokens to match, though, because of 31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * possible backing-up. 31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * When we actually see the EOF, we change the status to "new" 31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * (via code_restart()), so that the user can continue scanning by 31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * just pointing code_in at a new input file. 31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_BUFFER_EOF_PENDING 2 32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* !YY_STRUCT_YY_BUFFER_STATE */ 32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Standard (non-C++) definition */ 32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-not-reentrant */ 32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Stack of input buffers. */ 33105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ 33205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ 33305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ 33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* We provide macros for accessing buffer states in case in the 34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * future we want to put the buffer states in a more general 34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * "scanner state". 34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Returns the top of the stack, or NULL. 34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ 34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ 34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang : NULL) 34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Same as previous macro, but useful when we know that the buffer stack is not 35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * NULL or when we need an lvalue. For internal use only. 35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] 35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Standard (non-C++) definition */ 35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-not-reentrant */ 35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* yy_hold_char holds the character lost when code_text is formed. */ 36005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char yy_hold_char; 36105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ 36205436638acc7c010349a69c3395f1a57c642dc62Ying Wangyy_size_t code_leng; 36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Points to current character in buffer. */ 36505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char *yy_c_buf_p = (char *) 0; 36605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_init = 0; /* whether we need to initialize */ 36705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_start = 0; /* start state number */ 36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Flag which is used to allow code_wrap()'s to do buffer switches 37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * instead of setting up a fresh code_in. A bit of a hack ... 37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 37205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_did_buffer_switch_on_eof; 37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 37705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_restart (FILE *input_file ); 37805436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code__switch_to_buffer (YY_BUFFER_STATE new_buffer ); 37905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__create_buffer (FILE *file,int size ); 38005436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code__delete_buffer (YY_BUFFER_STATE b ); 38105436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code__flush_buffer (YY_BUFFER_STATE b ); 38205436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_push_buffer_state (YY_BUFFER_STATE new_buffer ); 38305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_pop_buffer_state (void ); 38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 38505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void code_ensure_buffer_stack (void ); 38605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void code__load_buffer_state (void ); 38705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void code__init_buffer (YY_BUFFER_STATE b,FILE *file ); 38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_FLUSH_BUFFER code__flush_buffer(YY_CURRENT_BUFFER ) 39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__scan_buffer (char *base,yy_size_t size ); 39205436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__scan_string (yyconst char *yy_str ); 39305436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__scan_bytes (yyconst char *bytes,yy_size_t len ); 39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid *code_alloc (yy_size_t ); 39805436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid *code_realloc (void *,yy_size_t ); 39905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_free (void * ); 40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_new_buffer code__create_buffer 40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_set_interactive(is_interactive) \ 40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! YY_CURRENT_BUFFER ){ \ 40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_ensure_buffer_stack (); \ 40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = \ 40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__create_buffer(code_in,YY_BUF_SIZE ); \ 40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ 41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yy_set_bol(at_bol) \ 41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! YY_CURRENT_BUFFER ){\ 41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_ensure_buffer_stack (); \ 41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = \ 41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__create_buffer(code_in,YY_BUF_SIZE ); \ 41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ 42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) 42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [1.0] code_text/code_in/code_out/yy_state_type/code_lineno etc. def's & init go here */ 42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Begin user sect3 */ 42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define code_wrap() 1 42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_SKIP_YYWRAP 43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define FLEX_DEBUG 43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43305436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef unsigned char YY_CHAR; 43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43505436638acc7c010349a69c3395f1a57c642dc62Ying WangFILE *code_in = (FILE *) 0, *code_out = (FILE *) 0; 43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43705436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int yy_state_type; 43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43905436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern int code_lineno; 44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44105436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_lineno = 1; 44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44305436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern char *code_text; 44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yytext_ptr code_text 44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Standard (non-C++) definition */ 44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yy_state_type yy_get_previous_state (void ); 44905436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yy_state_type yy_try_NUL_trans (yy_state_type current_state ); 45005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_get_next_buffer (void ); 45105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void yy_fatal_error (yyconst char msg[] ); 45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Done after the current pattern has been matched and before the 45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * corresponding action - sets up code_text. 45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_DO_BEFORE_ACTION \ 45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yytext_ptr) = yy_bp; \ 46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [2.0] code to fiddle code_text and code_leng for yymore() goes here \ */\ 46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_leng = (size_t) (yy_cp - yy_bp); \ 46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_hold_char) = *yy_cp; \ 46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *yy_cp = '\0'; \ 46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [3.0] code to copy yytext_ptr to code_text[] goes here, if %array \ */\ 46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = yy_cp; 46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ 46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_NUM_RULES 29 46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_END_OF_BUFFER 30 47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This struct is not used in this scanner, 47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang but its presence is necessary. */ 47205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct yy_trans_info 47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang flex_int32_t yy_verify; 47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang flex_int32_t yy_nxt; 47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 47705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int16_t yy_accept[101] = 47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0, 0, 0, 0, 3, 3, 4, 4, 4, 4, 48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19, 19, 0, 0, 30, 28, 27, 28, 2, 28, 48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6, 28, 5, 24, 21, 20, 20, 8, 18, 11, 48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7, 24, 15, 11, 23, 23, 12, 24, 16, 17, 48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8, 11, 7, 28, 11, 12, 1, 0, 0, 3, 48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4, 4, 4, 4, 13, 0, 13, 13, 0, 0, 48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9, 10, 0, 14, 0, 14, 14, 0, 23, 23, 48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0, 19, 25, 0, 26, 0, 0, 0, 0, 0, 48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0, 0, 13, 0, 0, 0, 0, 14, 0, 23, 48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0, 0, 0, 0, 0, 23, 0, 23, 22, 0 48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 49205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int32_t yy_ec[256] = 49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4, 2, 5, 1, 1, 1, 1, 1, 1, 1, 49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 2, 1, 6, 7, 8, 1, 1, 9, 1, 49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 10, 1, 1, 11, 12, 13, 14, 14, 14, 49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14, 14, 14, 14, 14, 14, 14, 1, 15, 16, 50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 17, 1, 18, 19, 20, 20, 20, 20, 21, 50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20, 20, 22, 20, 20, 23, 20, 20, 20, 20, 50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20, 20, 20, 20, 20, 20, 20, 20, 24, 20, 50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 25, 26, 27, 1, 20, 1, 20, 20, 20, 20, 50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20, 20, 28, 1, 29, 1, 1, 1, 1, 1, 50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 1, 1, 1 52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 52405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int32_t yy_meta[31] = 52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4, 5, 1, 6, 1, 1, 2, 1, 7, 7, 52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7, 7, 7, 7, 3, 1, 8, 1, 1, 2 52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 53105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int16_t yy_base[113] = 53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0, 1, 21, 41, 66, 0, 4, 8, 12, 14, 53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93, 0, 118, 0, 242, 243, 243, 7, 243, 0, 53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 243, 39, 243, 243, 243, 243, 243, 243, 243, 138, 53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 243, 34, 243, 42, 0, 217, 243, 33, 243, 243, 53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 243, 8, 243, 44, 232, 243, 243, 59, 69, 213, 53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 243, 73, 212, 76, 243, 223, 0, 222, 0, 0, 53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 243, 243, 79, 243, 205, 0, 202, 0, 0, 188, 54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 83, 175, 243, 0, 243, 86, 19, 126, 130, 135, 54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 138, 122, 0, 151, 140, 162, 143, 0, 128, 132, 54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 168, 130, 128, 108, 37, 36, 47, 29, 0, 243, 54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 172, 180, 186, 188, 192, 199, 203, 207, 210, 217, 54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 222, 227 54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 54805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int16_t yy_def[113] = 54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 101, 101, 101, 101, 101, 5, 5, 5, 5, 5, 55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 11, 101, 13, 100, 100, 100, 100, 100, 100, 55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 102, 100, 100, 100, 100, 100, 100, 100, 100, 55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 103, 104, 104, 100, 100, 100, 100, 55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 105, 100, 106, 107, 55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 108, 100, 109, 104, 104, 55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 110, 100, 100, 100, 100, 100, 100, 55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 102, 105, 106, 111, 100, 100, 108, 112, 104, 55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 110, 30, 111, 112, 104, 100, 104, 104, 0, 56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100 56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 56505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int16_t yy_nxt[274] = 56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 49, 50, 49, 100, 100, 16, 17, 17, 21, 56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16, 100, 100, 21, 16, 73, 16, 17, 17, 47, 56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 23, 100, 23, 74, 17, 17, 17, 17, 17, 22, 57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18, 47, 48, 22, 71, 72, 71, 22, 17, 22, 57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 52, 53, 52, 61, 48, 17, 62, 17, 17, 64, 57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18, 99, 65, 61, 73, 67, 62, 98, 17, 63, 57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 76, 77, 76, 64, 54, 17, 68, 17, 19, 63, 57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 49, 50, 49, 17, 79, 53, 79, 81, 82, 81, 57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 86, 87, 86, 17, 71, 72, 71, 76, 77, 76, 57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17, 20, 17, 24, 25, 26, 24, 27, 28, 29, 57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30, 31, 24, 24, 24, 32, 24, 33, 24, 24, 57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 34, 35, 35, 35, 35, 35, 36, 37, 38, 37, 58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39, 40, 24, 41, 100, 42, 43, 49, 50, 49, 58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44, 79, 53, 79, 55, 45, 79, 53, 79, 81, 58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82, 81, 46, 100, 46, 55, 97, 54, 56, 57, 58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 96, 58, 61, 59, 64, 62, 57, 57, 57, 57, 58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 57, 57, 60, 86, 87, 86, 55, 93, 63, 71, 58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 72, 71, 16, 16, 16, 16, 16, 16, 16, 16, 58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 51, 51, 51, 51, 51, 51, 51, 51, 66, 66, 58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66, 66, 66, 69, 69, 83, 83, 83, 83, 84, 58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91, 84, 84, 84, 84, 84, 84, 85, 90, 85, 59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 88, 88, 88, 88, 89, 67, 89, 92, 67, 92, 59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92, 92, 92, 92, 92, 94, 94, 94, 94, 94, 59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 95, 95, 95, 95, 95, 58, 58, 80, 78, 75, 59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 70, 100, 15, 100, 100, 100, 100, 100, 100, 100, 59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100 59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 59905436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int16_t yy_chk[274] = 60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0, 20, 20, 20, 0, 0, 7, 1, 2, 7, 60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8, 0, 0, 8, 9, 42, 10, 1, 2, 18, 60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9, 0, 10, 42, 1, 2, 1, 2, 3, 7, 60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3, 77, 18, 8, 38, 38, 38, 9, 3, 10, 60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22, 22, 22, 32, 77, 3, 32, 3, 4, 34, 60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4, 98, 34, 44, 97, 34, 44, 96, 4, 32, 60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 48, 48, 48, 95, 22, 4, 34, 4, 5, 44, 60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 49, 49, 49, 5, 52, 52, 52, 54, 54, 54, 60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 63, 63, 63, 5, 71, 71, 71, 76, 76, 76, 61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5, 5, 5, 11, 11, 11, 11, 11, 11, 11, 61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 11, 11, 11, 13, 82, 13, 13, 78, 78, 78, 61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13, 79, 79, 79, 94, 13, 80, 80, 80, 81, 61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 81, 81, 13, 93, 13, 30, 92, 82, 30, 30, 61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 90, 30, 87, 30, 89, 87, 30, 30, 30, 30, 61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30, 30, 30, 86, 86, 86, 85, 84, 87, 91, 61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91, 91, 101, 101, 101, 101, 101, 101, 101, 101, 62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 103, 103, 103, 104, 104, 105, 105, 105, 105, 106, 62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 72, 106, 106, 106, 106, 106, 106, 107, 70, 107, 62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 108, 108, 108, 108, 109, 67, 109, 110, 65, 110, 62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 112, 112, 112, 112, 112, 58, 56, 53, 50, 45, 62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36, 15, 100, 100, 100, 100, 100, 100, 100, 100, 62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100, 100, 100 63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 63305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yy_state_type yy_last_accepting_state; 63405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char *yy_last_accepting_cpos; 63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 63605436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern int code__flex_debug; 63705436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code__flex_debug = 1; 63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 63905436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic yyconst flex_int16_t yy_rule_linenum[29] = 64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 0, 64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 132, 142, 143, 153, 158, 163, 169, 174, 179, 183, 64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 187, 192, 200, 207, 215, 216, 217, 244, 246, 247, 64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 248, 252, 260, 262, 267, 275, 285, 288 64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } ; 64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The intent behind this definition is that it'll catch 64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * any uses of REJECT which flex missed. 64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define REJECT reject_used_but_not_detected 65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yymore() yymore_used_but_not_detected 65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_MORE_ADJ 0 65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_RESTORE_YY_MORE_OFFSET 65305436638acc7c010349a69c3395f1a57c642dc62Ying Wangchar *code_text; 65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 1 "scan-code.l" 65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Bison Action Scanner -*- C -*- 65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 2006-2012 Free Software Foundation, Inc. 65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang This file is part of Bison, the GNU Compiler Compiler. 66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is free software: you can redistribute it and/or modify 66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang it under the terms of the GNU General Public License as published by 66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang the Free Software Foundation, either version 3 of the License, or 66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang (at your option) any later version. 66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is distributed in the hope that it will be useful, 66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang but WITHOUT ANY WARRANTY; without even the implied warranty of 66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang GNU General Public License for more details. 67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang You should have received a copy of the GNU General Public License 67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang along with this program. If not, see <http://www.gnu.org/licenses/>. */ 67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_NO_INPUT 1 67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 24 "scan-code.l" 67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Work around a bug in flex 2.5.31. See Debian bug 333231 67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */ 67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#undef code_wrap 67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define code_wrap() 1 67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define FLEX_PREFIX(Id) code_ ## Id 68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "flex-scanner.h" 68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "complain.h" 68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "reader.h" 68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "getargs.h" 68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "scan-code.h" 68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "symlist.h" 68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <c-ctype.h> 69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <get-errno.h> 69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <quote.h> 69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The current calling start condition: SC_RULE_ACTION or 69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang SC_SYMBOL_ACTION. */ 69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_DECL static char *code_lex (code_props *self, int sc_context) 69605436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_DECL; 69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_USER_ACTION location_compute (loc, &loc->end, code_text, code_leng); 69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 70005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char *fetch_type_name (char *cp, char const **type_name, 70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang location dollar_loc); 70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 70305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void handle_action_dollar (symbol_list *rule, char *cp, 70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang location dollar_loc); 70505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void handle_action_at (symbol_list *rule, char *cp, location at_loc); 70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A string to be pushed to obstack after dollar/at has been handled. */ 70805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char *ref_tail_fields; 70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic location the_location; 71105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic location *loc = &the_location; 71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A string representing the most recent translation. */ 71405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char *last_string; 71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* True if an untyped $$ or $n was seen. */ 71705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic bool untyped_var_seen; 71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* C and C++ comments in code. */ 72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Strings and characters in code. */ 72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Whether in a rule or symbol action. Specifies the translation 72405436638acc7c010349a69c3395f1a57c642dc62Ying Wangof $ and @. */ 72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* POSIX says that a tag must be both an id and a C union member, but 72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang historically almost any character is allowed in a tag. We disallow 72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang NUL and newline, as this simplifies our implementation. */ 72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Zero or more instances of backslash-newline. Following GCC, allow 73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang white space between the backslash and the newline. */ 73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* C style identifier. Must start with letter. Will be used for 73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang named symbol references. Shall be kept synchronized with 73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang scan-gram.l "letter" and "id". */ 73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 735 "scan-code.c" 73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INITIAL 0 73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define SC_COMMENT 1 73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define SC_LINE_COMMENT 2 73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define SC_STRING 3 74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define SC_CHARACTER 4 74105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define SC_RULE_ACTION 5 74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define SC_SYMBOL_ACTION 6 74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_NO_UNISTD_H 74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Special case for "unistd.h", since it is non-ANSI. We include it way 74605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * down here because we want the user's section 1 to have been scanned first. 74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * The user has a chance to override it with an option. 74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <unistd.h> 75105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 75205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_EXTRA_TYPE 75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_EXTRA_TYPE void * 75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Reentrant structure and macros (non-C++). */ 76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 76305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 76405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_init_globals (void ); 76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif End reentrant structures and macros. */ 77005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 77105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Accessor methods to globals. 77205436638acc7c010349a69c3395f1a57c642dc62Ying Wang These are made visible to non-reentrant scanners for convenience. */ 77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 77405436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_lex_destroy (void ); 77505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 77605436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_get_debug (void ); 77705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 77805436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_debug (int debug_flag ); 77905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 78005436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_EXTRA_TYPE code_get_extra (void ); 78105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 78205436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_extra (YY_EXTRA_TYPE user_defined ); 78305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 78405436638acc7c010349a69c3395f1a57c642dc62Ying WangFILE *code_get_in (void ); 78505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 78605436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_in (FILE * in_str ); 78705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 78805436638acc7c010349a69c3395f1a57c642dc62Ying WangFILE *code_get_out (void ); 78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79005436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_out (FILE * out_str ); 79105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79205436638acc7c010349a69c3395f1a57c642dc62Ying Wangyy_size_t code_get_leng (void ); 79305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79405436638acc7c010349a69c3395f1a57c642dc62Ying Wangchar *code_get_text (void ); 79505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79605436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_get_lineno (void ); 79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79805436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_lineno (int line_number ); 79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-bison-bridge */ 80105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 80205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Macros after this point can all be overridden by user definitions in 80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * section 1. 80505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 80705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_SKIP_YYWRAP 80805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef __cplusplus 80905436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern "C" int code_wrap (void ); 81005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 81105436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern int code_wrap (void ); 81205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 81305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef yytext_ptr 82205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void yy_flex_strncpy (char *,yyconst char *,int ); 82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef YY_NEED_STRLEN 82605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_flex_strlen (yyconst char * ); 82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_NO_INPUT 83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Standard (non-C++) definition */ 83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef __cplusplus 83405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yyinput (void ); 83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 83605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int input (void ); 83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Amount of stuff to slurp up with each read. */ 84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_READ_BUF_SIZE 84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_READ_BUF_SIZE 8192 85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy whatever the last rule matched to the standard output. */ 85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef ECHO 85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Standard (non-C++) definition */ 85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This used to be an fputs(), but since the string might contain NUL's, 85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * we now use fwrite(). 85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define ECHO do { if (fwrite( code_text, code_leng, 1, code_out )) {} } while (0) 85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only C++ definition */ 86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * is returned in "result". 86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_INPUT 86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_INPUT(buf,result,max_size) \ 86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ 87005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 87105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 87205436638acc7c010349a69c3395f1a57c642dc62Ying Wang int c = '*'; \ 87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t n; \ 87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang for ( n = 0; n < max_size && \ 87505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (c = getc( code_in )) != EOF && c != '\n'; ++n ) \ 87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang buf[n] = (char) c; \ 87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( c == '\n' ) \ 87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang buf[n++] = (char) c; \ 87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( c == EOF && ferror( code_in ) ) \ 88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "input in flex scanner failed" ); \ 88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang result = n; \ 88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else \ 88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang errno=0; \ 88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( (result = fread(buf, 1, max_size, code_in))==0 && ferror(code_in)) \ 88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if( errno != EINTR) \ 88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "input in flex scanner failed" ); \ 89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; \ 89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang errno=0; \ 89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang clearerr(code_in); \ 89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang }\ 89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\ 89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only C++ definition \ */\ 89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* No semi-colon after return; correct usage is to write "yyterminate();" - 90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * we don't want an extra ';' after the "return" because that will cause 90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * some compilers to complain about unreachable statements. 90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef yyterminate 90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyterminate() return YY_NULL 90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Number of entries by which start-condition stack grows. */ 91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_START_STACK_INCR 91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_START_STACK_INCR 25 91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Report a fatal error. */ 91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_FATAL_ERROR 91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-tables-serialization structures and prototypes */ 92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 92705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %tables-yydmap generated elements */ 93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* end tables serialization structures and prototypes */ 93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Default declaration of generated scanner - a define so the user can 93905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * easily add parameters. 94005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 94105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_DECL 94205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_DECL_IS_OURS 1 94305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only Standard (non-C++) definition */ 94405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 94505436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern int code_lex (void); 94605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 94705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_DECL int code_lex (void) 94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only C++ definition */ 95005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 95105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* !YY_DECL */ 95205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 95305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Code executed at the beginning of each rule, after code_text and code_leng 95405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * have been set up. 95505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_USER_ACTION 95705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_USER_ACTION 95805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 95905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 96005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Code executed at the end of each rule. */ 96105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_BREAK 96205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_BREAK break; 96305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 96405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 96505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [6.0] YY_RULE_SETUP definition goes here */ 96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_RULE_SETUP \ 96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_USER_ACTION 96805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 96905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 97005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 97105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The main scanner function which does all the work. 97205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 97305436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_DECL 97405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 97505436638acc7c010349a69c3395f1a57c642dc62Ying Wang register yy_state_type yy_current_state; 97605436638acc7c010349a69c3395f1a57c642dc62Ying Wang register char *yy_cp, *yy_bp; 97705436638acc7c010349a69c3395f1a57c642dc62Ying Wang register int yy_act; 97805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 97905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [7.0] user's declarations go here */ 98005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 94 "scan-code.l" 98105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 98305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 98405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Nesting level of the current code in braces. */ 98505436638acc7c010349a69c3395f1a57c642dc62Ying Wang int braces_level = 0; 98605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 98705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Whether a semicolon is probably needed. 98805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 98905436638acc7c010349a69c3395f1a57c642dc62Ying Wang The heuristic is that a semicolon is not needed after '{', '}', 99005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ';', or a C preprocessor directive, and that whitespaces and 99105436638acc7c010349a69c3395f1a57c642dc62Ying Wang comments do not affect this flag. Note that '{' does not need a 99205436638acc7c010349a69c3395f1a57c642dc62Ying Wang semicolon because of '{}'. A semicolon may be needed before a 99305436638acc7c010349a69c3395f1a57c642dc62Ying Wang cpp directive, but don't bother. 99405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 99505436638acc7c010349a69c3395f1a57c642dc62Ying Wang While it is maintained in several start-conditions (factoring 99605436638acc7c010349a69c3395f1a57c642dc62Ying Wang opportunities), it is meaningful only for SC_RULE_ACTION. */ 99705436638acc7c010349a69c3395f1a57c642dc62Ying Wang bool need_semicolon = false; 99805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 99905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Whether in a C preprocessor directive. Don't use a start condition 100005436638acc7c010349a69c3395f1a57c642dc62Ying Wang for this because, at the end of strings and comments, we still need 100105436638acc7c010349a69c3395f1a57c642dc62Ying Wang to know whether we're in a directive. */ 100205436638acc7c010349a69c3395f1a57c642dc62Ying Wang bool in_cpp = false; 100305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 100405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* This scanner is special: it is invoked only once, henceforth 100505436638acc7c010349a69c3395f1a57c642dc62Ying Wang is expected to return only once. This initialization is 100605436638acc7c010349a69c3395f1a57c642dc62Ying Wang therefore done once per action to translate. */ 100705436638acc7c010349a69c3395f1a57c642dc62Ying Wang aver (sc_context == SC_SYMBOL_ACTION 100805436638acc7c010349a69c3395f1a57c642dc62Ying Wang || sc_context == SC_RULE_ACTION 100905436638acc7c010349a69c3395f1a57c642dc62Ying Wang || sc_context == INITIAL); 101005436638acc7c010349a69c3395f1a57c642dc62Ying Wang BEGIN sc_context; 101105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 101205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 101305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*------------------------------------------------------------. 101405436638acc7c010349a69c3395f1a57c642dc62Ying Wang | Scanning a C comment. The initial '/ *' is already eaten. | 101505436638acc7c010349a69c3395f1a57c642dc62Ying Wang `------------------------------------------------------------*/ 101605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 101705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 1018 "scan-code.c" 101805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 101905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( !(yy_init) ) 102005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 102105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_init) = 1; 102205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 102305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef YY_USER_INIT 102405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_USER_INIT; 102505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 102605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 102705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! (yy_start) ) 102805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_start) = 1; /* first start state */ 102905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 103005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! code_in ) 103105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 103205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_in = stdin; 103305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 103405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 103505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 103605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 103705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! code_out ) 103805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 103905436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_out = stdout; 104005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 104105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 104205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 104305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 104405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! YY_CURRENT_BUFFER ) { 104505436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_ensure_buffer_stack (); 104605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = 104705436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__create_buffer(code_in,YY_BUF_SIZE ); 104805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 104905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 105005436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__load_buffer_state( ); 105105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 105205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 105305436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( 1 ) /* loops until end-of-file is reached */ 105405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 105505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [8.0] yymore()-related code goes here */ 105605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = (yy_c_buf_p); 105705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 105805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Support of code_text. */ 105905436638acc7c010349a69c3395f1a57c642dc62Ying Wang *yy_cp = (yy_hold_char); 106005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 106105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* yy_bp points to the position in yy_ch_buf of the start of 106205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * the current run. 106305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 106405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_bp = yy_cp; 106505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 106605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [9.0] code to set up and find next match goes here */ 106705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (yy_start); 106805436638acc7c010349a69c3395f1a57c642dc62Ying Wangyy_match: 106905436638acc7c010349a69c3395f1a57c642dc62Ying Wang do 107005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 107105436638acc7c010349a69c3395f1a57c642dc62Ying Wang register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 107205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_accept[yy_current_state] ) 107305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 107405436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_last_accepting_state) = yy_current_state; 107505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_last_accepting_cpos) = yy_cp; 107605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 107705436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 107805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 107905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (int) yy_def[yy_current_state]; 108005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_current_state >= 101 ) 108105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_c = yy_meta[(unsigned int) yy_c]; 108205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 108305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 108405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++yy_cp; 108505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 108605436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( yy_current_state != 100 ); 108705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = (yy_last_accepting_cpos); 108805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (yy_last_accepting_state); 108905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 109005436638acc7c010349a69c3395f1a57c642dc62Ying Wangyy_find_action: 109105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [10.0] code to find the action number goes here */ 109205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_act = yy_accept[yy_current_state]; 109305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 109405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_DO_BEFORE_ACTION; 109505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 109605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [11.0] code for code_lineno update goes here */ 109705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 109805436638acc7c010349a69c3395f1a57c642dc62Ying Wangdo_action: /* This label is used only to access EOF actions. */ 109905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 110005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [12.0] debug code goes here */ 110105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( code__flex_debug ) 110205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 110305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_act == 0 ) 110405436638acc7c010349a69c3395f1a57c642dc62Ying Wang fprintf( stderr, "--scanner backing up\n" ); 110505436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if ( yy_act < 29 ) 110605436638acc7c010349a69c3395f1a57c642dc62Ying Wang fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", 110705436638acc7c010349a69c3395f1a57c642dc62Ying Wang (long)yy_rule_linenum[yy_act], code_text ); 110805436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if ( yy_act == 29 ) 110905436638acc7c010349a69c3395f1a57c642dc62Ying Wang fprintf( stderr, "--accepting default rule (\"%s\")\n", 111005436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_text ); 111105436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if ( yy_act == 30 ) 111205436638acc7c010349a69c3395f1a57c642dc62Ying Wang fprintf( stderr, "--(end of buffer or a NUL)\n" ); 111305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 111405436638acc7c010349a69c3395f1a57c642dc62Ying Wang fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); 111505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 111605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 111705436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch ( yy_act ) 111805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { /* beginning of action switch */ 111905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [13.0] actions go here */ 112005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 0: /* must back up */ 112105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* undo the effects of YY_DO_BEFORE_ACTION */ 112205436638acc7c010349a69c3395f1a57c642dc62Ying Wang *yy_cp = (yy_hold_char); 112305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = (yy_last_accepting_cpos); 112405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (yy_last_accepting_state); 112505436638acc7c010349a69c3395f1a57c642dc62Ying Wang goto yy_find_action; 112605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 112705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 1: 112805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 1 can match eol */ 112905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 113005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 132 "scan-code.l" 113105436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; BEGIN sc_context; 113205436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 113305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 113405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*--------------------------------------------------------------. 113505436638acc7c010349a69c3395f1a57c642dc62Ying Wang | Scanning a line comment. The initial '//' is already eaten. | 113605436638acc7c010349a69c3395f1a57c642dc62Ying Wang `--------------------------------------------------------------*/ 113705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 113805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 113905436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 2: 114005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 2 can match eol */ 114105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 114205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 142 "scan-code.l" 114305436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; BEGIN sc_context; 114405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 114505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 3: 114605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 3 can match eol */ 114705436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 114805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 143 "scan-code.l" 114905436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; 115005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 115105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 115205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*--------------------------------------------. 115305436638acc7c010349a69c3395f1a57c642dc62Ying Wang | Scanning user-code characters and strings. | 115405436638acc7c010349a69c3395f1a57c642dc62Ying Wang `--------------------------------------------*/ 115505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 115605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 115705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 4: 115805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 4 can match eol */ 115905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 116005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 153 "scan-code.l" 116105436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; 116205436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 116305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 116405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 116505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 116605436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 5: 116705436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 116805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 158 "scan-code.l" 116905436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; BEGIN sc_context; 117005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 117105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 117205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 117305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 117405436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 6: 117505436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 117605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 163 "scan-code.l" 117705436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; BEGIN sc_context; 117805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 117905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 118005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 118105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 118205436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 7: 118305436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 118405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 169 "scan-code.l" 118505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 118605436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_GROW; 118705436638acc7c010349a69c3395f1a57c642dc62Ying Wang BEGIN SC_CHARACTER; 118805436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = true; 118905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 119005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 119105436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 8: 119205436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 119305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 174 "scan-code.l" 119405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 119505436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_GROW; 119605436638acc7c010349a69c3395f1a57c642dc62Ying Wang BEGIN SC_STRING; 119705436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = true; 119805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 119905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 120005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 9: 120105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 9 can match eol */ 120205436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 120305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 179 "scan-code.l" 120405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 120505436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_GROW; 120605436638acc7c010349a69c3395f1a57c642dc62Ying Wang BEGIN SC_COMMENT; 120705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 120805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 120905436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 10: 121005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 10 can match eol */ 121105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 121205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 183 "scan-code.l" 121305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 121405436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_GROW; 121505436638acc7c010349a69c3395f1a57c642dc62Ying Wang BEGIN SC_LINE_COMMENT; 121605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 121705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 121805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 11: 121905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 122005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 187 "scan-code.l" 122105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 122205436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at (*loc, _("stray '%s'"), code_text); 122305436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_escape (&obstack_for_string, code_text); 122405436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = true; 122505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 122605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 122705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 12: 122805436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 122905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 192 "scan-code.l" 123005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 123105436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_escape (&obstack_for_string, code_text); 123205436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = true; 123305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 123405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 123505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 123605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 123705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 123805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 13: 123905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 124005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 200 "scan-code.l" 124105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 124205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ref_tail_fields = NULL; 124305436638acc7c010349a69c3395f1a57c642dc62Ying Wang handle_action_dollar (self->rule, code_text, *loc); 124405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (ref_tail_fields) 124505436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, ref_tail_fields); 124605436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = true; 124705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 124805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 124905436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 14: 125005436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 125105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 207 "scan-code.l" 125205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 125305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ref_tail_fields = NULL; 125405436638acc7c010349a69c3395f1a57c642dc62Ying Wang handle_action_at (self->rule, code_text, *loc); 125505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (ref_tail_fields) 125605436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, ref_tail_fields); 125705436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = true; 125805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 125905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 126005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 15: 126105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 126205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 215 "scan-code.l" 126305436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; need_semicolon = false; 126405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 126505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 16: 126605436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 126705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 216 "scan-code.l" 126805436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; ++braces_level; need_semicolon = false; 126905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 127005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 17: 127105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 127205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 217 "scan-code.l" 127305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 127405436638acc7c010349a69c3395f1a57c642dc62Ying Wang bool outer_brace = --braces_level == 0; 127505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 127605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* As an undocumented Bison extension, append ';' before the last 127705436638acc7c010349a69c3395f1a57c642dc62Ying Wang brace in braced code, so that the user code can omit trailing 127805436638acc7c010349a69c3395f1a57c642dc62Ying Wang ';'. But do not append ';' if emulating Yacc, since Yacc does 127905436638acc7c010349a69c3395f1a57c642dc62Ying Wang not append one. This is deprecated since release 2.4.1. */ 128005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (outer_brace && !yacc_flag && language_prio == default_prio 128105436638acc7c010349a69c3395f1a57c642dc62Ying Wang && skeleton_prio == default_prio && need_semicolon && ! in_cpp) 128205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 128305436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned int indent = 0; 128405436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at_indent (*loc, &indent, 128505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("a ';' might be needed at the end of action code")); 128605436638acc7c010349a69c3395f1a57c642dc62Ying Wang indent += SUB_INDENT; 128705436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at_indent (*loc, &indent, 128805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("future versions of Bison will not add the ';'")); 128905436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_1grow (&obstack_for_string, ';'); 129005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 129105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 129205436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_GROW; 129305436638acc7c010349a69c3395f1a57c642dc62Ying Wang need_semicolon = false; 129405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 129505436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 129605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Preprocessing directives should only be recognized at the beginning 129705436638acc7c010349a69c3395f1a57c642dc62Ying Wang of lines, allowing whitespace including comments, but in C/C++, 129805436638acc7c010349a69c3395f1a57c642dc62Ying Wang '#' can only be the start of preprocessor directives or within 129905436638acc7c010349a69c3395f1a57c642dc62Ying Wang '#define' directives anyway, so don't bother with begin of line. */ 130005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 18: 130105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 130205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 244 "scan-code.l" 130305436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; in_cpp = true; 130405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 130505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 19: 130605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 19 can match eol */ 130705436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 130805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 246 "scan-code.l" 130905436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; 131005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 131105436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 20: 131205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 20 can match eol */ 131305436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 131405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 247 "scan-code.l" 131505436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; if (in_cpp) in_cpp = need_semicolon = false; 131605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 131705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 21: 131805436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 131905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 248 "scan-code.l" 132005436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; 132105436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 132205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* YYFAIL is undocumented and was formally deprecated in Bison 132305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2.4.2. */ 132405436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 22: 132505436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 132605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 252 "scan-code.l" 132705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 132805436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_GROW; need_semicolon = true; 132905436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at (*loc, _("use of YYFAIL, which is deprecated and will be" 133005436638acc7c010349a69c3395f1a57c642dc62Ying Wang " removed")); 133105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 133205436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 133305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The sole purpose of this is to make sure identifiers that merely 133405436638acc7c010349a69c3395f1a57c642dc62Ying Wang contain YYFAIL don't produce the above warning. */ 133505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 23: 133605436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 133705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 260 "scan-code.l" 133805436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; need_semicolon = true; 133905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 134005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 24: 134105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 134205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 262 "scan-code.l" 134305436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; need_semicolon = true; 134405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 134505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 134605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 134705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 134805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 25: 134905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 135005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 267 "scan-code.l" 135105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 135205436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *type_name = NULL; 135305436638acc7c010349a69c3395f1a57c642dc62Ying Wang fetch_type_name (code_text + 1, &type_name, *loc)[-1] = 0; 135405436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar("); 135505436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_quote (&obstack_for_string, type_name); 135605436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, ")["); 135705436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->is_value_used = true; 135805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 135905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 136005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 26: 136105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 136205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 275 "scan-code.l" 136305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 136405436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, "]b4_at_dollar["); 136505436638acc7c010349a69c3395f1a57c642dc62Ying Wang locations_flag = true; 136605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 136705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 136805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 136905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 137005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 137105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Escape M4 quoting characters in C code. */ 137205436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 27: 137305436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 137405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 285 "scan-code.l" 137505436638acc7c010349a69c3395f1a57c642dc62Ying Wangobstack_escape (&obstack_for_string, code_text); 137605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 137705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* By default, grow the string obstack with the input. */ 137805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 28: 137905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* rule 28 can match eol */ 138005436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 138105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 288 "scan-code.l" 138205436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_GROW; 138305436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 138405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* End of processing. */ 138505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(INITIAL): 138605436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(SC_COMMENT): 138705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(SC_LINE_COMMENT): 138805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(SC_STRING): 138905436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(SC_CHARACTER): 139005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(SC_RULE_ACTION): 139105436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase YY_STATE_EOF(SC_SYMBOL_ACTION): 139205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 291 "scan-code.l" 139305436638acc7c010349a69c3395f1a57c642dc62Ying WangSTRING_FINISH; return last_string; 139405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 139505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 139605436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase 29: 139705436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_RULE_SETUP 139805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 294 "scan-code.l" 139905436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_FATAL_ERROR( "flex scanner jammed" ); 140005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BREAK 140105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 1402 "scan-code.c" 140205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 140305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YY_END_OF_BUFFER: 140405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 140505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Amount of text matched not including the EOB char. */ 140605436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; 140705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 140805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Undo the effects of YY_DO_BEFORE_ACTION. */ 140905436638acc7c010349a69c3395f1a57c642dc62Ying Wang *yy_cp = (yy_hold_char); 141005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_RESTORE_YY_MORE_OFFSET 141105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 141205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 141305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 141405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* We're scanning a new file or input source. It's 141505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * possible that this happened because the user 141605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * just pointed code_in at a new source and called 141705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code_lex(). If so, then we have to assure 141805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * consistency between YY_CURRENT_BUFFER and our 141905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * globals. Here is the right place to do so, because 142005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * this is the first action (other than possibly a 142105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * back-up) that will match for the new input source. 142205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 142305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 142405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_input_file = code_in; 142505436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 142605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 142705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 142805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Note that here we test for yy_c_buf_p "<=" to the position 142905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * of the first EOB in the buffer, since yy_c_buf_p will 143005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * already have been incremented past the NUL character 143105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * (since all states make transitions on EOB to the 143205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * end-of-buffer state). Contrast this with the test 143305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * in input(). 143405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 143505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 143605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { /* This was really a NUL. */ 143705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_state_type yy_next_state; 143805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 143905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; 144005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 144105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_get_previous_state( ); 144205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 144305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Okay, we're now positioned to make the NUL 144405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * transition. We couldn't have 144505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * yy_get_previous_state() go ahead and do it 144605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * for us because it doesn't know how to deal 144705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * with the possibility of jamming (and we don't 144805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * want to build jamming into it because then it 144905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * will run more slowly). 145005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 145105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 145205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_next_state = yy_try_NUL_trans( yy_current_state ); 145305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 145405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_bp = (yytext_ptr) + YY_MORE_ADJ; 145505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 145605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_next_state ) 145705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 145805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Consume the NUL. */ 145905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = ++(yy_c_buf_p); 146005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_next_state; 146105436638acc7c010349a69c3395f1a57c642dc62Ying Wang goto yy_match; 146205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 146305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 146405436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 146505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 146605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ 146705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = (yy_last_accepting_cpos); 146805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (yy_last_accepting_state); 146905436638acc7c010349a69c3395f1a57c642dc62Ying Wang goto yy_find_action; 147005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 147105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 147205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 147305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else switch ( yy_get_next_buffer( ) ) 147405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 147505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case EOB_ACT_END_OF_FILE: 147605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 147705436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_did_buffer_switch_on_eof) = 0; 147805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 147905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( code_wrap( ) ) 148005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 148105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Note: because we've taken care in 148205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * yy_get_next_buffer() to have set up 148305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code_text, we can now set up 148405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * yy_c_buf_p so that if some total 148505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * hoser (like flex itself) wants to 148605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * call the scanner after we return the 148705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * YY_NULL, it'll still work - another 148805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * YY_NULL will get returned. 148905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 149005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; 149105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 149205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_act = YY_STATE_EOF(YY_START); 149305436638acc7c010349a69c3395f1a57c642dc62Ying Wang goto do_action; 149405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 149505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 149605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 149705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 149805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! (yy_did_buffer_switch_on_eof) ) 149905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_NEW_FILE; 150005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 150105436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 150205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 150305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 150405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case EOB_ACT_CONTINUE_SCAN: 150505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = 150605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yytext_ptr) + yy_amount_of_matched_text; 150705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 150805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_get_previous_state( ); 150905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 151005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = (yy_c_buf_p); 151105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_bp = (yytext_ptr) + YY_MORE_ADJ; 151205436638acc7c010349a69c3395f1a57c642dc62Ying Wang goto yy_match; 151305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 151405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case EOB_ACT_LAST_MATCH: 151505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = 151605436638acc7c010349a69c3395f1a57c642dc62Ying Wang &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; 151705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 151805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_get_previous_state( ); 151905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 152005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_cp = (yy_c_buf_p); 152105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_bp = (yytext_ptr) + YY_MORE_ADJ; 152205436638acc7c010349a69c3395f1a57c642dc62Ying Wang goto yy_find_action; 152305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 152405436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 152505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 152605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 152705436638acc7c010349a69c3395f1a57c642dc62Ying Wang default: 152805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( 152905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "fatal flex scanner internal error--no action found" ); 153005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } /* end of action switch */ 153105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } /* end of scanning one token */ 153205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} /* end of code_lex */ 153305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 153405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 153505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 153605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 153705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 153805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 153905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 154005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 154105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 154205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* yy_get_next_buffer - try to read in a new buffer 154305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 154405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Returns a code representing an action: 154505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * EOB_ACT_LAST_MATCH - 154605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 154705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * EOB_ACT_END_OF_FILE - end of file 154805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 154905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 155005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_get_next_buffer (void) 155105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 155205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 155305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 155405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 155505436638acc7c010349a69c3395f1a57c642dc62Ying Wang register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 155605436638acc7c010349a69c3395f1a57c642dc62Ying Wang register char *source = (yytext_ptr); 155705436638acc7c010349a69c3395f1a57c642dc62Ying Wang register int number_to_move, i; 155805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int ret_val; 155905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 156005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) 156105436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( 156205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "fatal flex scanner internal error--end of buffer missed" ); 156305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 156405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 156505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { /* Don't try to fill the buffer, so this is an EOF. */ 156605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) 156705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 156805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* We matched a single character, the EOB, so 156905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * treat this as a final EOF. 157005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 157105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return EOB_ACT_END_OF_FILE; 157205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 157305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 157405436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 157505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 157605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* We matched some text prior to the EOB, first 157705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * process it. 157805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 157905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return EOB_ACT_LAST_MATCH; 158005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 158105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 158205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 158305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Try to read more data. */ 158405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 158505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* First move last chars to start of buffer. */ 158605436638acc7c010349a69c3395f1a57c642dc62Ying Wang number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; 158705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 158805436638acc7c010349a69c3395f1a57c642dc62Ying Wang for ( i = 0; i < number_to_move; ++i ) 158905436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(dest++) = *(source++); 159005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 159105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 159205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* don't do the read, it's not guaranteed to return an EOF, 159305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * just force an EOF 159405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 159505436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; 159605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 159705436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 159805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 159905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t num_to_read = 160005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 160105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 160205436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( num_to_read <= 0 ) 160305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { /* Not enough room in the buffer - grow it. */ 160405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 160505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* just a shorter name for the current buffer */ 160605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; 160705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 160805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yy_c_buf_p_offset = 160905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int) ((yy_c_buf_p) - b->yy_ch_buf); 161005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 161105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( b->yy_is_our_buffer ) 161205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 161305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t new_size = b->yy_buf_size * 2; 161405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 161505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( new_size <= 0 ) 161605436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buf_size += b->yy_buf_size / 8; 161705436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 161805436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buf_size *= 2; 161905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 162005436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_ch_buf = (char *) 162105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Include room in for 2 EOB chars. */ 162205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); 162305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 162405436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 162505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Can't grow it, we don't own it. */ 162605436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_ch_buf = 0; 162705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 162805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b->yy_ch_buf ) 162905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( 163005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "fatal error - scanner input buffer overflow" ); 163105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 163205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; 163305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 163405436638acc7c010349a69c3395f1a57c642dc62Ying Wang num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - 163505436638acc7c010349a69c3395f1a57c642dc62Ying Wang number_to_move - 1; 163605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 163705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 163805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 163905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( num_to_read > YY_READ_BUF_SIZE ) 164005436638acc7c010349a69c3395f1a57c642dc62Ying Wang num_to_read = YY_READ_BUF_SIZE; 164105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 164205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Read in more data. */ 164305436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 164405436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_n_chars), num_to_read ); 164505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 164605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 164705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 164805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 164905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( (yy_n_chars) == 0 ) 165005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 165105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( number_to_move == YY_MORE_ADJ ) 165205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 165305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ret_val = EOB_ACT_END_OF_FILE; 165405436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_restart(code_in ); 165505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 165605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 165705436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 165805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 165905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ret_val = EOB_ACT_LAST_MATCH; 166005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 166105436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BUFFER_EOF_PENDING; 166205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 166305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 166405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 166505436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 166605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ret_val = EOB_ACT_CONTINUE_SCAN; 166705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 166805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { 166905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Extend the array by 50%, plus the number we really need. */ 167005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); 167105436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) code_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); 167205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 167305436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); 167405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 167505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 167605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_n_chars) += number_to_move; 167705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; 167805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; 167905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 168005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 168105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 168205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return ret_val; 168305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 168405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 168505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* yy_get_previous_state - get the state just before the EOB char was reached */ 168605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 168705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 168805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %not-for-header */ 168905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 169005436638acc7c010349a69c3395f1a57c642dc62Ying Wang static yy_state_type yy_get_previous_state (void) 169105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 169205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 169305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 169405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 169505436638acc7c010349a69c3395f1a57c642dc62Ying Wang register yy_state_type yy_current_state; 169605436638acc7c010349a69c3395f1a57c642dc62Ying Wang register char *yy_cp; 169705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 169805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [15.0] code to get the start state into yy_current_state goes here */ 169905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (yy_start); 170005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 170105436638acc7c010349a69c3395f1a57c642dc62Ying Wang for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) 170205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 170305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [16.0] code to find the next state goes here */ 170405436638acc7c010349a69c3395f1a57c642dc62Ying Wang register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 30); 170505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_accept[yy_current_state] ) 170605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 170705436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_last_accepting_state) = yy_current_state; 170805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_last_accepting_cpos) = yy_cp; 170905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 171005436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 171105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 171205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (int) yy_def[yy_current_state]; 171305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_current_state >= 101 ) 171405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_c = yy_meta[(unsigned int) yy_c]; 171505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 171605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 171705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 171805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 171905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yy_current_state; 172005436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 172105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 172205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* yy_try_NUL_trans - try to make a transition on the NUL character 172305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 172405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * synopsis 172505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * next_state = yy_try_NUL_trans( current_state ); 172605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 172705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 172805436638acc7c010349a69c3395f1a57c642dc62Ying Wang static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) 172905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 173005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 173105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 173205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 173305436638acc7c010349a69c3395f1a57c642dc62Ying Wang register int yy_is_jam; 173405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ 173505436638acc7c010349a69c3395f1a57c642dc62Ying Wang register char *yy_cp = (yy_c_buf_p); 173605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 173705436638acc7c010349a69c3395f1a57c642dc62Ying Wang register YY_CHAR yy_c = 30; 173805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_accept[yy_current_state] ) 173905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 174005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_last_accepting_state) = yy_current_state; 174105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_last_accepting_cpos) = yy_cp; 174205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 174305436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 174405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 174505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = (int) yy_def[yy_current_state]; 174605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( yy_current_state >= 101 ) 174705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_c = yy_meta[(unsigned int) yy_c]; 174805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 174905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 175005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_is_jam = (yy_current_state == 100); 175105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 175205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yy_is_jam ? 0 : yy_current_state; 175305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 175405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 175505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 175605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 175705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 175805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 175905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 176005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_NO_INPUT 176105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef __cplusplus 176205436638acc7c010349a69c3395f1a57c642dc62Ying Wang static int yyinput (void) 176305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 176405436638acc7c010349a69c3395f1a57c642dc62Ying Wang static int input (void) 176505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 176605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 176705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 176805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 176905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 177005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 177105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int c; 177205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 177305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(yy_c_buf_p) = (yy_hold_char); 177405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 177505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) 177605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 177705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* yy_c_buf_p now points to the character we want to return. 177805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * If this occurs *before* the EOB characters, then it's a 177905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * valid NUL; if not, then we've hit the end of the buffer. 178005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 178105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 178205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* This was really a NUL. */ 178305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(yy_c_buf_p) = '\0'; 178405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 178505436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 178605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { /* need more input */ 178705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); 178805436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++(yy_c_buf_p); 178905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 179005436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch ( yy_get_next_buffer( ) ) 179105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 179205436638acc7c010349a69c3395f1a57c642dc62Ying Wang case EOB_ACT_LAST_MATCH: 179305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* This happens because yy_g_n_b() 179405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * sees that we've accumulated a 179505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * token and flags that we need to 179605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * try matching the token before 179705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * proceeding. But for input(), 179805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * there's no matching to consider. 179905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * So convert the EOB_ACT_LAST_MATCH 180005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * to EOB_ACT_END_OF_FILE. 180105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 180205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 180305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Reset buffer status. */ 180405436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_restart(code_in ); 180505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 180605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*FALLTHROUGH*/ 180705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 180805436638acc7c010349a69c3395f1a57c642dc62Ying Wang case EOB_ACT_END_OF_FILE: 180905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 181005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( code_wrap( ) ) 181105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return EOF; 181205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 181305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! (yy_did_buffer_switch_on_eof) ) 181405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_NEW_FILE; 181505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef __cplusplus 181605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yyinput(); 181705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 181805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return input(); 181905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 182005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 182105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 182205436638acc7c010349a69c3395f1a57c642dc62Ying Wang case EOB_ACT_CONTINUE_SCAN: 182305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = (yytext_ptr) + offset; 182405436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 182505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 182605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 182705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 182805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 182905436638acc7c010349a69c3395f1a57c642dc62Ying Wang c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ 183005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(yy_c_buf_p) = '\0'; /* preserve code_text */ 183105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_hold_char) = *++(yy_c_buf_p); 183205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 183305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %% [19.0] update BOL and code_lineno */ 183405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 183505436638acc7c010349a69c3395f1a57c642dc62Ying Wang return c; 183605436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 183705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 183805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* ifndef YY_NO_INPUT */ 183905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 184005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 184105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Immediately switch to a different input stream. 184205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param input_file A readable stream. 184305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 184405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @note This function does not reset the start condition to @c INITIAL . 184505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 184605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 184705436638acc7c010349a69c3395f1a57c642dc62Ying Wang void code_restart (FILE * input_file ) 184805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 184905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 185005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 185105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 185205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 185305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! YY_CURRENT_BUFFER ){ 185405436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_ensure_buffer_stack (); 185505436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = 185605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__create_buffer(code_in,YY_BUF_SIZE ); 185705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 185805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 185905436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__init_buffer(YY_CURRENT_BUFFER,input_file ); 186005436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__load_buffer_state( ); 186105436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 186205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 186305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Switch to a different input buffer. 186405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param new_buffer The new input buffer. 186505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 186605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 186705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 186805436638acc7c010349a69c3395f1a57c642dc62Ying Wang void code__switch_to_buffer (YY_BUFFER_STATE new_buffer ) 186905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 187005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 187105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 187205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 187305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 187405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* TODO. We should be able to replace this entire function body 187505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * with 187605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code_pop_buffer_state(); 187705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code_push_buffer_state(new_buffer); 187805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 187905436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_ensure_buffer_stack (); 188005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER == new_buffer ) 188105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 188205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 188305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER ) 188405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 188505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Flush out information for old buffer. */ 188605436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(yy_c_buf_p) = (yy_hold_char); 188705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 188805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 188905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 189005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 189105436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = new_buffer; 189205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__load_buffer_state( ); 189305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 189405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* We don't actually know whether we did this switch during 189505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * EOF (code_wrap()) processing, but the only time this flag 189605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * is looked at is after code_wrap() is called, so it's safe 189705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * to go ahead and always set it. 189805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 189905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_did_buffer_switch_on_eof) = 1; 190005436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 190105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 190205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 190305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void code__load_buffer_state (void) 190405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 190505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 190605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 190705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 190805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 190905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 191005436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 191105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_hold_char) = *(yy_c_buf_p); 191205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 191305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 191405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Allocate and initialize an input buffer state. 191505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param file A readable stream. 191605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. 191705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 191805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @return the allocated buffer state. 191905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 192005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 192105436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BUFFER_STATE code__create_buffer (FILE * file, int size ) 192205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 192305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 192405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 192505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 192605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BUFFER_STATE b; 192705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 192805436638acc7c010349a69c3395f1a57c642dc62Ying Wang b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state ) ); 192905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b ) 193005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" ); 193105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 193205436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buf_size = size; 193305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 193405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* yy_ch_buf has to be 2 characters longer than the size given because 193505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * we need to put in 2 end-of-buffer characters. 193605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 193705436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_ch_buf = (char *) code_alloc(b->yy_buf_size + 2 ); 193805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b->yy_ch_buf ) 193905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" ); 194005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 194105436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_is_our_buffer = 1; 194205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 194305436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__init_buffer(b,file ); 194405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 194505436638acc7c010349a69c3395f1a57c642dc62Ying Wang return b; 194605436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 194705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 194805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Destroy the buffer. 194905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param b a buffer created with code__create_buffer() 195005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 195105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 195205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 195305436638acc7c010349a69c3395f1a57c642dc62Ying Wang void code__delete_buffer (YY_BUFFER_STATE b ) 195405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 195505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 195605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 195705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 195805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 195905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b ) 196005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 196105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 196205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 196305436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 196405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 196505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( b->yy_is_our_buffer ) 196605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_free((void *) b->yy_ch_buf ); 196705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 196805436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_free((void *) b ); 196905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 197005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 197105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Initializes or reinitializes a buffer. 197205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * This function is sometimes called more than once on the same buffer, 197305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * such as during a code_restart() or at EOF. 197405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 197505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 197605436638acc7c010349a69c3395f1a57c642dc62Ying Wang static void code__init_buffer (YY_BUFFER_STATE b, FILE * file ) 197705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 197805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 197905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 198005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 198105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 198205436638acc7c010349a69c3395f1a57c642dc62Ying Wang int oerrno = errno; 198305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 198405436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__flush_buffer(b ); 198505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 198605436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_input_file = file; 198705436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_fill_buffer = 1; 198805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 198905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* If b is the current buffer, then code__init_buffer was _probably_ 199005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * called from code_restart() or through yy_get_next_buffer. 199105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * In that case, we don't want to reset the lineno or column. 199205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 199305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (b != YY_CURRENT_BUFFER){ 199405436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_bs_lineno = 1; 199505436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_bs_column = 0; 199605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 199705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 199805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 199905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 200005436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_is_interactive = 0; 200105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 200205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 200305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 200405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 200505436638acc7c010349a69c3395f1a57c642dc62Ying Wang errno = oerrno; 200605436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 200705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 200805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Discard all buffered characters. On the next scan, YY_INPUT will be called. 200905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. 201005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 201105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 201205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 201305436638acc7c010349a69c3395f1a57c642dc62Ying Wang void code__flush_buffer (YY_BUFFER_STATE b ) 201405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 201505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 201605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 201705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 201805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b ) 201905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 202005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 202105436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_n_chars = 0; 202205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 202305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* We always need two end-of-buffer characters. The first causes 202405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * a transition to the end-of-buffer state. The second causes 202505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * a jam in that state. 202605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 202705436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 202805436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 202905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 203005436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buf_pos = &b->yy_ch_buf[0]; 203105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 203205436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_at_bol = 1; 203305436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buffer_status = YY_BUFFER_NEW; 203405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 203505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( b == YY_CURRENT_BUFFER ) 203605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__load_buffer_state( ); 203705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 203805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 203905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-or-c++ */ 204005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Pushes the new state onto the stack. The new state becomes 204105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * the current state. This function will allocate the stack 204205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * if necessary. 204305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param new_buffer The new state. 204405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 204505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 204605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 204705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_push_buffer_state (YY_BUFFER_STATE new_buffer ) 204805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 204905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 205005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 205105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 205205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (new_buffer == NULL) 205305436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 205405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 205505436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_ensure_buffer_stack(); 205605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 205705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* This block is copied from code__switch_to_buffer. */ 205805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( YY_CURRENT_BUFFER ) 205905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 206005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Flush out information for old buffer. */ 206105436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(yy_c_buf_p) = (yy_hold_char); 206205436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 206305436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 206405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 206505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 206605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Only push if top exists. Otherwise, replace top. */ 206705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (YY_CURRENT_BUFFER) 206805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack_top)++; 206905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = new_buffer; 207005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 207105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* copied from code__switch_to_buffer. */ 207205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__load_buffer_state( ); 207305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_did_buffer_switch_on_eof) = 1; 207405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 207505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 207605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 207705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-or-c++ */ 207805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Removes and deletes the top of the stack, if present. 207905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * The next element becomes the new top. 208005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 208105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 208205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 208305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_pop_buffer_state (void) 208405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 208505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 208605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 208705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 208805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!YY_CURRENT_BUFFER) 208905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 209005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 209105436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__delete_buffer(YY_CURRENT_BUFFER ); 209205436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = NULL; 209305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ((yy_buffer_stack_top) > 0) 209405436638acc7c010349a69c3395f1a57c642dc62Ying Wang --(yy_buffer_stack_top); 209505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 209605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (YY_CURRENT_BUFFER) { 209705436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__load_buffer_state( ); 209805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_did_buffer_switch_on_eof) = 1; 209905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 210005436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 210105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 210205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 210305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-or-c++ */ 210405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Allocates the stack if it does not exist. 210505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Guarantees space for at least one push. 210605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 210705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 210805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void code_ensure_buffer_stack (void) 210905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 211005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 211105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 211205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 211305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t num_to_alloc; 211405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 211505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!(yy_buffer_stack)) { 211605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 211705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* First allocation is just for 2 elements, since we don't know if this 211805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * scanner will even need a stack. We use 2 instead of 1 to avoid an 211905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * immediate realloc on the next call. 212005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 212105436638acc7c010349a69c3395f1a57c642dc62Ying Wang num_to_alloc = 1; 212205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack) = (struct yy_buffer_state**)code_alloc 212305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (num_to_alloc * sizeof(struct yy_buffer_state*) 212405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ); 212505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! (yy_buffer_stack) ) 212605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in code_ensure_buffer_stack()" ); 212705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 212805436638acc7c010349a69c3395f1a57c642dc62Ying Wang memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 212905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 213005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack_max) = num_to_alloc; 213105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack_top) = 0; 213205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 213305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 213405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 213505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ 213605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 213705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Increase the buffer to prepare for a possible push. */ 213805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int grow_size = 8 /* arbitrary grow size */; 213905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 214005436638acc7c010349a69c3395f1a57c642dc62Ying Wang num_to_alloc = (yy_buffer_stack_max) + grow_size; 214105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack) = (struct yy_buffer_state**)code_realloc 214205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ((yy_buffer_stack), 214305436638acc7c010349a69c3395f1a57c642dc62Ying Wang num_to_alloc * sizeof(struct yy_buffer_state*) 214405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ); 214505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! (yy_buffer_stack) ) 214605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in code_ensure_buffer_stack()" ); 214705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 214805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* zero only the new slots.*/ 214905436638acc7c010349a69c3395f1a57c642dc62Ying Wang memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); 215005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack_max) = num_to_alloc; 215105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 215205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 215305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 215405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 215505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 215605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Setup the input buffer state to scan directly from a user-specified character buffer. 215705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param base the character buffer 215805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param size the size in bytes of the character buffer 215905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 216005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @return the newly allocated buffer state object. 216105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 216205436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__scan_buffer (char * base, yy_size_t size ) 216305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 216405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BUFFER_STATE b; 216505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 216605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( size < 2 || 216705436638acc7c010349a69c3395f1a57c642dc62Ying Wang base[size-2] != YY_END_OF_BUFFER_CHAR || 216805436638acc7c010349a69c3395f1a57c642dc62Ying Wang base[size-1] != YY_END_OF_BUFFER_CHAR ) 216905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* They forgot to leave room for the EOB's. */ 217005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return 0; 217105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 217205436638acc7c010349a69c3395f1a57c642dc62Ying Wang b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state ) ); 217305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b ) 217405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in code__scan_buffer()" ); 217505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 217605436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 217705436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buf_pos = b->yy_ch_buf = base; 217805436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_is_our_buffer = 0; 217905436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_input_file = 0; 218005436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_n_chars = b->yy_buf_size; 218105436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_is_interactive = 0; 218205436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_at_bol = 1; 218305436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_fill_buffer = 0; 218405436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_buffer_status = YY_BUFFER_NEW; 218505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 218605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__switch_to_buffer(b ); 218705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 218805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return b; 218905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 219005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 219105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 219205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 219305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Setup the input buffer state to scan a string. The next call to code_lex() will 219405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * scan from a @e copy of @a str. 219505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param yystr a NUL-terminated string to scan 219605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 219705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @return the newly allocated buffer state object. 219805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @note If you want to scan bytes that may contain NUL values, then use 219905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code__scan_bytes() instead. 220005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 220105436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__scan_string (yyconst char * yystr ) 220205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 220305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 220405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code__scan_bytes(yystr,strlen(yystr) ); 220505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 220605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 220705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 220805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 220905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Setup the input buffer state to scan the given bytes. The next call to code_lex() will 221005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * scan from a @e copy of @a bytes. 221105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param yybytes the byte buffer to scan 221205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. 221305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 221405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @return the newly allocated buffer state object. 221505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 221605436638acc7c010349a69c3395f1a57c642dc62Ying WangYY_BUFFER_STATE code__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) 221705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 221805436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_BUFFER_STATE b; 221905436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *buf; 222005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_size_t n; 222105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int i; 222205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 222305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Get memory for full buffer, including space for trailing EOB's. */ 222405436638acc7c010349a69c3395f1a57c642dc62Ying Wang n = _yybytes_len + 2; 222505436638acc7c010349a69c3395f1a57c642dc62Ying Wang buf = (char *) code_alloc(n ); 222605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! buf ) 222705436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "out of dynamic memory in code__scan_bytes()" ); 222805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 222905436638acc7c010349a69c3395f1a57c642dc62Ying Wang for ( i = 0; i < _yybytes_len; ++i ) 223005436638acc7c010349a69c3395f1a57c642dc62Ying Wang buf[i] = yybytes[i]; 223105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 223205436638acc7c010349a69c3395f1a57c642dc62Ying Wang buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 223305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 223405436638acc7c010349a69c3395f1a57c642dc62Ying Wang b = code__scan_buffer(buf,n ); 223505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ( ! b ) 223605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_FATAL_ERROR( "bad buffer in code__scan_bytes()" ); 223705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 223805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* It's okay to grow etc. this buffer, and we should throw it 223905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * away when we're done. 224005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 224105436638acc7c010349a69c3395f1a57c642dc62Ying Wang b->yy_is_our_buffer = 1; 224205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 224305436638acc7c010349a69c3395f1a57c642dc62Ying Wang return b; 224405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 224505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 224605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 224705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_EXIT_FAILURE 224805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YY_EXIT_FAILURE 2 224905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 225005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 225105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 225205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void yy_fatal_error (yyconst char* msg ) 225305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 225405436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void) fprintf( stderr, "%s\n", msg ); 225505436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit( YY_EXIT_FAILURE ); 225605436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 225705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 225805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c++-only */ 225905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 226005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 226105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Redefine yyless() so it works in section 3 code. */ 226205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 226305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#undef yyless 226405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyless(n) \ 226505436638acc7c010349a69c3395f1a57c642dc62Ying Wang do \ 226605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { \ 226705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Undo effects of setting up code_text. */ \ 226805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yyless_macro_arg = (n); \ 226905436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_LESS_LINENO(yyless_macro_arg);\ 227005436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_text[code_leng] = (yy_hold_char); \ 227105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = code_text + yyless_macro_arg; \ 227205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_hold_char) = *(yy_c_buf_p); \ 227305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *(yy_c_buf_p) = '\0'; \ 227405436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_leng = yyless_macro_arg; \ 227505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } \ 227605436638acc7c010349a69c3395f1a57c642dc62Ying Wang while ( 0 ) 227705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 227805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Accessor methods (get/set functions) to struct members. */ 227905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 228005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 228105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 228205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 228305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 228405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the current line number. 228505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 228605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 228705436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_get_lineno (void) 228805436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 228905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 229005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code_lineno; 229105436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 229205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 229305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the input stream. 229405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 229505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 229605436638acc7c010349a69c3395f1a57c642dc62Ying WangFILE *code_get_in (void) 229705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 229805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code_in; 229905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 230005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 230105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the output stream. 230205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 230305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 230405436638acc7c010349a69c3395f1a57c642dc62Ying WangFILE *code_get_out (void) 230505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 230605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code_out; 230705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 230805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 230905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the length of the current token. 231005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 231105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 231205436638acc7c010349a69c3395f1a57c642dc62Ying Wangyy_size_t code_get_leng (void) 231305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 231405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code_leng; 231505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 231605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 231705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the current token. 231805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 231905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 232005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 232105436638acc7c010349a69c3395f1a57c642dc62Ying Wangchar *code_get_text (void) 232205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 232305436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code_text; 232405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 232505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 232605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 232705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 232805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 232905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the current line number. 233005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param line_number 233105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 233205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 233305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_lineno (int line_number ) 233405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 233505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 233605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_lineno = line_number; 233705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 233805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 233905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the input stream. This does not discard the current 234005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * input buffer. 234105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @param in_str A readable stream. 234205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 234305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @see code__switch_to_buffer 234405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 234505436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_in (FILE * in_str ) 234605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 234705436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_in = in_str ; 234805436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 234905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 235005436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_out (FILE * out_str ) 235105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 235205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_out = out_str ; 235305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 235405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 235505436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_get_debug (void) 235605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 235705436638acc7c010349a69c3395f1a57c642dc62Ying Wang return code__flex_debug; 235805436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 235905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 236005436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_set_debug (int bdebug ) 236105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 236205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__flex_debug = bdebug ; 236305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 236405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 236505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 236605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 236705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 236805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-bison-bridge */ 236905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 237005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif if-c-only */ 237105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 237205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only */ 237305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_init_globals (void) 237405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 237505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Initialization is the same as for the non-reentrant scanner. 237605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * This function is called from code_lex_destroy(), so don't allocate here. 237705436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 237805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 237905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack) = 0; 238005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack_top) = 0; 238105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack_max) = 0; 238205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_c_buf_p) = (char *) 0; 238305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_init) = 0; 238405436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_start) = 0; 238505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 238605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Defined in main.c */ 238705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef YY_STDINIT 238805436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_in = stdin; 238905436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_out = stdout; 239005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 239105436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_in = (FILE *) 0; 239205436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_out = (FILE *) 0; 239305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 239405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 239505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* For future reference: Set errno on error, since we are called by 239605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code_lex_init() 239705436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 239805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return 0; 239905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 240005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 240105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 240205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ 240305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* code_lex_destroy is for both reentrant and non-reentrant scanners. */ 240405436638acc7c010349a69c3395f1a57c642dc62Ying Wangint code_lex_destroy (void) 240505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 240605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 240705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Pop the buffer stack, destroying each element. */ 240805436638acc7c010349a69c3395f1a57c642dc62Ying Wang while(YY_CURRENT_BUFFER){ 240905436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__delete_buffer(YY_CURRENT_BUFFER ); 241005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YY_CURRENT_BUFFER_LVALUE = NULL; 241105436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_pop_buffer_state(); 241205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 241305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 241405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Destroy the stack itself. */ 241505436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_free((yy_buffer_stack) ); 241605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (yy_buffer_stack) = NULL; 241705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 241805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Reset the globals. This is important in a non-reentrant scanner so the next time 241905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * code_lex() is called, initialization will occur. */ 242005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_init_globals( ); 242105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 242205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-reentrant */ 242305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 242405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return 0; 242505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 242605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 242705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 242805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* 242905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Internal utility routines. 243005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 243105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 243205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef yytext_ptr 243305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) 243405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 243505436638acc7c010349a69c3395f1a57c642dc62Ying Wang register int i; 243605436638acc7c010349a69c3395f1a57c642dc62Ying Wang for ( i = 0; i < n; ++i ) 243705436638acc7c010349a69c3395f1a57c642dc62Ying Wang s1[i] = s2[i]; 243805436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 243905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 244005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 244105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifdef YY_NEED_STRLEN 244205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int yy_flex_strlen (yyconst char * s ) 244305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 244405436638acc7c010349a69c3395f1a57c642dc62Ying Wang register int n; 244505436638acc7c010349a69c3395f1a57c642dc62Ying Wang for ( n = 0; s[n]; ++n ) 244605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ; 244705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 244805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return n; 244905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 245005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 245105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 245205436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid *code_alloc (yy_size_t size ) 245305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 245405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return (void *) malloc( size ); 245505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 245605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 245705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid *code_realloc (void * ptr, yy_size_t size ) 245805436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 245905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* The cast to (char *) in the following accommodates both 246005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * implementations that use char* generic pointers, and those 246105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * that use void* generic pointers. It works with the latter 246205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * because both ANSI C and C++ allow castless assignment from 246305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * any pointer type to void*, and deal with argument conversions 246405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * as though doing an assignment. 246505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 246605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return (void *) realloc( (char *) ptr, size ); 246705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 246805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 246905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid code_free (void * ptr ) 247005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 247105436638acc7c010349a69c3395f1a57c642dc62Ying Wang free( (char *) ptr ); /* see code_realloc() for (char *) cast */ 247205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 247305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 247405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %if-tables-serialization definitions */ 247505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %define-yytables The name for this specific scanner's tables. */ 247605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYTABLES_NAME "yytables" 247705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %endif */ 247805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 247905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* %ok-for-header */ 248005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 248105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 294 "scan-code.l" 248205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 248305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 248405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 248505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic inline bool 248605436638acc7c010349a69c3395f1a57c642dc62Ying Wangis_dot_or_dash (char ch) 248705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 248805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return ch == '.' || ch == '-'; 248905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 249005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 249105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic inline bool 249205436638acc7c010349a69c3395f1a57c642dc62Ying Wangcontains_dot_or_dash (const char* p) 249305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 249405436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (; *p; ++p) 249505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (is_dot_or_dash (*p)) 249605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return true; 249705436638acc7c010349a69c3395f1a57c642dc62Ying Wang return false; 249805436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 249905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 250005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Defines a variant of a symbolic name resolution. */ 250105436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef struct 250205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 250305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Index in symbol list. */ 250405436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned symbol_index; 250505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 250605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Matched symbol id and loc. */ 250705436638acc7c010349a69c3395f1a57c642dc62Ying Wang uniqstr id; 250805436638acc7c010349a69c3395f1a57c642dc62Ying Wang location loc; 250905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 251005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Hiding named reference. */ 251105436638acc7c010349a69c3395f1a57c642dc62Ying Wang named_ref* hidden_by; 251205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 251305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Error flags. May contain zero (no errors) or 251405436638acc7c010349a69c3395f1a57c642dc62Ying Wang a combination of VARIANT_* values. */ 251505436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned err; 251605436638acc7c010349a69c3395f1a57c642dc62Ying Wang} variant; 251705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 251805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Set when the variant refers to a symbol hidden 251905436638acc7c010349a69c3395f1a57c642dc62Ying Wang by an explicit symbol reference. */ 252005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define VARIANT_HIDDEN (1 << 0) 252105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 252205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Set when the variant refers to a symbol containing 252305436638acc7c010349a69c3395f1a57c642dc62Ying Wang dots or dashes. Will require explicit bracketing. */ 252405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define VARIANT_BAD_BRACKETING (1 << 1) 252505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 252605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Set when the variant refers to a symbol which is 252705436638acc7c010349a69c3395f1a57c642dc62Ying Wang not visible from current midrule. */ 252805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define VARIANT_NOT_VISIBLE_FROM_MIDRULE (1 << 2) 252905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 253005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic variant *variant_table = NULL; 253105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic unsigned variant_table_size = 0; 253205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic unsigned variant_count = 0; 253305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 253405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic variant * 253505436638acc7c010349a69c3395f1a57c642dc62Ying Wangvariant_table_grow (void) 253605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 253705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++variant_count; 253805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (variant_count > variant_table_size) 253905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 254005436638acc7c010349a69c3395f1a57c642dc62Ying Wang while (variant_count > variant_table_size) 254105436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_table_size = 2 * variant_table_size + 3; 254205436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_table = xnrealloc (variant_table, variant_table_size, 254305436638acc7c010349a69c3395f1a57c642dc62Ying Wang sizeof *variant_table); 254405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 254505436638acc7c010349a69c3395f1a57c642dc62Ying Wang return &variant_table[variant_count - 1]; 254605436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 254705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 254805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void 254905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvariant_table_free (void) 255005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 255105436638acc7c010349a69c3395f1a57c642dc62Ying Wang free (variant_table); 255205436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_table = NULL; 255305436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_table_size = variant_count = 0; 255405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 255505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 255605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char * 255705436638acc7c010349a69c3395f1a57c642dc62Ying Wangfind_prefix_end (const char *prefix, char *begin, char *end) 255805436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 255905436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *ptr = begin; 256005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 256105436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (; *prefix && ptr != end; ++prefix, ++ptr) 256205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (*prefix != *ptr) 256305436638acc7c010349a69c3395f1a57c642dc62Ying Wang return 0; 256405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 256505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (*prefix) 256605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return 0; 256705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 256805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return ptr; 256905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 257005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 257105436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic variant * 257205436638acc7c010349a69c3395f1a57c642dc62Ying Wangvariant_add (uniqstr id, location id_loc, unsigned symbol_index, 257305436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *cp, char *cp_end, bool explicit_bracketing) 257405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 257505436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *prefix_end; 257605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 257705436638acc7c010349a69c3395f1a57c642dc62Ying Wang prefix_end = find_prefix_end (id, cp, cp_end); 257805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (prefix_end && 257905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (prefix_end == cp_end || 258005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (!explicit_bracketing && is_dot_or_dash (*prefix_end)))) 258105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 258205436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant *r = variant_table_grow (); 258305436638acc7c010349a69c3395f1a57c642dc62Ying Wang r->symbol_index = symbol_index; 258405436638acc7c010349a69c3395f1a57c642dc62Ying Wang r->id = id; 258505436638acc7c010349a69c3395f1a57c642dc62Ying Wang r->loc = id_loc; 258605436638acc7c010349a69c3395f1a57c642dc62Ying Wang r->hidden_by = NULL; 258705436638acc7c010349a69c3395f1a57c642dc62Ying Wang r->err = 0; 258805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return r; 258905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 259005436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 259105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return NULL; 259205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 259305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 259405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const char * 259505436638acc7c010349a69c3395f1a57c642dc62Ying Wangget_at_spec (unsigned symbol_index) 259605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 259705436638acc7c010349a69c3395f1a57c642dc62Ying Wang static char at_buf[20]; 259805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (symbol_index == 0) 259905436638acc7c010349a69c3395f1a57c642dc62Ying Wang strcpy (at_buf, "$$"); 260005436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 260105436638acc7c010349a69c3395f1a57c642dc62Ying Wang snprintf (at_buf, sizeof at_buf, "$%u", symbol_index); 260205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return at_buf; 260305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 260405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 260505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void 260605436638acc7c010349a69c3395f1a57c642dc62Ying Wangshow_sub_messages (const char* cp, bool explicit_bracketing, 260705436638acc7c010349a69c3395f1a57c642dc62Ying Wang int midrule_rhs_index, char dollar_or_at, 260805436638acc7c010349a69c3395f1a57c642dc62Ying Wang bool is_warning, unsigned indent) 260905436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 261005436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned i; 261105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 261205436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (i = 0; i < variant_count; ++i) 261305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 261405436638acc7c010349a69c3395f1a57c642dc62Ying Wang const variant *var = &variant_table[i]; 261505436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *at_spec = get_at_spec (var->symbol_index); 261605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 261705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (var->err == 0) 261805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 261905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (is_warning) 262005436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at_indent (var->loc, &indent, _("refers to: %c%s at %s"), 262105436638acc7c010349a69c3395f1a57c642dc62Ying Wang dollar_or_at, var->id, at_spec); 262205436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 262305436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (var->loc, &indent, _("refers to: %c%s at %s"), 262405436638acc7c010349a69c3395f1a57c642dc62Ying Wang dollar_or_at, var->id, at_spec); 262505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 262605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 262705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 262805436638acc7c010349a69c3395f1a57c642dc62Ying Wang static struct obstack msg_buf; 262905436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *tail = explicit_bracketing ? "" : 263005436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp + strlen (var->id); 263105436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *id = var->hidden_by ? var->hidden_by->id : 263205436638acc7c010349a69c3395f1a57c642dc62Ying Wang var->id; 263305436638acc7c010349a69c3395f1a57c642dc62Ying Wang location id_loc = var->hidden_by ? var->hidden_by->loc : 263405436638acc7c010349a69c3395f1a57c642dc62Ying Wang var->loc; 263505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 263605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Create the explanation message. */ 263705436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_init (&msg_buf); 263805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 263905436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&msg_buf, _("possibly meant: %c"), dollar_or_at); 264005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (contains_dot_or_dash (id)) 264105436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&msg_buf, "[%s]", id); 264205436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 264305436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&msg_buf, id); 264405436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&msg_buf, tail); 264505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 264605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (var->err & VARIANT_HIDDEN) 264705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 264805436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&msg_buf, _(", hiding %c"), dollar_or_at); 264905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (contains_dot_or_dash (var->id)) 265005436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&msg_buf, "[%s]", var->id); 265105436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 265205436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&msg_buf, var->id); 265305436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&msg_buf, tail); 265405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 265505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 265605436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&msg_buf, _(" at %s"), at_spec); 265705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 265805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE) 265905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 266005436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *format = 266105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _(", cannot be accessed from mid-rule action at $%d"); 266205436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&msg_buf, format, midrule_rhs_index); 266305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 266405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 266505436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_1grow (&msg_buf, '\0'); 266605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (is_warning) 266705436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at_indent (id_loc, &indent, "%s", 266805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *) obstack_finish (&msg_buf)); 266905436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 267005436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (id_loc, &indent, "%s", 267105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *) obstack_finish (&msg_buf)); 267205436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_free (&msg_buf, 0); 267305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 267405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 267505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 267605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 267705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Returned from "parse_ref" when the reference 267805436638acc7c010349a69c3395f1a57c642dc62Ying Wang is inappropriate. */ 267905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define INVALID_REF (INT_MIN) 268005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 268105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Returned from "parse_ref" when the reference 268205436638acc7c010349a69c3395f1a57c642dc62Ying Wang points to LHS ($$) of the current rule or midrule. */ 268305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define LHS_REF (INT_MIN + 1) 268405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 268505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Parse named or positional reference. In case of positional 268605436638acc7c010349a69c3395f1a57c642dc62Ying Wang references, can return negative values for $-n "deep" stack 268705436638acc7c010349a69c3395f1a57c642dc62Ying Wang accesses. */ 268805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic long int 268905436638acc7c010349a69c3395f1a57c642dc62Ying Wangparse_ref (char *cp, symbol_list *rule, int rule_length, 269005436638acc7c010349a69c3395f1a57c642dc62Ying Wang int midrule_rhs_index, char *text, location text_loc, 269105436638acc7c010349a69c3395f1a57c642dc62Ying Wang char dollar_or_at) 269205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 269305436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_list *l; 269405436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *cp_end; 269505436638acc7c010349a69c3395f1a57c642dc62Ying Wang bool explicit_bracketing; 269605436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned i; 269705436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned valid_variants = 0; 269805436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned valid_variant_index = 0; 269905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 270005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ('$' == *cp) 270105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return LHS_REF; 270205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 270305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1)))) 270405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 270505436638acc7c010349a69c3395f1a57c642dc62Ying Wang long int num = strtol (cp, &cp, 10); 270605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (1 - INT_MAX + rule_length <= num && num <= rule_length) 270705436638acc7c010349a69c3395f1a57c642dc62Ying Wang return num; 270805436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 270905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 271005436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (text_loc, _("integer out of range: %s"), 271105436638acc7c010349a69c3395f1a57c642dc62Ying Wang quote (text)); 271205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return INVALID_REF; 271305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 271405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 271505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 271605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if ('[' == *cp) 271705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 271805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Ignore the brackets. */ 271905436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *p; 272005436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (p = ++cp; *p != ']'; ++p) 272105436638acc7c010349a69c3395f1a57c642dc62Ying Wang continue; 272205436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp_end = p; 272305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 272405436638acc7c010349a69c3395f1a57c642dc62Ying Wang explicit_bracketing = true; 272505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 272605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 272705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 272805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Take all characters of the name. */ 272905436638acc7c010349a69c3395f1a57c642dc62Ying Wang char* p; 273005436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (p = cp; *p; ++p) 273105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (is_dot_or_dash (*p)) 273205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 273305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ref_tail_fields = p; 273405436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 273505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 273605436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (p = cp; *p; ++p) 273705436638acc7c010349a69c3395f1a57c642dc62Ying Wang continue; 273805436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp_end = p; 273905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 274005436638acc7c010349a69c3395f1a57c642dc62Ying Wang explicit_bracketing = false; 274105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 274205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 274305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Add all relevant variants. */ 274405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 274505436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned symbol_index; 274605436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_count = 0; 274705436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (symbol_index = 0, l = rule; !symbol_list_null (l); 274805436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++symbol_index, l = l->next) 274905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 275005436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant *var; 275105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (l->content_type != SYMLIST_SYMBOL) 275205436638acc7c010349a69c3395f1a57c642dc62Ying Wang continue; 275305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 275405436638acc7c010349a69c3395f1a57c642dc62Ying Wang var = variant_add (l->content.sym->tag, l->sym_loc, 275505436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_index, cp, cp_end, explicit_bracketing); 275605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (var && l->named_ref) 275705436638acc7c010349a69c3395f1a57c642dc62Ying Wang var->hidden_by = l->named_ref; 275805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 275905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (l->named_ref) 276005436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_add (l->named_ref->id, l->named_ref->loc, 276105436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_index, cp, cp_end, explicit_bracketing); 276205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 276305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 276405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 276505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Check errors. */ 276605436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (i = 0; i < variant_count; ++i) 276705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 276805436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant *var = &variant_table[i]; 276905436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned symbol_index = var->symbol_index; 277005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 277105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Check visibility from mid-rule actions. */ 277205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (midrule_rhs_index != 0 277305436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (symbol_index == 0 || midrule_rhs_index < symbol_index)) 277405436638acc7c010349a69c3395f1a57c642dc62Ying Wang var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE; 277505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 277605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Check correct bracketing. */ 277705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!explicit_bracketing && contains_dot_or_dash (var->id)) 277805436638acc7c010349a69c3395f1a57c642dc62Ying Wang var->err |= VARIANT_BAD_BRACKETING; 277905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 278005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Check using of hidden symbols. */ 278105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (var->hidden_by) 278205436638acc7c010349a69c3395f1a57c642dc62Ying Wang var->err |= VARIANT_HIDDEN; 278305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 278405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!var->err) 278505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 278605436638acc7c010349a69c3395f1a57c642dc62Ying Wang valid_variant_index = i; 278705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++valid_variants; 278805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 278905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 279005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 279105436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (valid_variants) 279205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 279305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 0: 279405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 279505436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned len = (explicit_bracketing || !ref_tail_fields) ? 279605436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp_end - cp : ref_tail_fields - cp; 279705436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned indent = 0; 279805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 279905436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (text_loc, &indent, _("invalid reference: %s"), 280005436638acc7c010349a69c3395f1a57c642dc62Ying Wang quote (text)); 280105436638acc7c010349a69c3395f1a57c642dc62Ying Wang indent += SUB_INDENT; 280205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (len == 0) 280305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 280405436638acc7c010349a69c3395f1a57c642dc62Ying Wang location sym_loc = text_loc; 280505436638acc7c010349a69c3395f1a57c642dc62Ying Wang sym_loc.start.column += 1; 280605436638acc7c010349a69c3395f1a57c642dc62Ying Wang sym_loc.end = sym_loc.start; 280705436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *format = 280805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("syntax error after '%c', expecting integer, letter," 280905436638acc7c010349a69c3395f1a57c642dc62Ying Wang " '_', '[', or '$'"); 281005436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (sym_loc, &indent, format, dollar_or_at); 281105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 281205436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if (midrule_rhs_index) 281305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 281405436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *format = 281505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("symbol not found in production before $%d: %.*s"); 281605436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (rule->location, &indent, format, 281705436638acc7c010349a69c3395f1a57c642dc62Ying Wang midrule_rhs_index, len, cp); 281805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 281905436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 282005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 282105436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *format = 282205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("symbol not found in production: %.*s"); 282305436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (rule->location, &indent, format, 282405436638acc7c010349a69c3395f1a57c642dc62Ying Wang len, cp); 282505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 282605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 282705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (variant_count > 0) 282805436638acc7c010349a69c3395f1a57c642dc62Ying Wang show_sub_messages (cp, explicit_bracketing, midrule_rhs_index, 282905436638acc7c010349a69c3395f1a57c642dc62Ying Wang dollar_or_at, false, indent); 283005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return INVALID_REF; 283105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 283205436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 1: 283305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 283405436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned indent = 0; 283505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (variant_count > 1) 283605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 283705436638acc7c010349a69c3395f1a57c642dc62Ying Wang warn_at_indent (text_loc, &indent, _("misleading reference: %s"), 283805436638acc7c010349a69c3395f1a57c642dc62Ying Wang quote (text)); 283905436638acc7c010349a69c3395f1a57c642dc62Ying Wang show_sub_messages (cp, explicit_bracketing, midrule_rhs_index, 284005436638acc7c010349a69c3395f1a57c642dc62Ying Wang dollar_or_at, true, indent + SUB_INDENT); 284105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 284205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 284305436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned symbol_index = 284405436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_table[valid_variant_index].symbol_index; 284505436638acc7c010349a69c3395f1a57c642dc62Ying Wang return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index; 284605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 284705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 284805436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 2: 284905436638acc7c010349a69c3395f1a57c642dc62Ying Wang default: 285005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 285105436638acc7c010349a69c3395f1a57c642dc62Ying Wang unsigned indent = 0; 285205436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at_indent (text_loc, &indent, _("ambiguous reference: %s"), 285305436638acc7c010349a69c3395f1a57c642dc62Ying Wang quote (text)); 285405436638acc7c010349a69c3395f1a57c642dc62Ying Wang show_sub_messages (cp, explicit_bracketing, midrule_rhs_index, 285505436638acc7c010349a69c3395f1a57c642dc62Ying Wang dollar_or_at, false, indent + SUB_INDENT); 285605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return INVALID_REF; 285705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 285805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 285905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 286005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Not reachable. */ 286105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return INVALID_REF; 286205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 286305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 286405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Keeps track of the maximum number of semantic values to the left of 286505436638acc7c010349a69c3395f1a57c642dc62Ying Wang a handle (those referenced by $0, $-1, etc.) are required by the 286605436638acc7c010349a69c3395f1a57c642dc62Ying Wang semantic actions of this grammar. */ 286705436638acc7c010349a69c3395f1a57c642dc62Ying Wangint max_left_semantic_context = 0; 286805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 286905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 287005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* If CP points to a typename (i.e., <.*?>), set TYPE_NAME to its 287105436638acc7c010349a69c3395f1a57c642dc62Ying Wang beginning (i.e., after the opening "<", and return the pointer 287205436638acc7c010349a69c3395f1a57c642dc62Ying Wang immediately after it. */ 287305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 287405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic 287505436638acc7c010349a69c3395f1a57c642dc62Ying Wangchar * 287605436638acc7c010349a69c3395f1a57c642dc62Ying Wangfetch_type_name (char *cp, char const **type_name, 287705436638acc7c010349a69c3395f1a57c642dc62Ying Wang location dollar_loc) 287805436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 287905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (*cp == '<') 288005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 288105436638acc7c010349a69c3395f1a57c642dc62Ying Wang *type_name = ++cp; 288205436638acc7c010349a69c3395f1a57c642dc62Ying Wang while (*cp != '>') 288305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++cp; 288405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 288505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* The '>' symbol will be later replaced by '\0'. Original 288605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 'text' is needed for error messages. */ 288705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++cp; 288805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (untyped_var_seen) 288905436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (dollar_loc, _("explicit type given in untyped grammar")); 289005436638acc7c010349a69c3395f1a57c642dc62Ying Wang tag_seen = true; 289105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 289205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return cp; 289305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 289405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 289505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*------------------------------------------------------------------. 289605436638acc7c010349a69c3395f1a57c642dc62Ying Wang| TEXT is pointing to a wannabee semantic value (i.e., a '$'). | 289705436638acc7c010349a69c3395f1a57c642dc62Ying Wang| | 289805436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Possible inputs: $[<TYPENAME>]($|integer) | 289905436638acc7c010349a69c3395f1a57c642dc62Ying Wang| | 290005436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Output to OBSTACK_FOR_STRING a reference to this semantic value. | 290105436638acc7c010349a69c3395f1a57c642dc62Ying Wang`------------------------------------------------------------------*/ 290205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 290305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void 290405436638acc7c010349a69c3395f1a57c642dc62Ying Wanghandle_action_dollar (symbol_list *rule, char *text, location dollar_loc) 290505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 290605436638acc7c010349a69c3395f1a57c642dc62Ying Wang char const *type_name = NULL; 290705436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *cp = text + 1; 290805436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_list *effective_rule; 290905436638acc7c010349a69c3395f1a57c642dc62Ying Wang int effective_rule_length; 291005436638acc7c010349a69c3395f1a57c642dc62Ying Wang int n; 291105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 291205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (rule->midrule_parent_rule) 291305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 291405436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule = rule->midrule_parent_rule; 291505436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule_length = rule->midrule_parent_rhs_index - 1; 291605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 291705436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 291805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 291905436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule = rule; 292005436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule_length = symbol_list_length (rule->next); 292105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 292205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 292305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Get the type name if explicit. */ 292405436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp = fetch_type_name (cp, &type_name, dollar_loc); 292505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 292605436638acc7c010349a69c3395f1a57c642dc62Ying Wang n = parse_ref (cp, effective_rule, effective_rule_length, 292705436638acc7c010349a69c3395f1a57c642dc62Ying Wang rule->midrule_parent_rhs_index, text, dollar_loc, '$'); 292805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 292905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* End type_name. */ 293005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (type_name) 293105436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp[-1] = '\0'; 293205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 293305436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (n) 293405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 293505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case INVALID_REF: 293605436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 293705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 293805436638acc7c010349a69c3395f1a57c642dc62Ying Wang case LHS_REF: 293905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!type_name) 294005436638acc7c010349a69c3395f1a57c642dc62Ying Wang type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0); 294105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 294205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!type_name) 294305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 294405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (union_seen | tag_seen) 294505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 294605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (rule->midrule_parent_rule) 294705436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (dollar_loc, 294805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("$$ for the midrule at $%d of %s" 294905436638acc7c010349a69c3395f1a57c642dc62Ying Wang " has no declared type"), 295005436638acc7c010349a69c3395f1a57c642dc62Ying Wang rule->midrule_parent_rhs_index, 295105436638acc7c010349a69c3395f1a57c642dc62Ying Wang quote (effective_rule->content.sym->tag)); 295205436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 295305436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (dollar_loc, _("$$ of %s has no declared type"), 295405436638acc7c010349a69c3395f1a57c642dc62Ying Wang quote (rule->content.sym->tag)); 295505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 295605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 295705436638acc7c010349a69c3395f1a57c642dc62Ying Wang untyped_var_seen = true; 295805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 295905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 296005436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, "]b4_lhs_value("); 296105436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_quote (&obstack_for_string, type_name); 296205436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, ")["); 296305436638acc7c010349a69c3395f1a57c642dc62Ying Wang rule->action_props.is_value_used = true; 296405436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 296505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 296605436638acc7c010349a69c3395f1a57c642dc62Ying Wang default: 296705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (max_left_semantic_context < 1 - n) 296805436638acc7c010349a69c3395f1a57c642dc62Ying Wang max_left_semantic_context = 1 - n; 296905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!type_name && 0 < n) 297005436638acc7c010349a69c3395f1a57c642dc62Ying Wang type_name = 297105436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_list_n_type_name_get (effective_rule, dollar_loc, n); 297205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!type_name) 297305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 297405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (union_seen | tag_seen) 297505436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (dollar_loc, _("$%s of %s has no declared type"), 297605436638acc7c010349a69c3395f1a57c642dc62Ying Wang cp, quote (effective_rule->content.sym->tag)); 297705436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 297805436638acc7c010349a69c3395f1a57c642dc62Ying Wang untyped_var_seen = true; 297905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 298005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 298105436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&obstack_for_string, 298205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "]b4_rhs_value(%d, %d, ", effective_rule_length, n); 298305436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_quote (&obstack_for_string, type_name); 298405436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, ")["); 298505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (n > 0) 298605436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_list_n_get (effective_rule, n)->action_props.is_value_used = 298705436638acc7c010349a69c3395f1a57c642dc62Ying Wang true; 298805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 298905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 299005436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 299105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 299205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 299305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*------------------------------------------------------. 299405436638acc7c010349a69c3395f1a57c642dc62Ying Wang| TEXT is a location token (i.e., a '@...'). Output to | 299505436638acc7c010349a69c3395f1a57c642dc62Ying Wang| OBSTACK_FOR_STRING a reference to this location. | 299605436638acc7c010349a69c3395f1a57c642dc62Ying Wang`------------------------------------------------------*/ 299705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 299805436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void 299905436638acc7c010349a69c3395f1a57c642dc62Ying Wanghandle_action_at (symbol_list *rule, char *text, location at_loc) 300005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 300105436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *cp = text + 1; 300205436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol_list *effective_rule; 300305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int effective_rule_length; 300405436638acc7c010349a69c3395f1a57c642dc62Ying Wang int n; 300505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 300605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (rule->midrule_parent_rule) 300705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 300805436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule = rule->midrule_parent_rule; 300905436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule_length = rule->midrule_parent_rhs_index - 1; 301005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 301105436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 301205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 301305436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule = rule; 301405436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule_length = symbol_list_length (rule->next); 301505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 301605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 301705436638acc7c010349a69c3395f1a57c642dc62Ying Wang locations_flag = true; 301805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 301905436638acc7c010349a69c3395f1a57c642dc62Ying Wang n = parse_ref (cp, effective_rule, effective_rule_length, 302005436638acc7c010349a69c3395f1a57c642dc62Ying Wang rule->midrule_parent_rhs_index, text, at_loc, '@'); 302105436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (n) 302205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 302305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case INVALID_REF: 302405436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 302505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 302605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case LHS_REF: 302705436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_sgrow (&obstack_for_string, "]b4_lhs_location["); 302805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 302905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 303005436638acc7c010349a69c3395f1a57c642dc62Ying Wang default: 303105436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[", 303205436638acc7c010349a69c3395f1a57c642dc62Ying Wang effective_rule_length, n); 303305436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 303405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 303505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 303605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 303705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 303805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*-------------------------. 303905436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Initialize the scanner. | 304005436638acc7c010349a69c3395f1a57c642dc62Ying Wang`-------------------------*/ 304105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 304205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Translate the dollars and ats in \a self, in the context \a sc_context 304305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL). */ 304405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 304505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char const * 304605436638acc7c010349a69c3395f1a57c642dc62Ying Wangtranslate_action (code_props *self, int sc_context) 304705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 304805436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *res; 304905436638acc7c010349a69c3395f1a57c642dc62Ying Wang static bool initialized = false; 305005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!initialized) 305105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 305205436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_init (&obstack_for_string); 305305436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__flex_debug = 0; 305405436638acc7c010349a69c3395f1a57c642dc62Ying Wang initialized = true; 305505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 305605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305705436638acc7c010349a69c3395f1a57c642dc62Ying Wang loc->start = loc->end = self->location.start; 305805436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__switch_to_buffer (code__scan_string (self->code)); 305905436638acc7c010349a69c3395f1a57c642dc62Ying Wang res = code_lex (self, sc_context); 306005436638acc7c010349a69c3395f1a57c642dc62Ying Wang code__delete_buffer (YY_CURRENT_BUFFER); 306105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 306205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return res; 306305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 306405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 306505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*------------------------------------------------------------------------. 306605436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Implementation of the public interface as documented in "scan-code.h". | 306705436638acc7c010349a69c3395f1a57c642dc62Ying Wang`------------------------------------------------------------------------*/ 306805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 306905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 307005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props_none_init (code_props *self) 307105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 307205436638acc7c010349a69c3395f1a57c642dc62Ying Wang *self = code_props_none; 307305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 307405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 307505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props const code_props_none = CODE_PROPS_NONE_INIT; 307605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 307705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 307805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props_plain_init (code_props *self, char const *code, 307905436638acc7c010349a69c3395f1a57c642dc62Ying Wang location code_loc) 308005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 308105436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->kind = CODE_PROPS_PLAIN; 308205436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->code = code; 308305436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->location = code_loc; 308405436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->is_value_used = false; 308505436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->rule = NULL; 308605436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->named_ref = NULL; 308705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 308805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 308905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 309005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props_symbol_action_init (code_props *self, char const *code, 309105436638acc7c010349a69c3395f1a57c642dc62Ying Wang location code_loc) 309205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 309305436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->kind = CODE_PROPS_SYMBOL_ACTION; 309405436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->code = code; 309505436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->location = code_loc; 309605436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->is_value_used = false; 309705436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->rule = NULL; 309805436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->named_ref = NULL; 309905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 310005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 310105436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 310205436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props_rule_action_init (code_props *self, char const *code, 310305436638acc7c010349a69c3395f1a57c642dc62Ying Wang location code_loc, symbol_list *rule, 310405436638acc7c010349a69c3395f1a57c642dc62Ying Wang named_ref *name) 310505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 310605436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->kind = CODE_PROPS_RULE_ACTION; 310705436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->code = code; 310805436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->location = code_loc; 310905436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->is_value_used = false; 311005436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->rule = rule; 311105436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->named_ref = name; 311205436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 311305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 311405436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 311505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props_translate_code (code_props *self) 311605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 311705436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (self->kind) 311805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 311905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case CODE_PROPS_NONE: 312005436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 312105436638acc7c010349a69c3395f1a57c642dc62Ying Wang case CODE_PROPS_PLAIN: 312205436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->code = translate_action (self, INITIAL); 312305436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 312405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case CODE_PROPS_SYMBOL_ACTION: 312505436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->code = translate_action (self, SC_SYMBOL_ACTION); 312605436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 312705436638acc7c010349a69c3395f1a57c642dc62Ying Wang case CODE_PROPS_RULE_ACTION: 312805436638acc7c010349a69c3395f1a57c642dc62Ying Wang self->code = translate_action (self, SC_RULE_ACTION); 312905436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 313005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 313105436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 313205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 313305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 313405436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_scanner_last_string_free (void) 313505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 313605436638acc7c010349a69c3395f1a57c642dc62Ying Wang STRING_FREE; 313705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 313805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 313905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 314005436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_scanner_free (void) 314105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 314205436638acc7c010349a69c3395f1a57c642dc62Ying Wang obstack_free (&obstack_for_string, 0); 314305436638acc7c010349a69c3395f1a57c642dc62Ying Wang variant_table_free (); 314405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 314505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Reclaim Flex's buffers. */ 314605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code_lex_destroy (); 314705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 314805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3149