⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skel.c

📁 Flex词法/语法分析器源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* File created from flex.skl via mkskel.sh */#include "flexdef.h"const char *skel[] = {  "/* A lexical scanner generated by flex */",  "",  "/* Scanner skeleton version:",  " * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.85 95/04/24 10:48:47 vern Exp $",  " */",  "",  "#define FLEX_SCANNER",  "#define YY_FLEX_MAJOR_VERSION 2",  "#define YY_FLEX_MINOR_VERSION 5",  "",  "%-",  "#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>",  "%+",  "class istream;",  "%*",  "#include <unistd.h>",  "",  "/* Use prototypes in function declarations. */",  "#define YY_USE_PROTOS",  "",  "/* The \"const\" storage-class-modifier is valid. */",  "#define YY_USE_CONST",  "",  "#else	/* ! __cplusplus */",  "",  "#if __STDC__",  "",  "#define YY_USE_PROTOS",  "#define YY_USE_CONST",  "",  "#endif	/* __STDC__ */",  "#endif	/* ! __cplusplus */",  "",  "#ifdef __TURBOC__",  " #pragma warn -rch",  " #pragma warn -use",  "#include <io.h>",  "#include <stdlib.h>",  "#define YY_USE_CONST",  "#define YY_USE_PROTOS",  "#endif",  "",  "#ifdef YY_USE_CONST",  "#define yyconst const",  "#else",  "#define yyconst",  "#endif",  "",  "",  "#ifdef YY_USE_PROTOS",  "#define YY_PROTO(proto) proto",  "#else",  "#define YY_PROTO(proto) ()",  "#endif",  "",  "/* Returned upon end-of-file. */",  "#define YY_NULL 0",  "",  "/* Promotes a possibly negative, possibly signed char to an unsigned",  " * integer for use as an array index.  If the signed char is negative,",  " * we want to instead treat it as an 8-bit unsigned char, hence the",  " * double cast.",  " */",  "#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)",  "",  "/* 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 *",  "",  "/* Translate the current start state into a value that can be later handed",  " * to BEGIN to return to the state.  The YYSTATE alias is for lex",  " * compatibility.",  " */",  "#define YY_START ((yy_start - 1) / 2)",  "#define YYSTATE YY_START",  "",  "/* 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 yyrestart( yyin )",  "",  "#define YY_END_OF_BUFFER_CHAR 0",  "",  "/* Size of default input buffer. */",  "#define YY_BUF_SIZE 16384",  "",  "typedef struct yy_buffer_state *YY_BUFFER_STATE;",  "",  "extern int yyleng;",  "%-",  "extern FILE *yyin, *yyout;",  "%*",  "",  "#define EOB_ACT_CONTINUE_SCAN 0",  "#define EOB_ACT_END_OF_FILE 1",  "#define EOB_ACT_LAST_MATCH 2",  "",  "/* The funky do-while in the following #define is used to turn the definition",  " * int a single C statement (which needs a semi-colon terminator).  This",  " * avoids problems with code like:",  " *",  " * 	if ( condition_holds )",  " *		yyless( 5 );",  " *	else",  " *		do_something_else();",  " *",  " * 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 yyless() call.",  " */",  "",  "/* 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_MORE_ADJ; \\",  "		YY_DO_BEFORE_ACTION; /* set up yytext again */ \\",  "		} \\",  "	while ( 0 )",  "",  "#define unput(c) yyunput( c, yytext_ptr )",  "",  "/* The following is because we cannot portably get our hands on size_t",  " * (without autoconf's help, which isn't available because we want",  " * flex-generated scanners to compile on their own).",  " */",  "typedef unsigned int yy_size_t;",  "",  "",  "struct yy_buffer_state",  "	{",  "%-",  "	FILE *yy_input_file;",  "%+",  "	istream* yy_input_file;",  "%*",  "",  "	char *yy_ch_buf;		/* input buffer */",  "	char *yy_buf_pos;		/* current position in input buffer */",  "",  "	/* Size of input buffer in bytes, not including room for EOB",  "	 * characters.",  "	 */",  "	yy_size_t yy_buf_size;",  "",  "	/* Number of characters read into yy_ch_buf, not including EOB",  "	 * characters.",  "	 */",  "	int yy_n_chars;",  "",  "	/* Whether we \"own\" the buffer - i.e., we know we created it,",  "	 * and can realloc() it to grow it, and should free() it to",  "	 * delete it.",  "	 */",  "	int yy_is_our_buffer;",  "",  "	/* Whether this is an \"interactive\" input source; if so, and",  "	 * if we're using stdio for input, then we want to use getc()",  "	 * instead of fread(), to make sure we stop fetching input after",  "	 * each newline.",  "	 */",  "	int yy_is_interactive;",  "",  "	/* Whether we're considered to be at the beginning of a line.",  "	 * If so, '^' rules will be active on the next match, otherwise",  "	 * not.",  "	 */",  "	int yy_at_bol;",  "",  "	/* Whether to try to fill the input buffer when we reach the",  "	 * end of it.",  "	 */",  "	int yy_fill_buffer;",  "",  "	int yy_buffer_status;",  "#define YY_BUFFER_NEW 0",  "#define YY_BUFFER_NORMAL 1",  "	/* When an EOF's been seen but there's still some text to process",  "	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we",  "	 * shouldn't try reading from the input source any more.  We might",  "	 * still have a bunch of tokens to match, though, because of",  "	 * possible backing-up.",  "	 *",  "	 * When we actually see the EOF, we change the status to \"new\"",  "	 * (via yyrestart()), so that the user can continue scanning by",  "	 * just pointing yyin at a new input file.",  "	 */",  "#define YY_BUFFER_EOF_PENDING 2",  "	};",  "",  "%- Standard (non-C++) definition",  "static YY_BUFFER_STATE yy_current_buffer = 0;",  "%*",  "",  "/* 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",  "",  "",  "%- Standard (non-C++) definition",  "/* yy_hold_char holds the character lost when yytext is formed. */",  "static char yy_hold_char;",  "",  "static int yy_n_chars;		/* number of characters read into yy_ch_buf */",  "",  "",  "int yyleng;",  "",  "/* Points to current character in buffer. */",  "static char *yy_c_buf_p = (char *) 0;",  "static int yy_init = 1;		/* whether we need to initialize */",  "static int yy_start = 0;	/* start state number */",  "",  "/* Flag which is used to allow yywrap()'s to do buffer switches",  " * instead of setting up a fresh yyin.  A bit of a hack ...",  " */",  "static int yy_did_buffer_switch_on_eof;",  "",  "void yyrestart YY_PROTO(( FILE *input_file ));",  "",  "void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));",  "void yy_load_buffer_state YY_PROTO(( void ));",  "YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));",  "void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));",  "void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));",  "void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));",  "#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )",  "",  "YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));",  "YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));",  "YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));",  "%*",  "",  "static void *yy_flex_alloc YY_PROTO(( yy_size_t ));",  "static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));",  "static void yy_flex_free YY_PROTO(( void * ));",  "",  "#define yy_new_buffer yy_create_buffer",  "",  "#define yy_set_interactive(is_interactive) \\",  "	{ \\",  "	if ( ! yy_current_buffer ) \\",  "		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \\",  "	yy_current_buffer->yy_is_interactive = is_interactive; \\",  "	}",  "",  "#define yy_set_bol(at_bol) \\",  "	{ \\",  "	if ( ! yy_current_buffer ) \\",  "		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \\",  "	yy_current_buffer->yy_at_bol = at_bol; \\",  "	}",  "",  "#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)",  "",  "%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here",  "",  "%- Standard (non-C++) definition",  "static yy_state_type yy_get_previous_state YY_PROTO(( void ));",  "static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));",  "static int yy_get_next_buffer YY_PROTO(( void ));",  "static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));",  "%*",  "",  "/* Done after the current pattern has been matched and before the",  " * corresponding action - sets up yytext.",  " */",  "#define YY_DO_BEFORE_ACTION \\",  "	yytext_ptr = yy_bp; \\",  "%% code to fiddle yytext and yyleng for yymore() goes here",  "	yy_hold_char = *yy_cp; \\",  "	*yy_cp = '\\0'; \\",  "%% code to copy yytext_ptr to yytext[] goes here, if %array",  "	yy_c_buf_p = yy_cp;",  "",  "%% data tables for the DFA and the user's section 1 definitions go here",  "",  "/* Macros after this point can all be overridden by user definitions in",  " * section 1.",  " */",  "",  "#ifndef YY_SKIP_YYWRAP",  "#ifdef __cplusplus",  "extern \"C\" int yywrap YY_PROTO(( void ));",  "#else",  "extern int yywrap YY_PROTO(( void ));",  "#endif",  "#endif",  "",  "%-",  "#ifndef YY_NO_UNPUT",  "static void yyunput YY_PROTO(( int c, char *buf_ptr ));",  "#endif",  "%*",  "",  "#ifndef yytext_ptr",  "static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));",  "#endif",  "",  "#ifndef YY_NO_INPUT",  "%- Standard (non-C++) definition",  "#ifdef __cplusplus",  "static int yyinput YY_PROTO(( void ));",  "#else",  "static int input YY_PROTO(( void ));",  "#endif",  "%*",  "#endif",  "",  "#if YY_STACK_USED",  "static int yy_start_stack_ptr = 0;",  "static int yy_start_stack_depth = 0;",  "static int *yy_start_stack = 0;",  "#ifndef YY_NO_PUSH_STATE",  "static void yy_push_state YY_PROTO(( int new_state ));",  "#endif",  "#ifndef YY_NO_POP_STATE",  "static void yy_pop_state YY_PROTO(( void ));",  "#endif",  "#ifndef YY_NO_TOP_STATE",  "static int yy_top_state YY_PROTO(( void ));",  "#endif",  "",  "#else",  "#define YY_NO_PUSH_STATE 1",  "#define YY_NO_POP_STATE 1",  "#define YY_NO_TOP_STATE 1",  "#endif",  "",  "#ifdef YY_MALLOC_DECL",  "YY_MALLOC_DECL",  "#else",  "#if __STDC__",  "#ifndef __cplusplus",  "#include <stdlib.h>",  "#endif",  "#else",  "/* Just try to get by without declaring the routines.  This will fail",  " * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)",  " * or sizeof(void*) != sizeof(int).",  " */",  "#endif",  "#endif",  "",  "/* Amount of stuff to slurp up with each read. */",  "#ifndef YY_READ_BUF_SIZE",  "#define YY_READ_BUF_SIZE 8192",  "#endif",  "",  "/* Copy whatever the last rule matched to the standard output. */",  "",  "#ifndef ECHO",  "%- Standard (non-C++) definition",  "/* This used to be an fputs(), but since the string might contain NUL's,",  " * we now use fwrite().",  " */",  "#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )",  "%+ C++ definition",  "#define ECHO LexerOutput( yytext, yyleng )",  "%*",  "#endif",  "",  "/* Gets input and stuffs it into \"buf\".  number of characters read, or YY_NULL,",  " * is returned in \"result\".",  " */",  "#ifndef YY_INPUT",  "#define YY_INPUT(buf,result,max_size) \\",  "%% fread()/read() definition of YY_INPUT goes here unless we're doing C++",  "%+ C++ definition",  "	if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \\",  "		YY_FATAL_ERROR( \"input in flex scanner failed\" );",  "%*",  "#endif",  "",  "/* 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.",  " */",  "#ifndef yyterminate",  "#define yyterminate() return YY_NULL",  "#endif",  "",  "/* Number of entries by which start-condition stack grows. */",  "#ifndef YY_START_STACK_INCR",  "#define YY_START_STACK_INCR 25",  "#endif",  "",  "/* Report a fatal error. */",  "#ifndef YY_FATAL_ERROR",  "%-",  "#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )",  "%+",  "#define YY_FATAL_ERROR(msg) LexerError( msg )",  "%*",  "#endif",  "",  "/* Default declaration of generated scanner - a define so the user can",  " * easily add parameters.",  " */",  "#ifndef YY_DECL",  "%- Standard (non-C++) definition",  "#define YY_DECL int yylex YY_PROTO(( void ))",  "%+ C++ definition",  "#define YY_DECL int yyFlexLexer::yylex()",  "%*",  "#endif",  "",  "/* Code executed at the beginning of each rule, after yytext and yyleng",  " * have been set up.",  " */",  "#ifndef YY_USER_ACTION",  "#define YY_USER_ACTION",  "#endif",  "",  "/* Code executed at the end of each rule. */",  "#ifndef YY_BREAK",  "#define YY_BREAK break;",  "#endif",  "",  "%% YY_RULE_SETUP definition goes here",  "",  "YY_DECL",  "	{",  "	register yy_state_type yy_current_state;",  "	register char *yy_cp, *yy_bp;",  "	register int yy_act;",  "",  "%% user's declarations go here",  "",  "	if ( yy_init )",  "		{",  "		yy_init = 0;",  "",  "#ifdef YY_USER_INIT",  "		YY_USER_INIT;",  "#endif",  "",  "		if ( ! yy_start )",  "			yy_start = 1;	/* first start state */",  "",  "		if ( ! yyin )",  "%-",  "			yyin = stdin;",  "%+",  "			yyin = &cin;",  "%*",  "",  "		if ( ! yyout )",  "%-",  "			yyout = stdout;",  "%+",  "			yyout = &cout;",  "%*",  "",  "		if ( ! yy_current_buffer )",  "			yy_current_buffer =",  "				yy_create_buffer( yyin, YY_BUF_SIZE );",  "",  "		yy_load_buffer_state();",  "		}",  "",  "	while ( 1 )		/* loops until end-of-file is reached */",  "		{",  "%% yymore()-related code goes here",  "		yy_cp = yy_c_buf_p;",  "",  "		/* Support of yytext. */",  "		*yy_cp = yy_hold_char;",  "",  "		/* yy_bp points to the position in yy_ch_buf of the start of",  "		 * the current run.",  "		 */",  "		yy_bp = yy_cp;",  "",  "%% code to set up and find next match goes here",  "",  "yy_find_action:",  "%% code to find the action number goes here",  "",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -