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

📄 javascanner.cpp

📁 一个Java的词法分析器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						   break;
					   }
					   else if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=5;
						   break;
					   }
				case 2:if (ch=='E'||ch=='e')
					   {
						   putcstrbuf(ch);
						   state=1;
						   break;
					   }
					   else if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=2;
						   break;
					   }
					   else if (ch=='F'||ch=='f')
					   {
						   putcstrbuf(ch);
						   state=8;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   tcol=ccol-1;
						   backBuf();
						   state=9;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 3:if (ch>='0'&&ch<='7')
					   {
						   putcstrbuf(ch);
						   state=3;
						   break;
					   }
					   else {
						   tcol=ccol-1;
						   backBuf();
						   state=10;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x107) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 4:if (ch>='0'&&ch<='9'||ch>='a'&&ch<='f'||ch>='A'&&ch<='F')
					   {
						   putcstrbuf(ch);
						   state=11;
						   break;
					   }
				case 5:if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=5;
						   break;
					   }
					   else if (ch=='F'||ch=='f')
					   {
						   putcstrbuf(ch);
						   state=8;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   backBuf();
						   state=9;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 6:if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=5;
						   break;
					   }
				case 11:if (ch>='0'&&ch<='9'||ch>='a'&&ch<='f'||ch>='A'&&ch<='F')
						{
							putcstrbuf(ch);
							state=11;
							break;
						}
						else{
							backBuf();
							state=10;
							tcol=ccol;
							putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x107) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				default:backBuf();
					state=12;
					tcol=ccol;
					putcstrbuf('\0');
					fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x100) [%s]\n",line,++cnum,hcol,tcol,strbuf);
					strbufi=0;
					break;
				}
				if (state>=7&&state!=11)
				{
					break;
				}
			}
		}
		else if (ch>='1'&&ch<='9')
		{
			hcol=ccol;
			putcstrbuf(ch);
			state=0;
			while (true)
			{
				ch=nextChar();
				switch(state)
				{
				case 0:if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=0;
						   break;
					   }
						else if (ch=='l'||ch=='L')
					   {
						   putcstrbuf(ch);
						   state=3;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x107) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else if (ch=='E'||ch=='e')
					   {
						   putcstrbuf(ch);
						   state=1;
						   break;
					   }
					   else if (ch=='.')
					   {
						   putcstrbuf(ch);
						   state=2;
						   break;
					   }
					   else {
						   tcol=ccol-1;
						   backBuf();
						   state=4;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x107) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 1:if (ch=='+'||ch=='-')
					   {
						   putcstrbuf(ch);
						   state=6;
						   break;
					   }
					   else if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=5;
						   break;
					   }
				case 2:if (ch=='E'||ch=='e')
					   {
						   putcstrbuf(ch);
						   state=1;
						   break;
					   }
					   else if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=2;
						   break;
					   }
					   else if (ch=='F'||ch=='f')
					   {
						   putcstrbuf(ch);
						   state=8;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   tcol=ccol-1;
						   backBuf();
						   state=9;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 5:if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=5;
						   break;
					   }
					   else if (ch=='F'||ch=='f')
					   {
						   putcstrbuf(ch);
						   state=8;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   backBuf();
						   state=9;
						   tcol=ccol;
						   putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x108) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 6:if (ch>='0'&&ch<='9')
					   {
						   putcstrbuf(ch);
						   state=5;
						   break;
					   }
				default:backBuf();
					state=7;
					tcol=ccol;
					putcstrbuf('\0');
					fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x100) [%s]\n",line,++cnum,hcol,tcol,strbuf);
					strbufi=0;
					break;
				}
				if (state==3||state==4||state==7||state==8||state==9)
				{
					break;
				}
			}
		}
		else {
			hcol=ccol;
			putcstrbuf(ch);
			switch(ch)
			{
			case '+':state=1;break;
			case '-':state=5;break;
			case '*':state=9;break;
			case '%':state=12;break;
			case '&':state=15;break;
			case '^':state=37;break;
			case '>':state=19;break;
			case '~':state=28;tcol=ccol;putcstrbuf('\0');
				fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11c) [%s]\n",line,++cnum,hcol,tcol,strbuf);
				strbufi=0;
				break;
			case '?':
			case ':':state=29;tcol=ccol;putcstrbuf('\0');
				fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x111) [%s]\n",line,++cnum,hcol,tcol,strbuf);
				strbufi=0;
				break;
			case '=':state=30;break;
			case '|':state=33;break;
			case '!':state=40;break;
			case '<':state=43;break;
			}
			while (state)
			{
				ch=nextChar();
				switch(state)
				{
				case 1:if (ch=='=')
					   {
						   putcstrbuf(ch);state=3;tcol=ccol;putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else if (ch=='+')
					   {
						   putcstrbuf(ch);state=4;tcol=ccol;putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11c) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   state=2;tcol=ccol-1;backBuf();putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11a) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 5:if (ch=='=')
					   {
						   putcstrbuf(ch);state=7;tcol=ccol;putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else if (ch=='-')
					   {
						   putcstrbuf(ch);state=8;tcol=ccol;putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11c) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   state=6;tcol=ccol-1;backBuf();putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11a) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 9:if (ch=='=')
					   {
						   putcstrbuf(ch);state=11;tcol=ccol;putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
					   else{
						   state=10;tcol=ccol-1;backBuf();putcstrbuf('\0');
						   fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
						   strbufi=0;
						   break;
					   }
				case 12:if (ch=='=')
						{
							putcstrbuf(ch);state=14;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=13;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11b) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 15:if (ch=='=')
						{
							putcstrbuf(ch);state=16;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else if (ch=='&')
						{
							putcstrbuf(ch);state=17;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x113) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=18;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x116) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 37:if (ch=='=')
						{
							putcstrbuf(ch);state=39;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=38;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x115) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 19:if (ch=='=')
						{
							putcstrbuf(ch);state=21;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x118) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else if (ch=='>')
						{
							putcstrbuf(ch);
							state=22;
							break;
						}
						else{
							state=20;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x118) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 22:if (ch=='=')
						{
							putcstrbuf(ch);state=24;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else if (ch=='>')
						{
							putcstrbuf(ch);
							state=25;
							break;
						}
						else{
							state=23;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x119) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 25:if (ch=='=')
						{
							putcstrbuf(ch);state=27;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=26;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x119) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 30:if (ch=='=')
						{
							putcstrbuf(ch);state=31;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x117) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=32;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 33:if (ch=='=')
						{
							putcstrbuf(ch);state=34;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else if (ch=='|')
						{
							putcstrbuf(ch);state=35;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x112) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=36;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x114) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 40:if (ch=='=')
						{
							putcstrbuf(ch);state=42;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x117) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=41;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x11c) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				case 43:if (ch=='=')
						{
							putcstrbuf(ch);state=45;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x118) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						 else if (ch=='<')
						 {
							 putcstrbuf(ch);
							 state=46;
							 break;
						 }
						 else{
							 state=44;tcol=ccol-1;backBuf();putcstrbuf('\0');
							 fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x118) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							 strbufi=0;
							 break;
							}
				case 46:if (ch=='=')
						{
							putcstrbuf(ch);state=48;tcol=ccol;putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x110) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
						else{
							state=47;tcol=ccol-1;backBuf();putcstrbuf('\0');
							fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x119) [%s]\n",line,++cnum,hcol,tcol,strbuf);
							strbufi=0;
							break;
						}
				default:if (ch=='?'||ch==':')
				{
					backBuf();
				}
				}if (state!=0&&state!=1&&state!=5&&state!=9&&state!=12&&state!=15&&state!=37&&state!=19&&state!=22&&state!=25&&state!=33&&state!=30
					&&state!=40&&state!=43&&state!=46)
				{
					break;
				}
			}
		}
		if (strbufi!=0)
		{
			for (i=0;i<50;i++)
			{
				if(strcmp(itable[i],strbuf)==0)
					break;
			}
			if (i==50)
			{
				fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x104) [%s]\n",line,++cnum,hcol,tcol,strbuf);
			} 
			else
			{
				fprintf(outstream,"%5d-%3d: (%3d-%3d) (0x103) [%s]\n",line,++cnum,hcol,tcol,strbuf);
			}
			strbufi=0;
		}		
	}
	if(ch=='\0'){
		tnum+=cnum;
	}
	fprintf(outstream,"The total number:%d\n",tnum);
	fclose(instream);
	fclose(outstream);
	scanf("%c",&ch);
	scanf("%c",&ch);
	return 0;
}

⌨️ 快捷键说明

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