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

📄 htlex.c

📁 用于linux和其他unix下面的
💻 C
字号:
/* MODULE							HTLex.c**		LEXICAL ANALYSOR**** AUTHORS:**	AL	Ari Luotonen	luotonen@dxcern.cern.ch**** HISTORY:****** BUGS:*****/#include <HTUtils.h>#include <HTLex.h>	/* Implemented here */#include <LYLeaks.h>/*** Global variables*/PUBLIC char HTlex_buffer[40];	/* Read lexical string		*/PUBLIC int HTlex_line = 1;	/* Line number in source file	*//*** Module-wide variables*/PRIVATE int lex_cnt;PRIVATE BOOL lex_template;PRIVATE LexItem lex_pushed_back = LEX_NONE;PRIVATE FILE *cache = NULL;PUBLIC void unlex ARGS1(LexItem, lex_item){    lex_pushed_back = lex_item;}PUBLIC LexItem lex ARGS1(FILE *, fp){    int ch = 0;    if (fp != cache) {	/* This cache doesn't work ok because the system  */	cache = fp;	/* often assign same FILE structure the next open */	HTlex_line = 1;	/* file.  So, if there are syntax errors in setup */    }			/* files it may confuse things later on.	  */    if (lex_pushed_back != LEX_NONE) {	LexItem ret = lex_pushed_back;	lex_pushed_back = LEX_NONE;	return ret;    }    lex_cnt = 0;    lex_template = NO;    for(;;) {	switch (ch = getc(fp)) {	  case EOF:	  case ' ':	  case '\t':	  case '\r':	  case '\n':	  case ':':	  case ',':	  case '(':	  case ')':	  case '@':	    if (lex_cnt > 0) {		if (ch != EOF) ungetc(ch,fp);		if (lex_template) return LEX_TMPL_STR;		else		  return LEX_ALPH_STR;	    }	    else switch(ch) {	      case EOF:		return LEX_EOF;	      case '\n':		HTlex_line++;	return LEX_REC_SEP;	      case ':':		return LEX_FIELD_SEP;	      case ',':		return LEX_ITEM_SEP;	      case '(':		return LEX_OPEN_PAREN;	      case ')':		return LEX_CLOSE_PAREN;	      case '@':		return LEX_AT_SIGN;	      default:	;	/* Leading white space ignored (SP,TAB,CR) */	    }	    break;	  default:	    HTlex_buffer[lex_cnt++] = (char) ch;	    HTlex_buffer[lex_cnt] = '\0';	    if ('*' == ch) lex_template = YES;	} /* switch ch */    } /* forever */}PUBLIC char *lex_verbose ARGS1(LexItem, lex_item){    static char msg[100];	/* @@@@@@@@ */    switch (lex_item) {      case LEX_NONE:		/* Internally used	*/	return "NO-LEX-ITEM";      case LEX_EOF:		/* End of file		*/	return "end-of-file";      case LEX_REC_SEP:		/* Record separator	*/	return "record separator (newline)";      case LEX_FIELD_SEP:	/* Field separator	*/	return "field separator ':'";      case LEX_ITEM_SEP:	/* List item separator	*/	return "item separator ','";      case LEX_OPEN_PAREN:	/* Group start tag	*/	return "'('";      case LEX_CLOSE_PAREN:	/* Group end tag	*/	return "')'";      case LEX_AT_SIGN:		/* Address qualifier	*/	return "address qualifier '@'";      case LEX_ALPH_STR:	/* Alphanumeric string	*/	sprintf(msg, "alphanumeric string '%.70s'", HTlex_buffer);	return msg;      case LEX_TMPL_STR:	/* Template string	*/	sprintf(msg, "template string '%.70s'", HTlex_buffer);	return msg;      default:	return "UNKNOWN-LEX-ITEM";    }}

⌨️ 快捷键说明

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