get_token.c

来自「little c源代码」· C语言 代码 · 共 124 行

C
124
字号
/* get_token.*/
int get_token(void)
{
	register char * temp;

	token_type = 0; tok = 0;
	temp = token;

	/* skip over white space */
	while(iswhite(*prog)&&*prog) ++prog;

	if(*prog == '\r')
	{
		++prog;
		++prog;
		/* skip over white space */
		while(iswhite(*prog)&&*prog) ++prog;
	}

	/* end of the file */
	if(*prog == '\0')
	{
		*token = '\0';
		tok = FINISHED;
		return (token_type = DELIMITER);
	}
	
	/* block delimiters */
	if(strchr("{}",*prog))
	{
		*temp = *prog;
		temp++;
		*temp = '\0';
		prog++;
		return (token_type = BLOCK);
	}

	/* look for comments */
	if(*prog == '/')
	{
		if(*(prog+1)=='*')
		{
			prog+=2;
			do
			{
				while(*prog!='*')prog++;
				prog++;
			}while (*prog!='/');
			prog++;
		}
	}
	/* is or not mitht be a relational operator*/
	if(strch("!<>=", *prog))
	{
		swith(*prog)
		{
			case '=': 
				if (*(prog+1)=='=')
				{
					prog++;prog++;
					*temp = EQ;
					temp++; *temp =EQ; temp++;
					*temp = '\0';
				}
				break;
			case '!':
				if(*(prog+1)=='=')
				{
					prog++;prog++;
					*temp == NE;
					temp++; *temp = NE; temp++;
					*temp = '\0';
				}
				break;
			case '<':
				if(*(prog++)=='=')
				{
					prog++;prog++;
					*temp=LE;temp++;*temp=LE;
				}
				else
				{
					prog++;
					*temp=LT;
				}
				temp++;
				*temp='\0';
				break;
			case '>':
				if(*(prog++)=='=')
				{
					prog++;prog++;
					*temp=GE;temp++;*temp=GE;
				}
				else
				{
					prog++;
					*temp=GT;
				}
				temp++;
				*temp='\0';
				break;
		}
		if(*token) return (token_type = DELIMITER);
	}
	/* delimiter */
	if(strchr("+-*^/%=;",*prog))
	{
		*temp =*prog;
		prog++; /*advance to next positon*/
		temp++;
		*temp = '\0';
		return(token_type = delimiter);
	}

	if
	






⌨️ 快捷键说明

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