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

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

?? lexer.c

?? 有想用的自己看吧
?? C
字號:
/* ---------------------------------------------------------------------- * FILE: lexer.c * PACKAGE: as31 - 8031/8051 Assembler. * * DESCRIPTION: *	This file contains the lexical tokenizer for the assembler. *	Since yacc is being used the lexer is called yylex(). * *	In order to produce a listing, some record of the users *	source line must be kept. This is done by adding *	get_ch(), and unget_ch() routine which returns/ungets a character *	but also places information into a secret array. * *	When a newline is encountered the text line is returned as *	an attribute on the '\n' character. * * REVISION HISTORY: *	Jan. 19, 1990 - Created. (Ken Stauffer) * * AUTHOR: *	All code in this file written by Ken Stauffer (University of Calgary). *	January, 1990. * */#include <stdio.h>#include <ctype.h>#include "as31.h"extern union ystack yylval;extern int pass;struct symbol *looksym();struct opcode *lookop();char *malloc();int lineno;static char line[100],*lineptr=line;/* ---------------------------------------------------------------------- * get_ch: *	Get a character from stdin, place char in line[] */get_ch(){	register int c;	c = getchar();	if( c != EOF && lineptr - line < sizeof(line) )		*lineptr++ = c;	return(c);}/* ---------------------------------------------------------------------- * unget_ch: *	Unget a character and move lineptr back by one. */unget_ch(c)int c;{	ungetc(c,stdin);	if( lineptr > line )		lineptr--;}/* ---------------------------------------------------------------------- * yylex: *	The tokens themselves are returned via return(token) * *	Some tokens have attributes. These attributes are returned *	by setting a global variable yylval: * *		yylval.value *			numbers (any base) *			strings (in pass 1). *			bit positions .0, .1, .2, ... * *		yylval.str *			strings (in pass 2). *			'\n' (both passes). * *		yylval.sym *			User defined symbols. * *		yylval.op *			Reserved keyword (opcode/directive/misc.) * *		No other fields in yylval are used by yylex(). *  *		Characters that do not have an attribute do *		not set anything in the yylval variable. * */yylex(){	static nl_flag=0;	/* sync. error messages and the cur. line */	register int c;	char buf[120];		/* temporary buffer */	char *p;		/* general pointer */	struct symbol *sym;	struct opcode *op;	int octal=0,hex=0,decimal=0,binary=0;	register long value = 0;	if( nl_flag ) {		nl_flag = 0;		lineno++;	}for(;;) {	c = get_ch();	switch(c) {	case EOF: return(EOF);	case ' ':	case '\t':		break;	case '\n':		nl_flag = 1;		yylval.str = line;		*lineptr = '\0';		lineptr = line;		return('\n');	case ';':		while((c=get_ch()) != EOF && c!='\n');		nl_flag= 1;		yylval.str = line;		*lineptr = '\0';		lineptr = line;		return(c);	case '"':		p = buf;		while((c=get_ch()) != EOF && c!='"' && c!='\n') {			if( c == '\\' ) {				switch(c=get_ch()) {				case 'n': c = '\n'; break;				case 'r': c = '\r'; break;				case 't': c = '\t'; break;				case 'b': c = '\b'; break;				case '"': c = '"'; break;				case '\\': c = '\\'; break;				default:				  error("Invalid escape character: \\%c",c);				  break;				}			}			if( p-buf<sizeof(buf)-1 ) 				*p++ = c;			else {			   error("String constant longer than %d bytes",					sizeof(buf));			}		}		*p = '\0';		if( c == '\n' || c == EOF ) {			error("String terminated improperly.");			unget_ch(c);		}		if(pass1)			yylval.value = strlen(buf);		else {			if( (p = malloc(strlen(buf)+1)) == NULL )			   error("Cannot allocate %d bytes",strlen(buf)+1);			strcpy(p,buf);			yylval.str = p;		}		return(STRING);	case '.':		if( (c=get_ch())>='0' && c<='7' ) {			yylval.value = c-'0';			return(BITPOS);		}		unget_ch(c);		return('.');	case '\'':		c = get_ch();		if( c=='\\' ) {			switch(c=get_ch()) {			case 'n': c = '\n'; break;			case 'r': c = '\r'; break;			case 't': c = '\t'; break;			case 'b': c = '\b'; break;			case '\\': c = '\\'; break;			case '\'': c = '\''; break;			default:				error("Invalid escape character: \\%c",c);			}		}		if( get_ch() != '\'' )			error("Missing quote in character constant");		yylval.value = c;		return(VALUE);	case '0':	/* parse a number			*/	case '1':	/* could be followed by a:		*/	case '2':	/*	'b','B' - Binary		*/	case '3':	/*	'h','H' - Hex			*/	case '4':	/*	'd','D' - Decimal		*/	case '5':	/*	'o','O' - Octal			*/	case '6':	/* *** Numbers must start with a digit	*/	case '7':	/* Numbers could be also preceeded by:  */	case '8':	/*	0x	- Hex,	0b     - binary */	case '9':	/*	0	- Octal			*/		p = buf;		do {			if( p-buf<sizeof(buf)-1 )				*p++ = c;			c = get_ch();		} while( c=='H' || c=='h' || c=='O' || c=='o' ||				c=='x' || c=='X' || isxdigit(c) );		unget_ch(c);		*p = '\0';		/* Check any preceeding chars */		if( buf[0]=='0' && (buf[1]=='x' || buf[1]=='X') ) {				hex++;				buf[1] = '0';		} else if( buf[0]=='0' &&			(buf[1]=='b' || buf[1]=='B') ) {				binary++;				buf[1] = '0';			}		else if( buf[0]=='0' ) octal++;		/* check any trailing chars */		c = *(p-1);		if( !hex && (c=='b' || c=='B') )			{ binary++; *(p-1) = '\0'; }		else if( c=='H' || c=='h' )			{ hex++; *(p-1) = '\0'; }		else if( !hex && (c=='D' || c=='d') )			{ decimal++; *(p-1) = '\0'; }		else if( c=='O' || c=='o' )			{ octal++; *(p-1) = '\0'; }		else if( !hex && !octal && !binary) decimal++;		if( binary ) {			for(p=buf; *p; p++ ) {				if( *p=='1' ) value = value<<1 + 1;				else if( *p=='0' ) value = value<<1;				else				  error("Invalid binary digit: %c",*p);			}			yylval.value = value;			return(VALUE);		}		if( hex ) {			for(p=buf; *p; p++ ) {				value <<= 4;				if( isdigit(*p) )					value += *p-'0';				else if( *p>='a' && *p<='f' )					value += *p-'a'+ 10;				else if( *p>='A' && *p<='F' )					value += *p-'A'+ 10;				else				  error("Invalid hex digit: %c",*p);			}			yylval.value = value;			return(VALUE);		}		if( decimal ) {			for(p=buf; *p; p++ ) {				if( isdigit(*p) )					value = value*10 + *p-'0';				else				   error("Invalid decimal digit: %c",*p);			}			yylval.value = value;			return(VALUE);		}		if( octal ) {			for(p=buf; *p; p++ ) {				if( *p>='0' && *p<='7' )					value = value<<3 + *p-'0';				else				   error("Invalid octal digit: %c",*p);			}			yylval.value = value;			return(VALUE);		}	default:		if( isalpha(c) || c=='_' ) {			p = buf;			do {				if( p-buf<sizeof(buf)-1 )					*p++ = c;				c = get_ch();			} while( isalnum(c) || c=='_' );			*p = '\0';			unget_ch(c);			if( op = lookop(buf) ) {				yylval.op = op;				return(op->type);			}			sym = looksym(buf);			yylval.sym = sym;			return(SYMBOL);		} else			return(c);	} /* switch */} /* for */} /* yylex */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩综合小视频| 国产999精品久久| 久久奇米777| 91麻豆国产福利精品| 秋霞午夜鲁丝一区二区老狼| 久久精品男人的天堂| 在线免费av一区| 国产一区二区中文字幕| 性做久久久久久免费观看 | 国产精品成人一区二区三区夜夜夜| 日本韩国视频一区二区| 久久不见久久见免费视频7| 一区二区三区四区五区视频在线观看 | 欧美日韩午夜影院| 亚洲一区二区三区免费视频| 久久精品人人做人人综合 | 91精品久久久久久蜜臀| 色综合色狠狠综合色| 99久久久精品| 懂色av一区二区三区免费观看 | 亚洲视频一区在线| 中文字幕 久热精品 视频在线| 精品久久人人做人人爱| 日韩一区二区麻豆国产| 欧美精品久久99久久在免费线| 在线观看欧美精品| 欧美日韩久久一区| 日韩一级欧美一级| 精品卡一卡二卡三卡四在线| 精品国产一区二区精华| 欧美一区二区视频在线观看2022| 欧美久久久久久久久久| 51午夜精品国产| 亚洲精品一区二区三区四区高清| 精品国产三级电影在线观看| 久久只精品国产| 国产精品久99| 亚洲h动漫在线| 成人深夜视频在线观看| 成人免费的视频| 欧美视频完全免费看| 91精品国产综合久久福利软件| 欧美一区二区在线不卡| 国产网红主播福利一区二区| 亚洲欧洲日韩av| 日韩电影在线观看一区| 成人av在线资源| 宅男在线国产精品| 亚洲激情校园春色| 久久狠狠亚洲综合| 色欧美88888久久久久久影院| 666欧美在线视频| 一区二区三区在线播放| 国产伦精品一区二区三区在线观看| 91同城在线观看| 精品人在线二区三区| 亚洲第一搞黄网站| 99麻豆久久久国产精品免费| 日韩免费看的电影| 一区二区激情视频| www.日韩大片| 国产欧美一区二区精品秋霞影院| 亚洲国产综合91精品麻豆| 99re热这里只有精品视频| 亚洲精品一区二区精华| 日韩高清不卡在线| 欧美日韩精品一区二区天天拍小说 | 成人中文字幕合集| 在线不卡免费av| 亚洲国产毛片aaaaa无费看| av网站免费线看精品| 中文字幕免费不卡| 懂色中文一区二区在线播放| 精品欧美一区二区在线观看 | 青青草伊人久久| 欧美日韩国产经典色站一区二区三区| 1024亚洲合集| 91老师国产黑色丝袜在线| 日本一区二区三区在线不卡 | 国产一区二区女| 欧美国产一区二区| 成人av午夜电影| 亚洲综合一二区| 欧美日韩亚洲综合一区 | 成人午夜精品在线| 亚洲人成精品久久久久| 欧美日韩一区中文字幕| 蜜乳av一区二区三区| 久久影院午夜论| 97精品久久久午夜一区二区三区 | 国产精品久久久久久久久久免费看| 日本成人中文字幕在线视频| 日韩一级二级三级| www.欧美.com| 91视频在线观看| 麻豆91在线播放| 国产亚洲欧美色| 成人黄色一级视频| 国产精品麻豆视频| 欧美在线观看视频在线| 精品久久久久香蕉网| 日韩电影在线观看电影| 国产精品久久毛片| 亚洲激情自拍视频| 色噜噜狠狠成人中文综合| 日本不卡123| 综合欧美一区二区三区| 4438x亚洲最大成人网| 国产成人精品三级| 丝袜亚洲另类欧美| 一区二区三区四区av| 久久久久久久久久电影| 日韩一区二区视频| 欧美午夜一区二区三区| 成人丝袜视频网| 精品一区二区三区的国产在线播放 | 一区二区三区国产| 国产农村妇女精品| 久久久精品日韩欧美| 日韩一卡二卡三卡| 91精品在线免费| 欧美日韩国产片| 欧美日韩日日夜夜| 欧美视频自拍偷拍| 在线亚洲人成电影网站色www| 风流少妇一区二区| 国产黄人亚洲片| 成人国产亚洲欧美成人综合网| 国产中文一区二区三区| 国产一区二区精品久久| 蜜臀91精品一区二区三区| 日韩精品亚洲专区| 亚洲成人一区二区| 亚洲免费伊人电影| 久久精品亚洲精品国产欧美 | 久久狠狠亚洲综合| 国产麻豆精品在线观看| 国产成人午夜精品影院观看视频 | 欧美老女人在线| 日韩三级免费观看| 国产日韩欧美精品一区| 综合婷婷亚洲小说| 日韩av不卡在线观看| 国产一区二区三区精品视频| 波波电影院一区二区三区| 99久久精品国产导航| 欧美伊人久久大香线蕉综合69 | 欧美一区欧美二区| 亚洲国产精品高清| 天天色天天操综合| 国产精品一线二线三线精华| 色狠狠色狠狠综合| 精品国产91乱码一区二区三区 | 亚洲综合在线五月| 国产精品中文欧美| 欧美日韩一卡二卡| 国产日韩av一区二区| 亚洲最新视频在线播放| 国产福利精品一区| 日韩欧美你懂的| 亚洲成av人在线观看| www.欧美.com| 国产精品久久一卡二卡| 另类小说色综合网站| 一本色道**综合亚洲精品蜜桃冫| 日韩欧美国产综合| 天天影视色香欲综合网老头| www.亚洲免费av| 中文无字幕一区二区三区| 久久精工是国产品牌吗| 91精品国产综合久久久久| 洋洋av久久久久久久一区| 9人人澡人人爽人人精品| 欧美激情在线一区二区| 国产乱色国产精品免费视频| 日韩欧美国产一区二区三区| 日日夜夜免费精品视频| 欧美亚洲高清一区| 亚洲国产欧美一区二区三区丁香婷| yourporn久久国产精品| 国产精品久久免费看| 一本久久精品一区二区| 一区二区三区成人| 欧美浪妇xxxx高跟鞋交| 午夜激情综合网| 日韩午夜精品视频| 国产一级精品在线| 国产精品免费aⅴ片在线观看| 成人性生交大片免费看中文| 国产精品国产三级国产aⅴ原创 | 一区二区不卡在线播放| 欧美视频精品在线观看| 美女诱惑一区二区| 中文字幕av一区二区三区高| 在线视频你懂得一区| 麻豆国产欧美日韩综合精品二区| 久久久精品一品道一区| 色拍拍在线精品视频8848| 精品一区二区三区视频| 日韩毛片视频在线看|