yylex.cpp

来自「语法分析器lex和词法分析器yacc的C++语言实现 1.Lex (1)Le」· C++ 代码 · 共 191 行

CPP
191
字号

#include"yytab.h"
extern SV yyval;
const int START=0;
const int ERROR=40000;

int analysis(char *yytext,int n)
{
	int state=START;
	int N=n+1;//N表示串长加1,为与状态数保持一致。
	for(int i=0;i<N;i++)
	{
	switch(state)
	{
	case 0:
	{
		if(yytext[i]=='1')
		{
			state=1;
			break;
		}
		if(yytext[i]=='2')
		{
			state=1;
			break;
		}
		if(yytext[i]=='3')
		{
			state=1;
			break;
		}
		if(yytext[i]=='4')
		{
			state=1;
			break;
		}
		if(yytext[i]=='5')
		{
			state=1;
			break;
		}
		if(yytext[i]=='6')
		{
			state=1;
			break;
		}
		if(yytext[i]=='7')
		{
			state=1;
			break;
		}
		if(yytext[i]=='8')
		{
			state=1;
			break;
		}
		if(yytext[i]=='9')
		{
			state=1;
			break;
		}
		if(yytext[i]=='+')
		{
			state=2;
			break;
		}
		if(yytext[i]=='-')
		{
			state=3;
			break;
		}
		if(yytext[i]=='/')
		{
			state=4;
			break;
		}
		if(yytext[i]=='*')
		{
			state=5;
			break;
		}
	else
	{
		return ERROR;
	}
	break;
	}
	case 1:
	{
		if(i==N-1)
		{
			yyval.ival=2;return 30000;
			break;
		}
		if(yytext[i]=='0')
		{
			state=1;
			break;
		}
		if(yytext[i]=='1')
		{
			state=1;
			break;
		}
		if(yytext[i]=='2')
		{
			state=1;
			break;
		}
		if(yytext[i]=='3')
		{
			state=1;
			break;
		}
		if(yytext[i]=='4')
		{
			state=1;
			break;
		}
		if(yytext[i]=='5')
		{
			state=1;
			break;
		}
		if(yytext[i]=='6')
		{
			state=1;
			break;
		}
		if(yytext[i]=='7')
		{
			state=1;
			break;
		}
		if(yytext[i]=='8')
		{
			state=1;
			break;
		}
		if(yytext[i]=='9')
		{
			state=1;
			break;
		}
	else
	{
		return ERROR;
	}
	break;
	}
	case 2:
	{
		if(i==N-1)
		{
			return 30001;
			break;
		}
	break;
	}
	case 3:
	{
		if(i==N-1)
		{
			return 30002;
			break;
		}
	break;
	}
	case 4:
	{
		if(i==N-1)
		{
			return 30004;
			break;
		}
	break;
	}
	case 5:
	{
		if(i==N-1)
		{
			return 30003;
			break;
		}
	break;
	}
	}
	}

}

⌨️ 快捷键说明

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