📄 scan.c
字号:
/* A lexical scanner generated by flex *//* scanner skeleton version: * $Header: /usr/fsys/odin/a/vern/flex/RCS/flex.skel,v 2.16 90/08/03 14:09:36 vern Exp $ */#define FLEX_SCANNER#include <stdio.h>/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */#ifdef c_plusplus#ifndef __cplusplus#define __cplusplus#endif#endif#ifdef __cplusplus#include <stdlib.h>#include <osfcn.h>/* use prototypes in function declarations */#define YY_USE_PROTOS/* the "const" storage-class-modifier is valid */#define YY_USE_CONST#else /* ! __cplusplus */#ifdef __STDC__#ifdef __GNUC__#include <stddef.h>void *malloc( size_t );void free( void* );#else#include <stdlib.h>#endif /* __GNUC__ */#define YY_USE_PROTOS#define YY_USE_CONST#endif /* __STDC__ */#endif /* ! __cplusplus */#ifdef __TURBOC__#define YY_USE_CONST#endif#ifndef YY_USE_CONST#define const#endif#ifdef YY_USE_PROTOS#define YY_PROTO(proto) proto#else#define YY_PROTO(proto) ()/* we can't get here if it's an ANSI C compiler, or a C++ compiler, * so it's got to be a K&R compiler, and therefore there's no standard * place from which to include these definitions *//* char *malloc();int free(); */int read();#endif/* amount of stuff to slurp up with each read */#ifndef YY_READ_BUF_SIZE#define YY_READ_BUF_SIZE 8192#endif/* returned upon end-of-file */#define YY_END_TOK 0/* copy whatever the last rule matched to the standard output *//* cast to (char *) is because for 8-bit chars, yytext is (unsigned char *) *//* this used to be an fputs(), but since the string might contain NUL's, * we now use fwrite() */#define ECHO (void) fwrite( (char *) yytext, yyleng, 1, yyout )/* gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */#define YY_INPUT(buf,result,max_size) \ if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "read() in flex scanner failed" );#define YY_NULL 0/* no semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */#define yyterminate() return ( YY_NULL )/* report a fatal error *//* The funky do-while is used to turn this macro definition into * a single C statement (which needs a semi-colon terminator). * This avoids problems with code like: * * if ( something_happens ) * YY_FATAL_ERROR( "oops, the something happened" ); * else * everything_okay(); * * Prior to using the do-while the compiler would get upset at the * "else" because it interpreted the "if" statement as being all * done when it reached the ';' after the YY_FATAL_ERROR() call. */#define YY_FATAL_ERROR(msg) \ do \ { \ (void) fputs( msg, stderr ); \ (void) putc( '\n', stderr ); \ exit( 1 ); \ } \ while ( 0 )/* default yywrap function - always treat EOF as an EOF */#define yywrap() 1/* enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN */#define BEGIN yy_start = 1 + 2 */* action number for EOF rule of a given start state */#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)/* special action meaning "start processing a new file" */#define YY_NEW_FILE \ do \ { \ yy_init_buffer( yy_current_buffer, yyin ); \ yy_load_buffer_state(); \ } \ while ( 0 )/* default declaration of generated scanner - a define so the user can * easily add parameters */#define YY_DECL int yylex YY_PROTO(( void )) /* code executed at the end of each rule */#define YY_BREAK break;#define YY_END_OF_BUFFER_CHAR 0#ifndef YY_BUF_SIZE#define YY_BUF_SIZE (YY_READ_BUF_SIZE * 2) /* size of default input buffer */#endiftypedef struct yy_buffer_state *YY_BUFFER_STATE;#define YY_CHAR unsigned char# line 1 "scan.l"#define INITIAL 0# line 2 "scan.l"/* scan.l: the (f)lex description file for the scanner. *//* This file is part of bc written for MINIX. Copyright (C) 1991, 1992 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License , or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. You may contact the author by: e-mail: phil@cs.wwu.edu us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/#include "bcdefs.h"#include "y.tab.h"#include "global.h"#include "proto.h"/* Using flex, we can ask for a smaller input buffer. With lex, this does nothing! */#ifdef SMALL_BUF#undef YY_READ_BUF_SIZE#define YY_READ_BUF_SIZE 512#endif/* We want to define our own yywrap. */#undef yywrap_PROTOTYPE(int yywrap, (void));/* MINIX returns from read with < 0 if SIGINT is encountered. In flex, we can redefine YY_INPUT to the following. In lex, this does nothing! */#include <errno.h>#undef YY_INPUT#define YY_INPUT(buf,result,max_size) \ while ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \ if (errno != EINTR) \ YY_FATAL_ERROR( "read() in flex scanner failed" );# line 60 "scan.l"/* done after the current pattern has been matched and before the * corresponding action - sets up yytext */#define YY_DO_BEFORE_ACTION \ yytext = yy_bp; \ yyleng = yy_cp - yy_bp; \ yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yy_c_buf_p = yy_cp;#define EOB_ACT_CONTINUE_SCAN 0#define EOB_ACT_END_OF_FILE 1#define EOB_ACT_LAST_MATCH 2/* return all but the first 'n' matched characters back to the input stream */#define yyless(n) \ do \ { \ /* undo effects of setting up yytext */ \ *yy_cp = yy_hold_char; \ yy_c_buf_p = yy_cp = yy_bp + n; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 )#define unput(c) yyunput( c, yytext )struct yy_buffer_state { FILE *yy_input_file; YY_CHAR *yy_ch_buf; /* input buffer */ YY_CHAR *yy_buf_pos; /* current position in input buffer */ /* size of input buffer in bytes, not including room for EOB characters*/ int yy_buf_size; /* number of characters read into yy_ch_buf, not including EOB characters */ int yy_n_chars; int yy_eof_status; /* whether we've seen an EOF on this buffer */#define EOF_NOT_SEEN 0 /* "pending" happens when the EOF has been seen but there's still * some text process */#define EOF_PENDING 1#define EOF_DONE 2 };static YY_BUFFER_STATE yy_current_buffer;/* we provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state" */#define YY_CURRENT_BUFFER yy_current_buffer/* yy_hold_char holds the character lost when yytext is formed */static YY_CHAR yy_hold_char;static int yy_n_chars; /* number of characters read into yy_ch_buf */#ifndef YY_USER_ACTION#define YY_USER_ACTION#endif#ifndef YY_USER_INIT#define YY_USER_INIT#endifextern YY_CHAR *yytext;extern int yyleng;extern FILE *yyin, *yyout;YY_CHAR *yytext;int yyleng;FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;#define YY_END_OF_BUFFER 40typedef int yy_state_type;static const short int yy_accept[144] = { 0, 0, 0, 40, 38, 33, 31, 25, 38, 26, 38, 22, 26, 22, 22, 38, 26, 37, 29, 27, 29, 38, 22, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 38, 33, 29, 0, 36, 27, 23, 30, 37, 0, 34, 37, 37, 0, 28, 32, 35, 35, 35, 35, 35, 35, 35, 35, 35, 7, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 24, 37, 0, 0, 37, 0, 35, 35, 35, 35, 35, 6, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 13, 35, 35, 35, 14, 16, 35, 17, 35, 35, 35, 35, 3, 15, 35, 35, 9, 35, 35, 2, 35, 35, 11, 35, 35, 12, 20, 35, 10, 35, 8, 35, 1, 4, 21, 5, 35, 35, 35, 19, 18, 0 } ;static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 1, 1, 6, 7, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 17, 18, 19, 20, 1, 1, 21, 21, 21, 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 23, 24, 25, 26, 1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 36, 48, 36, 49, 36, 50, 51, 52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ;static const YY_CHAR yy_meta[53] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 } ;static const short int yy_base[146] = { 0, 0, 0, 193, 194, 190, 194, 172, 185, 170, 181, 194, 168, 42, 41, 41, 46, 52, 167, 61, 166, 181, 164, 135, 137, 139, 148, 140, 136, 0, 149, 27, 50, 147, 130, 126, 141, 40, 36, 120, 168, 194, 164, 194, 194, 194, 194, 66, 165, 194, 72, 76, 164, 194, 194, 0, 120, 134, 124, 131, 117, 117, 122, 132, 0, 113, 117, 117, 128, 119, 118, 52, 125, 107, 106, 114, 194, 80, 145, 84, 88, 144, 105, 118, 98, 108, 111, 0, 95, 95, 93, 105, 102, 91, 95, 88, 103, 85, 93, 84, 85, 90, 0, 90, 91, 85, 0, 0, 93, 0, 77, 76, 90, 74, 0, 0, 75, 87, 0, 90, 85, 0, 75, 83, 0, 76, 63, 0, 0, 66, 0, 62, 0, 47, 0, 0, 0, 0, 45, 53, 29, 0, 0, 194, 111, 56 } ;static const short int yy_def[146] = { 0, 143, 1, 143, 143, 143, 143, 143, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 143, 143 } ;static const short int yy_nxt[247] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 11, 14, 15, 16, 17, 11, 18, 19, 20, 17, 11, 21, 11, 22, 4, 23, 24, 25, 26, 27, 28, 29, 30, 31, 29, 29, 32, 29, 29, 33, 34, 35, 36, 37, 29, 29, 38, 29, 11, 39, 11, 46, 46, 63, 49, 47, 55, 64, 44, 44, 47, 74, 48, 44, 50, 53, 51, 72, 75, 53, 53, 51, 53, 52, 53, 65, 142, 96, 41, 66, 77, 73, 141, 67, 53, 77, 80, 78, 50, 140, 51, 80, 139, 81, 77, 51, 97, 52, 47, 77, 138, 78, 80, 47, 137, 48, 136, 80, 135, 81, 42, 42, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 80, 77, 101, 100, 99, 98, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 51, 79, 43, 40, 76, 71, 70, 69, 68, 62, 61, 60, 59, 58, 57, 56, 44, 54, 41, 41, 44, 45, 44, 43, 41, 40, 143, 3, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143 } ;static const short int yy_chk[247] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 14, 31, 16, 15, 145, 31, 14, 13, 15, 38, 15, 16, 17, 19, 17, 37, 38, 19, 19, 17, 19, 17, 19, 32, 140, 71, 19, 32, 47, 37, 139, 32, 19, 47, 50, 47, 51, 138, 51, 50, 133, 50, 77, 51, 71, 51, 79,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -