亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? parse.y

?? 編譯原理(Flex):生成詞法和語法分析程序的源代碼的程序。
?? Y
?? 第 1 頁 / 共 2 頁
字號:
/* parse.y - parser for flex input */

%token CHAR NUMBER SECTEND SCDECL XSCDECL NAME PREVCCL EOF_OP
%token OPTION_OP OPT_OUTFILE OPT_PREFIX OPT_YYCLASS

%token CCE_ALNUM CCE_ALPHA CCE_BLANK CCE_CNTRL CCE_DIGIT CCE_GRAPH
%token CCE_LOWER CCE_PRINT CCE_PUNCT CCE_SPACE CCE_UPPER CCE_XDIGIT

%{
/*-
 * Copyright (c) 1990 The Regents of the University of California.
 * All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Vern Paxson.
 * 
 * The United States Government has rights in this work pursuant
 * to contract no. DE-AC03-76SF00098 between the United States
 * Department of Energy and the University of California.
 *
 * Redistribution and use in source and binary forms are permitted provided
 * that: (1) source distributions retain this entire copyright notice and
 * comment, and (2) distributions including binaries display the following
 * acknowledgement:  ``This product includes software developed by the
 * University of California, Berkeley and its contributors'' in the
 * documentation or other materials provided with the distribution and in
 * all advertising materials mentioning features or use of this software.
 * Neither the name of the University nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

/* $Header: /home/daffy/u0/vern/flex/RCS/parse.y,v 2.28 95/04/21 11:51:51 vern Exp $ */


/* Some versions of bison are broken in that they use alloca() but don't
 * declare it properly.  The following is the patented (just kidding!)
 * #ifdef chud to fix the problem, courtesy of Francois Pinard.
 */
#ifdef YYBISON
/* AIX requires this to be the first thing in the file.  What a piece.  */
# ifdef _AIX
 #pragma alloca
# endif
#endif

#include "flexdef.h"

/* The remainder of the alloca() cruft has to come after including flexdef.h,
 * so HAVE_ALLOCA_H is (possibly) defined.
 */
#ifdef YYBISON
# ifdef __GNUC__
#  ifndef alloca
#   define alloca __builtin_alloca
#  endif
# else
#  if HAVE_ALLOCA_H
#   include <alloca.h>
#  else
#   ifdef __hpux
void *alloca ();
#   else
#    ifdef __TURBOC__
#     include <malloc.h>
#    else
char *alloca ();
#    endif
#   endif
#  endif
# endif
#endif

/* Bletch, ^^^^ that was ugly! */


int pat, scnum, eps, headcnt, trailcnt, anyccl, lastchar, i, rulelen;
int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;

int *scon_stk;
int scon_stk_ptr;

static int madeany = false;  /* whether we've made the '.' character class */
int previous_continued_action;	/* whether the previous rule's action was '|' */

/* Expand a POSIX character class expression. */
#define CCL_EXPR(func) \
	{ \
	int c; \
	for ( c = 0; c < csize; ++c ) \
		if ( isascii(c) && func(c) ) \
			ccladd( currccl, c ); \
	}

/* While POSIX defines isblank(), it's not ANSI C. */
#define IS_BLANK(c) ((c) == ' ' || (c) == '\t')

/* On some over-ambitious machines, such as DEC Alpha's, the default
 * token type is "long" instead of "int"; this leads to problems with
 * declaring yylval in flexdef.h.  But so far, all the yacc's I've seen
 * wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the
 * following should ensure that the default token type is "int".
 */
#define YYSTYPE int

%}

%%
goal		:  initlex sect1 sect1end sect2 initforrule
			{ /* add default rule */
			int def_rule;

			pat = cclinit();
			cclnegate( pat );

			def_rule = mkstate( -pat );

			/* Remember the number of the default rule so we
			 * don't generate "can't match" warnings for it.
			 */
			default_rule = num_rules;

			finish_rule( def_rule, false, 0, 0 );

			for ( i = 1; i <= lastsc; ++i )
				scset[i] = mkbranch( scset[i], def_rule );

			if ( spprdflt )
				add_action(
				"YY_FATAL_ERROR( \"flex scanner jammed\" )" );
			else
				add_action( "ECHO" );

			add_action( ";\n\tYY_BREAK\n" );
			}
		;

initlex		:
			{ /* initialize for processing rules */

			/* Create default DFA start condition. */
			scinstal( "INITIAL", false );
			}
		;

sect1		:  sect1 startconddecl namelist1
		|  sect1 options
		|
		|  error
			{ synerr( "unknown error processing section 1" ); }
		;

sect1end	:  SECTEND
			{
			check_options();
			scon_stk = allocate_integer_array( lastsc + 1 );
			scon_stk_ptr = 0;
			}
		;

startconddecl	:  SCDECL
			{ xcluflg = false; }

		|  XSCDECL
			{ xcluflg = true; }
		;

namelist1	:  namelist1 NAME
			{ scinstal( nmstr, xcluflg ); }

		|  NAME
			{ scinstal( nmstr, xcluflg ); }

		|  error
			{ synerr( "bad start condition list" ); }
		;

options		:  OPTION_OP optionlist
		;

optionlist	:  optionlist option
		|
		;

option		:  OPT_OUTFILE '=' NAME
			{
			outfilename = copy_string( nmstr );
			did_outfilename = 1;
			}
		|  OPT_PREFIX '=' NAME
			{ prefix = copy_string( nmstr ); }
		|  OPT_YYCLASS '=' NAME
			{ yyclass = copy_string( nmstr ); }
		;

sect2		:  sect2 scon initforrule flexrule '\n'
			{ scon_stk_ptr = $2; }
		|  sect2 scon '{' sect2 '}'
			{ scon_stk_ptr = $2; }
		|
		;

initforrule	:
			{
			/* Initialize for a parse of one rule. */
			trlcontxt = variable_trail_rule = varlength = false;
			trailcnt = headcnt = rulelen = 0;
			current_state_type = STATE_NORMAL;
			previous_continued_action = continued_action;
			in_rule = true;

			new_rule();
			}
		;

flexrule	:  '^' rule
			{
			pat = $2;
			finish_rule( pat, variable_trail_rule,
				headcnt, trailcnt );

			if ( scon_stk_ptr > 0 )
				{
				for ( i = 1; i <= scon_stk_ptr; ++i )
					scbol[scon_stk[i]] =
						mkbranch( scbol[scon_stk[i]],
								pat );
				}

			else
				{
				/* Add to all non-exclusive start conditions,
				 * including the default (0) start condition.
				 */

				for ( i = 1; i <= lastsc; ++i )
					if ( ! scxclu[i] )
						scbol[i] = mkbranch( scbol[i],
									pat );
				}

			if ( ! bol_needed )
				{
				bol_needed = true;

				if ( performance_report > 1 )
					pinpoint_message(
			"'^' operator results in sub-optimal performance" );
				}
			}

		|  rule
			{
			pat = $1;
			finish_rule( pat, variable_trail_rule,
				headcnt, trailcnt );

			if ( scon_stk_ptr > 0 )
				{
				for ( i = 1; i <= scon_stk_ptr; ++i )
					scset[scon_stk[i]] =
						mkbranch( scset[scon_stk[i]],
								pat );
				}

			else
				{
				for ( i = 1; i <= lastsc; ++i )
					if ( ! scxclu[i] )
						scset[i] =
							mkbranch( scset[i],
								pat );
				}
			}

		|  EOF_OP
			{
			if ( scon_stk_ptr > 0 )
				build_eof_action();
	
			else
				{
				/* This EOF applies to all start conditions
				 * which don't already have EOF actions.
				 */
				for ( i = 1; i <= lastsc; ++i )
					if ( ! sceof[i] )
						scon_stk[++scon_stk_ptr] = i;

				if ( scon_stk_ptr == 0 )
					warn(
			"all start conditions already have <<EOF>> rules" );

				else
					build_eof_action();
				}
			}

		|  error
			{ synerr( "unrecognized rule" ); }
		;

scon_stk_ptr	:
			{ $$ = scon_stk_ptr; }
		;

scon		:  '<' scon_stk_ptr namelist2 '>'
			{ $$ = $2; }

		|  '<' '*' '>'
			{
			$$ = scon_stk_ptr;

			for ( i = 1; i <= lastsc; ++i )
				{
				int j;

				for ( j = 1; j <= scon_stk_ptr; ++j )
					if ( scon_stk[j] == i )
						break;

				if ( j > scon_stk_ptr )
					scon_stk[++scon_stk_ptr] = i;
				}
			}

		|
			{ $$ = scon_stk_ptr; }
		;

namelist2	:  namelist2 ',' sconname

		|  sconname

		|  error
			{ synerr( "bad start condition list" ); }
		;

sconname	:  NAME
			{
			if ( (scnum = sclookup( nmstr )) == 0 )
				format_pinpoint_message(
					"undeclared start condition %s",
					nmstr );
			else
				{
				for ( i = 1; i <= scon_stk_ptr; ++i )
					if ( scon_stk[i] == scnum )
						{
						format_warn(
							"<%s> specified twice",
							scname[scnum] );
						break;
						}

				if ( i > scon_stk_ptr )
					scon_stk[++scon_stk_ptr] = scnum;
				}
			}
		;

rule		:  re2 re
			{
			if ( transchar[lastst[$2]] != SYM_EPSILON )
				/* Provide final transition \now/ so it
				 * will be marked as a trailing context
				 * state.
				 */
				$2 = link_machines( $2,
						mkstate( SYM_EPSILON ) );

			mark_beginning_as_normal( $2 );
			current_state_type = STATE_NORMAL;

			if ( previous_continued_action )
				{
				/* We need to treat this as variable trailing
				 * context so that the backup does not happen
				 * in the action but before the action switch
				 * statement.  If the backup happens in the
				 * action, then the rules "falling into" this
				 * one's action will *also* do the backup,
				 * erroneously.
				 */
				if ( ! varlength || headcnt != 0 )
					warn(
		"trailing context made variable due to preceding '|' action" );

				/* Mark as variable. */
				varlength = true;
				headcnt = 0;
				}

			if ( lex_compat || (varlength && headcnt == 0) )
				{ /* variable trailing context rule */
				/* Mark the first part of the rule as the
				 * accepting "head" part of a trailing
				 * context rule.
				 *
				 * By the way, we didn't do this at the
				 * beginning of this production because back
				 * then current_state_type was set up for a
				 * trail rule, and add_accept() can create
				 * a new state ...
				 */
				add_accept( $1,
					num_rules | YY_TRAILING_HEAD_MASK );
				variable_trail_rule = true;
				}
			
			else
				trailcnt = rulelen;

			$$ = link_machines( $1, $2 );
			}

		|  re2 re '$'
			{ synerr( "trailing context used twice" ); }

		|  re '$'
			{
			headcnt = 0;
			trailcnt = 1;
			rulelen = 1;
			varlength = false;

			current_state_type = STATE_TRAILING_CONTEXT;

			if ( trlcontxt )
				{
				synerr( "trailing context used twice" );
				$$ = mkstate( SYM_EPSILON );
				}

			else if ( previous_continued_action )
				{
				/* See the comment in the rule for "re2 re"
				 * above.
				 */
				warn(
		"trailing context made variable due to preceding '|' action" );

				varlength = true;
				}

			if ( lex_compat || varlength )
				{
				/* Again, see the comment in the rule for
				 * "re2 re" above.
				 */
				add_accept( $1,
					num_rules | YY_TRAILING_HEAD_MASK );
				variable_trail_rule = true;
				}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃91丨九色丨蝌蚪91桃色| 制服丝袜成人动漫| 精品国产青草久久久久福利| 日本成人中文字幕在线视频| 欧美二区三区的天堂| 亚洲成av人片一区二区三区| 99国产精品视频免费观看| 中文字幕一区二区三区在线播放| 大胆欧美人体老妇| 1024精品合集| 欧美日韩国产欧美日美国产精品| 视频一区二区国产| 欧美sm极限捆绑bd| a在线欧美一区| 亚洲一区二区美女| 日韩精品专区在线影院观看 | 综合欧美亚洲日本| 色94色欧美sute亚洲13| 日日嗨av一区二区三区四区| 久久先锋影音av鲁色资源| 99re视频精品| 国产亚洲精久久久久久| 色综合久久中文综合久久牛| 日韩av电影天堂| 国产精品美女视频| 9191国产精品| 99在线精品观看| 日韩精品成人一区二区三区| 欧美极品aⅴ影院| 在线观看国产精品网站| 精品一区二区三区蜜桃| 奇米精品一区二区三区在线观看| 欧美国产在线观看| 91麻豆精品国产91久久久久| 懂色av中文字幕一区二区三区| 一区二区三区加勒比av| 欧美精品一区二区精品网| 色婷婷久久久久swag精品 | 欧美主播一区二区三区| 韩国精品免费视频| 亚洲一区二区成人在线观看| 久久精品网站免费观看| 欧美妇女性影城| 99精品视频免费在线观看| 美女精品自拍一二三四| 一级精品视频在线观看宜春院 | 日本不卡在线视频| 亚洲九九爱视频| 久久久.com| 欧美一级欧美三级在线观看| 欧美在线色视频| 成人涩涩免费视频| 韩国av一区二区三区在线观看 | 免费观看成人av| 亚洲一区二区四区蜜桃| 国产精品网站一区| 久久久综合视频| 欧美一级视频精品观看| 欧美老年两性高潮| 欧美丝袜自拍制服另类| 91在线你懂得| 97se亚洲国产综合自在线不卡| 国产一区二区中文字幕| 久久精品国产精品亚洲综合| 日日骚欧美日韩| 亚洲成人免费看| 亚洲动漫第一页| 亚洲图片欧美色图| 一区二区三区日本| 亚洲狠狠丁香婷婷综合久久久| 中文字幕精品一区| 中文av一区特黄| 久久精品人人做人人综合| 精品国产污网站| 26uuu另类欧美| ww亚洲ww在线观看国产| 久久综合中文字幕| 久久精品一区二区三区四区| 精品国产伦一区二区三区观看方式| 3d成人动漫网站| 51精品久久久久久久蜜臀| 欧美日韩国产欧美日美国产精品| 欧美性生活影院| 欧美精品在线一区二区三区| 9191国产精品| 日韩精品一区二区三区四区视频 | 国产精品久久久久久久久久久免费看| 精品国产免费视频| 久久午夜免费电影| 中日韩av电影| 成人欧美一区二区三区小说| 中文字幕在线视频一区| 亚洲精品国产精品乱码不99| 亚洲综合免费观看高清完整版在线| 洋洋av久久久久久久一区| 天天综合色天天综合色h| 麻豆精品视频在线观看视频| 韩国女主播一区| 91亚洲男人天堂| 欧美浪妇xxxx高跟鞋交| 精品久久国产老人久久综合| 欧美国产精品久久| 亚洲综合在线观看视频| 美女在线观看视频一区二区| 韩国av一区二区三区四区| 石原莉奈在线亚洲二区| 国产午夜精品美女毛片视频| 在线观看中文字幕不卡| 在线播放视频一区| 久久久777精品电影网影网 | 亚洲视频一二区| 午夜精品久久久久久久久久| 九九久久精品视频| 97精品视频在线观看自产线路二| 3751色影院一区二区三区| 久久品道一品道久久精品| 亚洲欧美日韩国产中文在线| 亚洲不卡一区二区三区| 国产很黄免费观看久久| 欧洲精品在线观看| 久久中文字幕电影| 一二三四区精品视频| 韩国av一区二区| 欧美午夜电影网| 日本一区二区三区四区在线视频| 亚洲在线观看免费| 国产成人免费xxxxxxxx| 在线播放欧美女士性生活| 国产精品丝袜黑色高跟| 日本视频免费一区| 不卡av免费在线观看| 日韩一级二级三级| 亚洲黄色尤物视频| 99精品视频一区二区| 4hu四虎永久在线影院成人| 国产精品动漫网站| 极品少妇一区二区| 欧美日韩久久久一区| 国产精品久久毛片| 久草在线在线精品观看| 欧美性大战久久久久久久| 国产精品亲子伦对白| 麻豆精品国产91久久久久久| 欧美在线|欧美| 中文字幕在线不卡| 国产精品性做久久久久久| 欧美高清一级片在线| 亚洲免费成人av| 99久久精品99国产精品| 成人美女在线视频| 久久午夜羞羞影院免费观看| 日韩成人免费在线| 欧美日韩aaa| 欧美成人精品二区三区99精品| 亚洲精品成a人| 99久久精品国产网站| 国产精品区一区二区三| 国产ts人妖一区二区| 久久中文娱乐网| 国产一区二区三区四区在线观看| 欧美一区二区在线视频| 日日摸夜夜添夜夜添国产精品| 欧美天堂亚洲电影院在线播放| 艳妇臀荡乳欲伦亚洲一区| 在线观看欧美黄色| 亚洲一区在线电影| 欧美一级夜夜爽| 丝袜美腿成人在线| 91精品综合久久久久久| 午夜精品久久久久久久99水蜜桃 | 欧美一区二区人人喊爽| 日韩国产在线观看一区| 欧美一区二区视频在线观看2022 | 欧美日韩国产免费| 亚洲va欧美va人人爽午夜| 欧美美女激情18p| 日本不卡视频一二三区| 欧美电影免费观看高清完整版在线观看| 日韩国产精品久久| 久久青草国产手机看片福利盒子 | 香港成人在线视频| 五月天久久比比资源色| 欧美一区二区美女| 国产综合久久久久影院| 国产精品午夜在线| 在线观看中文字幕不卡| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩精品一区二区在线观看| 国产精品中文字幕日韩精品| 国产精品久久久久影院亚瑟| 91麻豆国产自产在线观看| 亚洲福利视频一区二区| 精品三级av在线| 99久久免费国产| 图片区小说区国产精品视频| 日韩精品一区二区三区视频播放| 成人小视频免费在线观看| 亚洲亚洲人成综合网络| 日韩精品中文字幕一区| 成av人片一区二区|