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

📄 fenxiqi.cpp

📁 一个简单的JAVA语言的词法分析器,读入文件,经过词法分析将分析结果写入输出文件中.(附JAVA词法分析要求)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
							row_total[row]++;
							total++;
						}
					}
					else if(in=='l' || in=='L'){
						bsf[b++]=in;
						bsf[b]='\0';
						b=0;
						fpout<<bsf<<' '<<"0x107(整型)"<<endl;
						state=0;
						row_total[row]++;
						total++;	
					}
					else{
						fpin.putback(in);
						bsf[b]='\0';
						b=0;
						fpout<<bsf<<' '<<"0x107(整型)"<<endl;
						state=0;
						row_total[row]++;
						total++;				
					}				
				}
				break;   
		    case 102:
				fpout<<"-="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
            case 103:
				fpout<<"--"<<' '<<"0x11c(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 104:
				fpin.putback(in);
				fpout<<"-"<<' '<<"0x11a(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 105:				
				if(in=='\''){
					fpout<<"\'空\'"<<' '<<"0x106(字符型)"<<endl;
					state=0;
					row_total[row]++;
					total++;	
				}
				else if(in=='\\'){
					in=fpin.get();
					out1=in;
					in=fpin.get();
					if(in=='\''){
						if(out1=='\'' || out1=='\\' || out1=='r' || out1=='n'|| out1=='f'||
out1=='t'|| out1=='b'){
							fpout<<'\\'<<out1<<' '<<"0x106(转义型)"<<endl;
							state=0;
							row_total[row]++;
							total++;
						}
						else{
							printf("Error!  line=%d,content=\\%c.\n",row+1,out1);
							fpout<<'\\'<<out1<<' '<<"0x100(错误的单词)"<<endl;
							state=0;
						}
					}
					else{
						printf("Error!  line=%d,content=\\%c.\n",row+1,out1);
						fpout<<'\\'<<out1<<' '<<"0x100(错误的单词)"<<endl;
						state=0;
					}
				}
				else{
					out2=in;
					in=fpin.get();
					if(in=='\''){
						fpout<<out2<<' '<<"0x106(字符型)"<<endl;
						state=0;
						row_total[row]++;
						total++;
					}
					else{						
						if(out2=='\n'){
							printf("Error!  line=%d,content=%c%s.\n",row+1,'\'',name1);
							fpout<<'\''<<name1<<' '<<"0x100(错误的单词)"<<endl;
						}
						else{
							printf("Error!  line=%d,content=\'%c.\n",row+1,out2);
							fpout<<'\''<<out2<<' '<<"0x100(错误的单词)"<<endl;
						}
						state=0;
					}
				}
				break;
			case 106:
				b=0;
				while(in!='\"'){
					bsf[b++]=in;
					in=fpin.get();
					if(in==-1 || fpin.eof())
						break;
				}
				bsf[b]='\0';
				len=strlen(bsf);
				for(i=0,b=0;b<len;i++,b++){
					if(bsf[b]=='\\'){				
						out1=bsf[b+1];
						b++;
						if(out1=='\'' || out1=='\\' || out1=='r' || out1=='n'|| out1=='f'||
out1=='t'|| out1=='b'){
							fpout<<'\\'<<out1<<' '<<"0x106(转义型)"<<endl;
							state=0;
							row_total[row]++;
							total++;
						}
						else{
							printf("Error!  line=%d,content=\\%c.\n",row+1,out1);
							fpout<<'\\'<<out1<<' '<<"0x100(错误的单词)"<<endl;
							state=0;
						}						
					}
				}

				fpout<<bsf<<' '<<"0x109(字符串)"<<endl;
				state=0;
				row_total[row]++;
				total++;	
				break;
		    case 107:	
				out1=in;
				if(out1=='\'' || out1=='\\' || out1=='r' || out1=='n'|| out1=='f'||
out1=='t'|| out1=='b'){
					fpout<<'\\'<<out1<<' '<<"0x106(转义型)"<<endl;
					state=0;
					row_total[row]++;
					total++;
				}
				else{
					printf("Error!  line=%d,content=\\%c.\n",row+1,out1);
					fpout<<'\\'<<out1<<' '<<"0x100(错误的单词)"<<endl;
					state=0;
				}						
				break;
            case 108:
				fpout<<'{'<<' '<<"0x121(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 109:
				fpout<<'}'<<' '<<"0x121(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 110:
				fpout<<'('<<' '<<"0x11d(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 111:
				fpout<<')'<<' '<<"0x11d(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
		    case 112:
				fpout<<'['<<' '<<"0x11d(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
            case 113:
				fpout<<']'<<' '<<"0x11d(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 114:
				fpout<<';'<<' '<<"0x122(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 115:
				fpout<<'.'<<' '<<"0x11d(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 116:
				fpout<<','<<' '<<"0x120(界限符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
		    case 117:
				fpout<<"\'空格\'"<<' '<<"0x102(空格)"<<endl;
				state=0;
				break;
            case 118:
				if(judge2){
					judge2=0;
					printf("Error!  line=%d,content=?.\n",row+1);
					fpout<<'?'<<' '<<"0x100(错误的单词)"<<endl;
				}
				row++;
				state=0;				
				break;	
			case 119:
				fpout<<"+="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
            case 120:
				fpout<<"++"<<' '<<"0x11c(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 121:
				fpin.putback(in);
				fpout<<"+"<<' '<<"0x11a(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 122:
				fpout<<"&="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
            case 123:
				fpout<<"&&"<<' '<<"0x113(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 124:
				fpin.putback(in);
				fpout<<"&"<<' '<<"0x116(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 125:
				fpout<<"=="<<' '<<"0x117(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 126:
				fpin.putback(in);
				fpout<<"="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 127:
				fpout<<"~"<<' '<<"0x11c(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 128:
				fpout<<"|="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
            case 129:
				fpout<<"||"<<' '<<"0x112(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 130:
				fpin.putback(in);
				fpout<<"|"<<' '<<"0x114(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 131:
				fpout<<"^="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 132:
				fpin.putback(in);
				fpout<<"^"<<' '<<"0x115(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 133:
				judge2=1;
				state=0;
				break;
			case 134:
				fpout<<"/="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 135:
				in=fpin.get();
				do{					
					out1=in;
					in=fpin.get();
					if(in==-1 || fpin.eof())
						break;
				}while(out1!='*' || in!='/');					
				fpout<<"/*...*/"<<' '<<"0x101(注释符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
            case 136:
				while(in!='\n'){
					in=fpin.get();
					if(in==-1 || fpin.eof())
						break;
				}
				fpin.putback(in);
				fpout<<"//"<<' '<<"0x101(注释符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 137:
				fpin.putback(in);
				fpout<<"/"<<' '<<"0x11b(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 138:
				fpout<<">>="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 139:
				fpout<<">>>="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 140:
				fpin.putback(in);
				fpout<<">>>"<<' '<<"0x119(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 141:
				fpin.putback(in);
				fpout<<">>"<<' '<<"0x119(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 142:
				fpout<<">="<<' '<<"0x118(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 143:
				fpin.putback(in);
				fpout<<">"<<' '<<"0x118(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 144:
				fpout<<"<="<<' '<<"0x118(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 145:
				fpout<<"<<="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 146:
				fpin.putback(in);
				fpout<<"<<"<<' '<<"0x119(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 147:
				fpin.putback(in);
				fpout<<"<"<<' '<<"0x118(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 148:
				fpout<<"%="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 149:
				fpin.putback(in);
				fpout<<"%"<<' '<<"0x11b(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 150:
				fpout<<"*="<<' '<<"0x110(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 151:
				fpin.putback(in);
				fpout<<"*"<<' '<<"0x11b(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 152:
				fpout<<"!="<<' '<<"0x117(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 153:
				fpin.putback(in);
				fpout<<"!"<<' '<<"0x11c(运算符)"<<endl;
				state=0;
				row_total[row]++;
				total++;
				break;
			case 154:
				if(judge2){
					fpout<<"?:"<<' '<<"0x111(运算符)"<<endl;
					state=0;
					row_total[row]++;
					total++;
				}				
				else{
					fpout<<":"<<' '<<"0x111(运算符)"<<endl;
					state=0;
					row_total[row]++;
					total++;
				}
				break;	
			case 155:
				fpout<<"\\t"<<' '<<"0x102(制表符)"<<endl;
				state=0;				
				break;
		}
	}
exit:	printf("total line=%d,total word=%d.\n",row+1,total);
		
    return 0;
}

⌨️ 快捷键说明

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