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

📄 lexyy.c

📁 编译原理实验
💻 C
📖 第 1 页 / 共 2 页
字号:
case 3:
# line 31 "funcdraw.l"
;							// 白空
	YY_BREAK
case 4:
# line 32 "funcdraw.l"
LineNo ++;					// 换行
	YY_BREAK
// ------------------- 保留字与变量 -------------------
case 5:
# line 35 "funcdraw.l"
return ORIGIN;
	YY_BREAK
case 6:
# line 36 "funcdraw.l"
return SCALE;
	YY_BREAK
case 7:
# line 37 "funcdraw.l"
return ROT;
	YY_BREAK
case 8:
# line 38 "funcdraw.l"
return IS;
	YY_BREAK
case 9:
# line 39 "funcdraw.l"
return FOR;
	YY_BREAK
case 10:
# line 40 "funcdraw.l"
return FROM;
	YY_BREAK
case 11:
# line 41 "funcdraw.l"
return TO;
	YY_BREAK
case 12:
# line 42 "funcdraw.l"
return STEP;
	YY_BREAK
case 13:
# line 43 "funcdraw.l"
return DRAW;
	YY_BREAK
case 14:
# line 44 "funcdraw.l"
return T;
	YY_BREAK
// ------------------- 常量名、函数与符号 -------------------
case 15:
# line 47 "funcdraw.l"
tokens.type = CONST_ID; tokens.value   = 3.14159;	return CONST_ID;
	YY_BREAK
case 16:
# line 48 "funcdraw.l"
tokens.type = CONST_ID; tokens.value   = 2.71828;	return CONST_ID;
	YY_BREAK
case 17:
# line 49 "funcdraw.l"
tokens.type = FUNC;     tokens.FuncPtr = sin;		return FUNC;
	YY_BREAK
case 18:
# line 50 "funcdraw.l"
tokens.type = FUNC;     tokens.FuncPtr = cos;		return FUNC;
	YY_BREAK
case 19:
# line 51 "funcdraw.l"
tokens.type = FUNC;     tokens.FuncPtr = tan;		return FUNC;
	YY_BREAK
case 20:
# line 52 "funcdraw.l"
tokens.type = FUNC;     tokens.FuncPtr = exp;		return FUNC;
	YY_BREAK
case 21:
# line 53 "funcdraw.l"
tokens.type = FUNC;     tokens.FuncPtr = log;		return FUNC;
	YY_BREAK
case 22:
# line 54 "funcdraw.l"
tokens.type = FUNC;     tokens.FuncPtr = sqrt;		return FUNC;
	YY_BREAK
case 23:
# line 55 "funcdraw.l"
return MINUS;
	YY_BREAK
case 24:
# line 56 "funcdraw.l"
return PLUS;
	YY_BREAK
case 25:
# line 57 "funcdraw.l"
return MUL;
	YY_BREAK
case 26:
# line 58 "funcdraw.l"
return DIV;   
	YY_BREAK
case 27:
# line 59 "funcdraw.l"
return COMMA;
	YY_BREAK
case 28:
# line 60 "funcdraw.l"
return SEMICO;
	YY_BREAK
case 29:
# line 61 "funcdraw.l"
return L_BRACKET;
	YY_BREAK
case 30:
# line 62 "funcdraw.l"
return R_BRACKET;
	YY_BREAK
case 31:
# line 63 "funcdraw.l"
return POWER;
	YY_BREAK
// ------------------- 常量字面量 -------------------
case 32:
# line 66 "funcdraw.l"
{	tokens.value = atof(yytext) ;  
							tokens.type = CONST_ID;
							return CONST_ID ;
						}
	YY_BREAK
// ------------------- 其他均为错误 -------------------
case 33:
# line 71 "funcdraw.l"
return ERRTOKEN;
	YY_BREAK
case 34:
# line 72 "funcdraw.l"
return ERRTOKEN;
	YY_BREAK
// ------------------- 注释的匹配 -------------------
case 35:
# line 75 "funcdraw.l"
;
	YY_BREAK
case 36:
# line 76 "funcdraw.l"
BEGIN 0;  LineNo ++;
	YY_BREAK
case 37:
# line 78 "funcdraw.l"
BEGIN 0;
	YY_BREAK
case 38:
# line 79 "funcdraw.l"
;
	YY_BREAK
case 39:
# line 80 "funcdraw.l"
LineNo ++;
	YY_BREAK
case 40:
# line 81 "funcdraw.l"
ECHO;
	YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(comment_entry):
case YY_STATE_EOF(c_comment_entry):
    yyterminate();

		case YY_END_OF_BUFFER:
		    /* undo the effects of YY_DO_BEFORE_ACTION */
		    *yy_cp = yy_hold_char;

		    yytext = yy_bp;

		    switch ( yy_get_next_buffer() )
			{
			case EOB_ACT_END_OF_FILE:
			    {
			    if ( yywrap() )
				{
				/* note: because we've taken care in
				 * yy_get_next_buffer() to have set up yytext,
				 * we can now set up yy_c_buf_p so that if some
				 * total hoser (like flex itself) wants
				 * to call the scanner after we return the
				 * YY_NULL, it'll still work - another YY_NULL
				 * will get returned.
				 */
				yy_c_buf_p = yytext;

				yy_act = YY_STATE_EOF((yy_start - 1) / 2);
				goto do_action;
				}

			    else
				YY_NEW_FILE;
			    }
			    break;

			case EOB_ACT_RESTART_SCAN:
			    yy_c_buf_p = yytext;
			    yy_hold_char = *yy_c_buf_p;
			    break;

			case EOB_ACT_LAST_MATCH:
			    yy_c_buf_p = &yy_ch_buf[yy_n_chars];

			    yy_current_state = yy_get_previous_state();

			    yy_cp = yy_c_buf_p;
			    yy_bp = yytext;
			    continue; /* go to "YY_DO_BEFORE_ACTION" */
			}
		    break;

		default:
		    printf( "action # %d\n", yy_act );
		    YY_FATAL_ERROR( "fatal flex scanner internal error" );
		}

	    break; /* exit bogus while loop */
	    }
	}
    }


/* yy_get_next_buffer - try to read in new buffer
 *
 * synopsis
 *     int yy_get_next_buffer();
 *
 * returns a code representing an action
 *     EOB_ACT_LAST_MATCH -
 *     EOB_ACT_RESTART_SCAN - restart the scanner
 *     EOB_ACT_END_OF_FILE - end of file
 */

static int yy_get_next_buffer()

    {
	register unsigned char  *dest = yy_ch_buf;
	register unsigned char  *source = yytext - 1; /* copy prev. char, too */
    register int number_to_move, i;
    int ret_val;

    if ( yy_c_buf_p != &yy_ch_buf[yy_n_chars + 1] )
	{
	YY_FATAL_ERROR( "NULL in input" );
	/*NOTREACHED*/
	}

    /* try to read more data */

    /* first move last chars to start of buffer */
    number_to_move = yy_c_buf_p - yytext;

    for ( i = 0; i < number_to_move; ++i )
	*(dest++) = *(source++);

    if ( yy_eof_has_been_seen )
	/* don't do the read, it's not guaranteed to return an EOF,
	 * just force an EOF
	 */
	yy_n_chars = 0;

    else
	{
	int num_to_read = YY_BUF_SIZE - number_to_move - 1;

	if ( num_to_read > YY_READ_BUF_SIZE )
	    num_to_read = YY_READ_BUF_SIZE;

	/* read in more data */
	YY_INPUT( (&yy_ch_buf[number_to_move]), yy_n_chars, num_to_read );
	}

    if ( yy_n_chars == 0 )
	{
	if ( number_to_move == 1 )
	    ret_val = EOB_ACT_END_OF_FILE;
	else
	    ret_val = EOB_ACT_LAST_MATCH;

	yy_eof_has_been_seen = 1;
	}

    else
	ret_val = EOB_ACT_RESTART_SCAN;

    yy_n_chars += number_to_move;
    yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
    yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

    /* yytext begins at the second character in
     * yy_ch_buf; the first character is the one which
     * preceded it before reading in the latest buffer;
     * it needs to be kept around in case it's a
     * newline, so yy_get_previous_state() will have
     * with '^' rules active
     */

    yytext = &yy_ch_buf[1];

    return ( ret_val );
    }


/* yy_get_previous_state - get the state just before the EOB char was reached
 *
 * synopsis
 *     yy_state_type yy_get_previous_state();
 */

static yy_state_type yy_get_previous_state()

    {
    register yy_state_type yy_current_state;
	register unsigned char  *yy_cp;

    yy_current_state = yy_start;

    for ( yy_cp = yytext; yy_cp < yy_c_buf_p; ++yy_cp )
	{
	register unsigned char   yy_c = yy_ec[*yy_cp];
	if ( yy_accept[yy_current_state] )
	    {
	    yy_last_accepting_state = yy_current_state;
	    yy_last_accepting_cpos = yy_cp;
	    }
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
	    {
	    yy_current_state = yy_def[yy_current_state];
	    if ( yy_current_state >= 125 )
		yy_c = yy_meta[yy_c];
	    }
	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
	}

    return ( yy_current_state );
    }


static void yyunput( int c, register unsigned char  *yy_bp )
    {
	register unsigned char  *yy_cp = yy_c_buf_p;

    *yy_cp = yy_hold_char; /* undo effects of setting up yytext */

    if ( yy_cp < yy_ch_buf + 2 )
	{ /* need to shift things up to make room */
	register int number_to_move = yy_n_chars + 2; /* +2 for EOB chars */
	register unsigned char  *dest = &yy_ch_buf[YY_BUF_SIZE + 2];
	register unsigned char  *source = &yy_ch_buf[number_to_move];

	while ( source > yy_ch_buf )
	    *--dest = *--source;

	yy_cp += dest - source;
	yy_bp += dest - source;

	if ( yy_cp < yy_ch_buf + 2 )
	    YY_FATAL_ERROR( "flex scanner push-back overflow" );
	}

    if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
	yy_cp[-2] = '\n';

    *--yy_cp = c;

    YY_DO_BEFORE_ACTION; /* set up yytext again */
    }


static int input()

    {
    int c;
	unsigned char  *yy_cp = yy_c_buf_p;

    *yy_cp = yy_hold_char;

    if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
	{ /* need more input */
	yytext = yy_c_buf_p;
	++yy_c_buf_p;

	switch ( yy_get_next_buffer() )
	    {
	    /* this code, unfortunately, is somewhat redundant with
	     * that above
	     */
	    case EOB_ACT_END_OF_FILE:
		{
		if ( yywrap() )
		    {
		    yy_c_buf_p = yytext;
		    return ( EOF );
		    }

		yy_ch_buf[0] = '\n';
		yy_n_chars = 1;
		yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
		yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
		yy_eof_has_been_seen = 0;
		yytext = yy_c_buf_p = &yy_ch_buf[1];
		yy_hold_char = *yy_c_buf_p;

		return ( input() );
		}
		break;

	    case EOB_ACT_RESTART_SCAN:
		yy_c_buf_p = yytext;
		break;

	    case EOB_ACT_LAST_MATCH:
		YY_FATAL_ERROR( "unexpected last match in input()" );
	    }
	}

    c = *yy_c_buf_p;
    yy_hold_char = *++yy_c_buf_p;

    return ( c );
    }


static void yyrestart( FILE *input_file )
    {
    if ( yyin != stdin )
	fclose( yyin );

    yyin = input_file;
    yy_init = 1;
    }
# line 81 "funcdraw.l"

⌨️ 快捷键说明

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