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

📄 la.cpp

📁 用 C++ 作为宿主语言完成: Java语言词法分析器的设计和实现 使用DFA实现词法分析器的设计; 实现对Java源程序中注释的过滤; 利用两对半缓冲区从文件中逐一读取单词; 词法分析结果
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					else if(ch>=48 && ch<=57)
					{
						Number();
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x11a;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '-':					
					B=F=lpos-1;
					get_char();
					if(ch=='-')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x11c;
						output();
						line_num++;
						break;
					}
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					else if(ch>=48 && ch<=57)
					{
						Number();
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x11a;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '&':					
					B=F=lpos-1;
					get_char();
					if(ch=='&')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x113;
						output();
						line_num++;
						break;
					}
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x116;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '=':
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x116;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '~':					
					B=F=lpos-1;
					get_word();
					type=0x11c;
					output();
					line_num++;
					state=0;
					break;
				case '|':					
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					if(ch=='|')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x112;
						output();
						line_num++;
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x114;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '^':					
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x115;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '?':
				case ':':					
					B=F=lpos-1;
					get_word();
					type=0x111;
					output();
					line_num++;
					state=0;
					break;
				case '>':									
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x118;
						output();
						line_num++;
						break;
					}
					else if(ch=='>')
					{
						get_char();
						if(ch=='=')
						{
							state=0;
							F=lpos-1;
							get_word();
							type=0x110;
							output();
							line_num++;
							break;
						}
						else if(ch=='>')
						{
							get_char();
							if(ch=='=')
							{
								state=0;
								F=lpos-1;
								get_word();
								type=0x110;
								output();
								line_num++;
								break;
							}
							else 
							{
								backflag=1;
								F=lpos-2;
								get_word();
								type=0x119;
								output();
								line_num++;
								state=0;
								break;
							}

						}
						else 
						{
							backflag=1;
							F=lpos-2;
							get_word();
							type=0x118;
							output();
							line_num++;
							state=0;
							break;
						}
					}
					else 
					{
						F=B;
						get_word();
						type=0x118;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '<':					
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x118;
						output();
						line_num++;
						break;
					}
					else if(ch=='<')
					{
						get_char();
						if(ch=='=')
						{
							state=0;
							F=lpos-1;
							get_word();
							type=0x110;
							output();
							line_num++;
							break;
						}
						else if(ch=='<')
						{
							get_char();
							if(ch=='=')
							{
								state=0;
								F=lpos-1;
								get_word();
								type=0x110;
								output();
								line_num++;
								break;
							}
							else 
							{
								backflag=1;
								F=lpos-2;
								get_word();
								type=0x119;
								output();
								line_num++;
								state=0;
								break;
							}
						}
						else 
						{
							backflag=1;
							F=lpos-2;
							get_word();
							type=0x118;
							output();
							line_num++;
							state=0;
							break;
						}
					}
					else 
					{
						F=B;
						get_word();
						type=0x118;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}
				case '%':
				case '*':
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x110;
						output();
						line_num++;
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x11b;
						output();
						backflag=1;
						line_num++;
						state=0;
						break;
					}					
				case '!':					
					B=F=lpos-1;
					get_char();
					if(ch=='=')
					{
						state=0;
						F=lpos-1;
						get_word();
						type=0x117;
						output();
						line_num++;
						break;
					}
					else 
					{
						F=B;
						get_word();
						type=0x11c;
						output();
						line_num++;
						backflag=1;
						state=0;
						break;
					}
				case '\n':
					line_id++;
					word_num+=line_num;
					printf("Line %2d : %d words\n",line_id,line_num);
					line_num=0;
					state=0;
					break;
				default:break;
				}
		}
	default:break;
	}
	if(backflag!=1)get_char();
	}
	if(ch==EOF)
	{
		line_id++;
		word_num+=line_num;
		printf("Line %2d : %d\n",line_id,line_num);
	}
	printf("\nTotal:%d lines, %d words, %d errors\n",line_id,word_num,errornum);
}

int main()
{		
	printf("Please input the  test file's  name :  ");
	scanf("%s",&filename);
	if((fin=fopen(filename,"r"))==0)
	{
		printf("error!\n");
	}
	printf("Please input the object file's name :  ");
	scanf("%s",&fileout);
	if((fout=fopen(fileout,"w"))==NULL)
	{
		printf("\ncan not open file!\n");
	}
	scanner();
	return 0;
}

⌨️ 快捷键说明

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