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

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

?? preproce.c

?? Mehldau和Myer的Agrep3版本
?? C
字號:
/* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */

/* substitute metachar with special symbol                               */
/* if regular expression, then set flag REGEX                            */

/* if REGEX and MULTIPAT then report error message,                      */

/* -w only for single word pattern. If WORDBOUND & MULTIWORD error       */
/* process start of line, endof line symbol,                             */
/* process -w WORDBOUND option, append special symbol at begin&end of    */
/* process -d option before this routine                                 */
/* the delimiter pattern is in D_pattern (need to end with '; ')         */

/* if '-t' (suggestion: how about -B) the pattern is passed to sgrep     */
/* and doesn't go here                                                   */
/* in that case, -d is ignored? or not necessary                         */
/* upon return, Pattern contains the pattern to be processed by maskgen  */
/* D_pattern contains transformed D_pattern                              */

#include "agrep.h"

extern int PAT_FILE, PAT_BUFFER;
extern ParseTree *AParse;
extern int WHOLELINE, REGEX, FASTREGEX, RE_ERR, DELIMITER, TAIL, WORDBOUND;
extern int HEAD;
extern CHAR Progname[];
extern int D_length, tc_D_length;
extern CHAR tc_D_pattern[MaxDelimit * 2];
extern int table[WORD][WORD];
extern int agrep_initialfd;
extern int EXITONERROR;
#ifndef __BORLANDC__
extern int errno;
#endif

extern int  multifd;
extern char *multibuf;
extern int  multilen;
extern int anum_terminals;
extern ParseTree aterminals[MAXNUM_PAT];
extern char FREQ_FILE[MAX_LINE_LEN], HASH_FILE[MAX_LINE_LEN], STRING_FILE[MAX_LINE_LEN];	/* interfacing with tcompress */
extern int AComplexBoolean;

#ifdef _WIN32
int  asplit_pattern();       /* asplit.c */
int  asplit_terminal();      /* asplit.c */
int  init();                 /* follow.c */
void destroy_tree();         /* putils.c */
int  quick_tcompress();      /* preproce.c */
#endif

int
preprocess(D_pattern, Pattern)   /* need two parameters  */
CHAR D_pattern[], Pattern[];
{
	CHAR temp[Maxline], *r_pat, *old_pat;  /* r_pat for r.e. */
	CHAR old_D_pat[MaxDelimit*2];
	int i, j=0, rp=0, m, t=0, num_pos, ANDON = 0;
	int d_end ;  
	int IN_RANGE=0;
	int ret1, ret2;

#if	DEBUG
	fprintf(stderr, "preprocess: m=%d, pat=%s, PAT_FILE=%d, PAT_BUFFER=%d\n", strlen(Pattern), Pattern, PAT_FILE, PAT_BUFFER);
#endif

	if ((m = strlen(Pattern)) <= 0) return 0;
	
	if (PAT_FILE || PAT_BUFFER) return 0;

	REGEX = OFF;
	FASTREGEX = OFF;
	old_pat = Pattern; /* to remember the starting position */

	/* Check if pattern is a concatenation of ands OR ors of simple patterns */
	
	multibuf = (char *)malloc(m * 2 + 2);	/* worst case: a,a,a,a,a,a */
	
	if (multibuf == NULL) goto normal_processing;
	/* if (WORDBOUND) goto normal_processing; */

	multilen = 0;
	AParse = 0;
	ret1 = ret2 = 0;
	if (((ret1 = asplit_pattern(Pattern, m, aterminals, &anum_terminals, &AParse)) <= 0) ||	/* can change the pattern if simple boolean with {} */
	    ((ret2 = asplit_terminal(0, anum_terminals, multibuf, &multilen)) <= 0) ||
	    ((ret2 == 1) && !(aterminals[0].op & NOTPAT))) {	/* must do normal processing */
		if (AComplexBoolean && (AParse != NULL)) destroy_tree(AParse);	/* so that direct exec invocations don't use AParse by mistake! */
#if	DEBUG
		fprintf(stderr, "preprocess: split_pat = %d, split_term = %d, #terms = %d\n", ret1, ret2, anum_terminals);
#endif	/*DEBUG*/

		/*
		if (ret2 == 1) {
			strcpy(Pattern, aterminals[0].data.leaf.value);
			m = strlen(Pattern);
		}
		*/
		
		m = strlen(Pattern);
		AParse = 0;
		free(multibuf);
		multibuf = NULL;
		multilen = 0;
		goto normal_processing;
	}

	/* This is quick processing */
	if (AParse != 0) {	/* successfully converted to ANDPAT/ORPAT */
	
		PAT_BUFFER = 1;
		
		/* printf("preprocess(): converted= %d, patterns= %s", AParse, multibuf); */
		/* Now I have to process the delimiter if any */
		
		if (DELIMITER) {
		
			/* D_pattern is "<PAT>; ", D_length is 1 + length of string PAT: see agrep.c/'d' */
			
			preprocess_delimiter(D_pattern+1, D_length - 1, D_pattern, &D_length);
			
			/* D_pattern is the exact stuff we want to match, D_length is its strlen */
			
			if ((tc_D_length = quick_tcompress(FREQ_FILE, HASH_FILE, D_pattern, D_length, tc_D_pattern, MaxDelimit*2, TC_EASYSEARCH)) <= 0) {
				strcpy(tc_D_pattern, D_pattern);
				tc_D_length = D_length;
			}
			
			/* printf("mgrep's delim=%s,%d tc_delim=%s,%d\n", D_pattern, D_length, tc_D_pattern, tc_D_length); */
		}
		return 0;
	}
	
	/* else either unknown character, one simple pattern or none at all */

normal_processing:

	for(i=0; i< m; i++) {
		if(Pattern[i] == '\\') i++;
		else if(Pattern[i] == '|' || Pattern[i] == '*') REGEX = ON;
	}

	r_pat = (CHAR *) malloc(strlen(Pattern)+2*strlen(D_pattern) + 8);	/* bug-report, From: Chris Dalton <crd@hplb.hpl.hp.com> */
	strcpy(temp, D_pattern);
	d_end = t = strlen(temp);  /* size of D_pattern, including '; ' */
	
	if (WHOLELINE) { 
		temp[t++] = LANGLE; 
		temp[t++] = NNLINE; 
		temp[t++] = RANGLE;
		temp[t] = '\0';
		strcat(temp, Pattern);
		m = strlen(temp);
		temp[m++] = LANGLE; 
		temp[m++] = '\n'; 
		temp[m++] = RANGLE; 
		temp[m] = '\0';  
	}
	else {
		if (WORDBOUND) { 
			temp[t++] = LANGLE; 
			temp[t++] = WORDB; 
			temp[t++] = RANGLE;
			temp[t] = '\0'; 
		}
		strcat(temp, Pattern);
		m = strlen(temp);
		if (WORDBOUND) { 
			temp[m++] = LANGLE; 
			temp[m++] = WORDB; 
			temp[m++] = RANGLE; 
		}
		temp[m] = '\0';
	}
	
	/* now temp contains augmented pattern , m it's size */
	
	D_length = 0;
	
	for (i=0, j=0; i< d_end-2; i++) {
	
		switch(temp[i]) 
		
		{
		case '\\' : 
			i++; 
			Pattern[j++] = temp[i];
			old_D_pat[D_length++] = temp[i];
			break;
		case '<'  : 
			Pattern[j++] = LANGLE;
			break;
		case '>'  : 
			Pattern[j++] = RANGLE;
			break;
		case '^'  : 
			Pattern[j++] = '\n';
			old_D_pat[D_length++] = temp[i];
			break;
		case '$'  : 
			Pattern[j++] = '\n';
			old_D_pat[D_length++] = temp[i];
			break;
		default  :  
			Pattern[j++] = temp[i];
			old_D_pat[D_length++] = temp[i];
			break;
		}
	}
	if(D_length > MAXDELIM) {
		fprintf(stderr, "%s: delimiter pattern too long (has > %d chars)\n", Progname, MAXDELIM);
		free(r_pat);
		if (!EXITONERROR) {
			errno = AGREP_ERROR;
			return -1;
		}
		else exit(2);
	}

	Pattern[j++] = ANDPAT;
	old_D_pat[D_length] = '\0';
	strcpy(D_pattern, old_D_pat);
	D_length++;
	
	/* Pattern[j++] = ' '; */
	
	Pattern[j] = '\0';
	rp = 0;
	
	if(REGEX) {
		r_pat[rp++] = '.';    /* if REGEX: always append '.' in front */
		r_pat[rp++] = '(';
		Pattern[j++] = NOCARE;
		HEAD = ON;
	}
	
	for (i=d_end; i < m ; i++)
	{
		switch(temp[i]) 
		{
		case '\\': 
			i++;  
			Pattern[j++] = temp[i]; 
			r_pat[rp++] = 'o';   /* the symbol doesn't matter */
			break;
		case '#':  
			FASTREGEX = ON;
			if(REGEX) {
				Pattern[j++] = NOCARE;
				r_pat[rp++] = '.';
				r_pat[rp++] = '*';
				break; 
			}
			Pattern[j++] = WILDCD;
			break; 
		case '(':  
			Pattern[j++] = LPARENT; 
			r_pat[rp++] = '(';     
			break;
		case ')':  
			Pattern[j++] = RPARENT; 
			r_pat[rp++] = ')'; 
			break;
		case '[':  
			Pattern[j++] = LRANGE;  
			r_pat[rp++] = '[';
			IN_RANGE = ON;
			break;
		case ']':  
			Pattern[j++] = RRANGE;  
			r_pat[rp++] = ']'; 
			IN_RANGE = OFF;
			break;
		case '<':  
			Pattern[j++] = LANGLE;  
			break;
		case '>':  
			Pattern[j++] = RANGLE;  
			break;
		case '^':  
			if (temp[i-1] == '[') Pattern[j++] = NOTSYM;
			else Pattern[j++] = '\n';
			r_pat[rp++] = '^';
			break;
		case '$':  
			Pattern[j++] = '\n'; 
			r_pat[rp++] = '$';
			break;
		case '.':  
			Pattern[j++] = NOCARE;
			r_pat[rp++] = '.';
			break;
		case '*':  
			Pattern[j++] = STAR; 
			r_pat[rp++] = '*';
			break;
		case '|':  
			Pattern[j++] = ORSYM; 
			r_pat[rp++] = '|';
			break;
		case ',':  
			Pattern[j++] = ORPAT;  
			RE_ERR = ON; 
			break;
		case ';':  
			if(ANDON) RE_ERR = ON; 
			Pattern[j++] = ANDPAT;
			ANDON = ON;
			break;
		case '-':  
			if(IN_RANGE) {
				Pattern[j++] = HYPHEN; 
				r_pat[rp++] = '-';
			}
			else { 
				Pattern[j++] = temp[i];
				r_pat[rp++] = temp[i];
			}  
			break;
		default:
			if (temp[i]==NNLINE) {
				Pattern[j++] = temp[i];
				r_pat[rp++] = 'N';
			}
			else {
				Pattern[j++] = temp[i]; 
				r_pat[rp++] = temp[i];
			}
			break;
		}
	}
	
	if(REGEX) {           /* append ').' at end of regular expression */
		r_pat[rp++] = ')';
		r_pat[rp++] = '.';
		Pattern[j++] = NOCARE;
		TAIL = ON;
	}
	
	Pattern[j] = '\0'; 
	m = j;
	r_pat[rp] = '\0';
	
	if(REGEX)
	{  
		if(DELIMITER || WORDBOUND)  {
			fprintf(stderr, "%s: -d or -w option is not supported for this pattern\n", Progname);
			free(r_pat);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
		if(RE_ERR) {
			fprintf(stderr, "%s: illegal regular expression\n", Progname);
			free(r_pat);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
		
		while ((*Pattern != NOCARE) && (m-- > 0)) Pattern++;  /* point to . */
		
		num_pos = init(r_pat, table);
		if(num_pos <= 0) {
			fprintf(stderr, "%s: illegal regular expression\n", Progname);
			free(r_pat);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
		if(num_pos > 30) {
			fprintf(stderr, "%s: regular expression too long\n", Progname);
			free(r_pat);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
		
		strcpy(old_pat, Pattern); /* do real change to the Pattern to be returned */

		free(r_pat);
		return 0;
	} /* if regex */

	free(r_pat);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美人成免费网站| 99天天综合性| 日韩1区2区3区| 日韩在线一二三区| 秋霞av亚洲一区二区三| 日韩精品国产精品| 免费成人结看片| 亚洲国产三级在线| 国产欧美综合在线观看第十页| 日韩免费观看2025年上映的电影| 日韩一区二区三区在线观看| 精品1区2区在线观看| 国产亚洲精久久久久久| 亚洲特黄一级片| 亚洲一区二区综合| 午夜视频久久久久久| 秋霞电影一区二区| 国产成人精品网址| 91毛片在线观看| 日韩一区二区免费在线电影| 精品久久久久久久久久久久包黑料 | 亚洲成人av中文| 蜜桃一区二区三区在线观看| 国产在线观看免费一区| 国产成人小视频| 欧美视频在线观看一区二区| 日韩午夜激情电影| 国产婷婷色一区二区三区四区 | 一本大道久久a久久精品综合| 欧美最猛性xxxxx直播| 精品国产青草久久久久福利| 国产精品欧美一区喷水| 亚瑟在线精品视频| 国产一区二区三区在线观看免费视频 | 亚洲成年人网站在线观看| 久久机这里只有精品| 99久久综合色| 亚洲精品一区二区在线观看| 亚洲美女在线国产| 极品瑜伽女神91| 欧美网站一区二区| 国产人伦精品一区二区| 日韩av中文在线观看| 不卡区在线中文字幕| 精品乱人伦一区二区三区| 亚洲已满18点击进入久久| 国产在线国偷精品产拍免费yy | 日韩精品一区二区三区在线观看| 国产精品久久久一本精品| 美国欧美日韩国产在线播放| 色综合天天综合网天天看片| 久久久久99精品国产片| 日韩影院在线观看| 欧美专区亚洲专区| 国产精品网友自拍| 国产老肥熟一区二区三区| 欧美精品久久久久久久多人混战| 亚洲国产精品av| 精品一区二区三区免费观看| 正在播放一区二区| 亚洲成a人在线观看| 欧美中文字幕一二三区视频| 亚洲视频资源在线| 94色蜜桃网一区二区三区| 国产欧美va欧美不卡在线| 久久国产精品99久久久久久老狼| 欧美精品久久一区| 日本视频在线一区| 欧美一区三区四区| 免费在线观看视频一区| 日韩一级二级三级| 美女mm1313爽爽久久久蜜臀| 日韩午夜在线影院| 美女视频黄a大片欧美| 欧美成人性福生活免费看| 久久99精品久久久久| 精品国产乱码久久久久久浪潮| 久久99精品久久久| 国产午夜精品一区二区| 极品尤物av久久免费看| 久久婷婷成人综合色| 国产精品99久久久久久有的能看 | av在线一区二区三区| 久久久99精品久久| 成人免费福利片| 综合在线观看色| 欧美色倩网站大全免费| 亚洲成人av福利| 精品久久久久久久人人人人传媒| 久久精品国产网站| 国产日本欧美一区二区| 99久久久精品| 日韩成人一区二区| 国产亚洲va综合人人澡精品| 本田岬高潮一区二区三区| 亚洲美女视频在线观看| 欧美高清你懂得| 国产精品一区在线观看乱码| 国产精品久久久久久久久动漫| 欧美在线免费视屏| 极品少妇xxxx精品少妇| 亚洲人成人一区二区在线观看| 欧美三级韩国三级日本一级| 久久99精品久久久久久国产越南 | 成人美女视频在线观看18| 欧美高清在线一区二区| 色噜噜狠狠成人网p站| 丝袜美腿亚洲综合| 国产精品区一区二区三| 欧美日韩视频在线第一区| 国产精品2024| 亚洲精品中文字幕在线观看| 色噜噜狠狠色综合中国| 韩国中文字幕2020精品| 亚洲女性喷水在线观看一区| 精品国产亚洲一区二区三区在线观看| 成人自拍视频在线| 毛片不卡一区二区| 亚洲理论在线观看| 久久久久久久久久久99999| 91免费看`日韩一区二区| 极品少妇xxxx偷拍精品少妇| 亚洲午夜久久久久久久久久久| 国产亚洲自拍一区| 日韩免费看网站| 欧美亚洲一区三区| 99在线精品视频| 国产一区二区三区| 亚洲第一二三四区| 国产91丝袜在线播放九色| 香蕉久久夜色精品国产使用方法 | 国产精品123| 亚洲免费毛片网站| 欧美肥妇bbw| 色欧美片视频在线观看 | 欧美日韩国产精选| 99久久综合国产精品| 国产毛片精品视频| 麻豆国产精品官网| 免费高清成人在线| 久久国产精品色| 久久精品999| 极品少妇xxxx偷拍精品少妇| 美女高潮久久久| 六月婷婷色综合| 蜜臂av日日欢夜夜爽一区| 无码av免费一区二区三区试看| 亚洲久本草在线中文字幕| ...av二区三区久久精品| 国产精品黄色在线观看| 国产精品美女久久久久久久久| 久久久精品一品道一区| 久久综合九色欧美综合狠狠| 久久精品一区二区三区不卡牛牛 | 爽好久久久欧美精品| 五月天激情综合网| 日韩国产在线观看| 激情另类小说区图片区视频区| 激情综合色播五月| 国产91丝袜在线18| 91视频免费观看| 欧美日韩国产高清一区二区| 欧美一区二区免费视频| 久久综合久久鬼色中文字| 久久精品欧美一区二区三区不卡| 欧美激情在线一区二区| 亚洲精品免费在线观看| 亚洲成人精品一区| 精品一区二区三区免费| 成人国产精品免费网站| 日本精品一区二区三区高清 | 亚洲一区自拍偷拍| 日韩制服丝袜先锋影音| 欧美视频你懂的| 欧美一区二区播放| 久久久国际精品| 亚洲女女做受ⅹxx高潮| 日韩高清在线不卡| 国产久卡久卡久卡久卡视频精品| 99久久久国产精品| 欧美一区二视频| 中文字幕一区二区不卡| 视频一区二区三区中文字幕| 国产精品一区久久久久| 欧美亚洲禁片免费| 久久综合av免费| 亚洲一区在线电影| 国产精品羞羞答答xxdd| 欧美老女人在线| 久久久精品欧美丰满| 亚洲国产精品麻豆| 国产iv一区二区三区| 欧美一区二区三区免费观看视频| 国产欧美久久久精品影院 | 在线观看日韩电影| 久久亚洲一区二区三区四区| 国产色婷婷亚洲99精品小说| 日韩二区在线观看| 色综合天天狠狠| 国产日韩欧美综合一区|