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

📄 parsingmethod.java

📁 一个小的编译器,可以模仿类似c语言的语法。很适合初级java学习者
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			{
				flag = false;
			}
			
			else
			{
				error = true;
				flag = false;
			}
		}

		if(error)
		{
			errorMethod.error("single",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			while(WordAnalyze.wordPointer<WordAnalyze.wordStringLength
				&&!WordAnalyze.wordString[WordAnalyze.wordPointer].equals("}"))
				{
					advance();
				}
			clearStack();
			clearQueue();
		}
	}
	
	////////////////////express analyzing//////////////////
	public void expressAnalyze()
	{
		expressA();
	}
	
	public void expressA()
	{
		if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
		{
			advance();
			expressA();
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
			{
				advance();
				if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
				{
					advance();
					expressA();
				}
			}
			else
			{
				errorMethod.error("sign",0,")",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
		}
		else
		if(judgeNum(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			advance();
			expressB();		
		}
		else
		if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			if(!symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
			{
				errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
			else
			{
				String s = getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]);
				String t = getTopStack();
				if(t.equals("double")||t.equals("float"))
				{
					if(s.equals("double")||s.equals("float")||s.equals("int"))
					{
						
					}
					else
					{
						errorMethod.error("express",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
					}
				}
				else
				if(!t.equals(s))
				{
					errorMethod.error("express",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
				}
			}
			advance();
			expressB();
			
		}
		else
		{
			errorMethod.error("express",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
		}
	}
	
	public void expressB()
	{
		if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			advance();
			expressA();
		}
	}
	
	//////////////logic express analyze///////////

	public void logicExpressAnalyze()
	{
		if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
		{
			errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
		}
		logicFlag = true;
		feiFlag = true;
		logicExpressA();
		logicFlag = false;
		feiFlag= false;
		
	}
	public void logicExpressA()
	{
		logicExpressB();
		logicExpressD();
		
	}
	public void logicExpressD()
	{
		if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||")
			||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&"))
			{
				logicFlag = true;
				feiFlag = true;
				advance();
				logicExpressB();
			}
	}
	
	public void logicExpressB()
	{
		if(feiFlag&&WordAnalyze.wordString[WordAnalyze.wordPointer].equals("!"))
		{
			advance();
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
			{
				advance();
				logicExpressB();
				if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
				{
					advance();
					if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
						||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
						{
							logicExpressD();
						}
				}
				else
				{
					errorMethod.error("sign",0,")",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
				}
			
			}
			else
			if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
			{
				if(symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
				{
					if(getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]).equals("char"))
					{
						errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
					}
					
					else
					{
						
						advance();
						if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
							||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
							{
								logicExpressD();
							}
						
					}
					
						
					
				}
				else
				{
					errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
				}
				
			}
			
			else
			if(judgeNum(WordAnalyze.wordString[WordAnalyze.wordPointer]))
			{
				advance();
				if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
						||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
						{
							logicExpressD();
						}
				
			}
			else
			{
				errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
		}
		else
		if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
		{
			advance();
			logicExpressB();
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
			{
				advance();
				if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
				{
					logicExpressC();
				}
				else
				if(judgeLogicOperator(WordAnalyze.wordString[WordAnalyze.wordPointer])&&logicFlag==true)
				{
					logicExpressC();
					
				}	
				else
				if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||")
					||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&"))
					{
						logicExpressD();
					}
						
					
				
			}
			else
			{
				errorMethod.error("sign",0,")",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
		}
		else
		if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			if(!symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
			{
				errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
			else
			{
				if(getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]).equals("char"))
				{
					advance();
					if(judgeLogicOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
					{
						advance();
						if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
						{
							if(symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer])&&getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]).equals("char"))
							{
								advance();
								if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
									||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
									{
										logicExpressD();
									}
							}
							else
							{
								errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
							}
						}
						else
						{
							if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("'"))
							{
								advance();
								if(WordAnalyze.wordString[WordAnalyze.wordPointer].length()==1)
								{
									advance();
									if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("'"))
									{
										advance();
										if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
											||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
											{
												logicExpressD();
											}
									}
									else
									{
										errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
									}
								}
								else
								{
									errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
								}
							}
						}
					}
					else
					{
						errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
					}
				}
				else
				{
					advance();
					logicExpressC();
				}
				
			}
			
		}
		else
		if(judgeNum(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			advance();
			logicExpressC();
		}
		else
		if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("!"))
		{
			advance();
			if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
			{
				if(symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
				{
					advance();
					logicExpressD();
				}
				else
				{
					errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
				}
			}
			else
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
			{
				logicExpressB();
				
			}
			else
			{
				errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
		}
	}
	
	public void logicExpressC()
	{
		if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			feiFlag = false;
			advance();
			logicExpressB();
		}
		else
		if(judgeLogicOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
		{
			feiFlag= false;
			if(logicFlag)
			{
				advance();
				logicFlag = false;
				logicExpressB();
			}
			else
			{
				errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
			}
			
		}
		else
		if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||")
			||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&"))
			{
				logicExpressD();
			}
	}
	
	
	////////////////the symbol is exist or not//////////////
	public boolean symbolIsExisting(String s)
	{
		boolean flag = false;
		int i;
		for(i=0;i<symbolTableLength&&!flag;i++)
		{
			if(symbolTable[i].getSymbolName().equals(s))
			{
				flag = true;
			}
		}
		return flag;
	}
	
	
	///////////////get over of the error sentence////////////
	public void getOverError()
	{
		while(WordAnalyze.wordPointer<WordAnalyze.wordStringLength-1
		&&!WordAnalyze.wordString[WordAnalyze.wordPointer].equals(";"))
		{
			advance();
				
		}
	}
	
	//////////////////succeed////////////////////
	public void success()
	{
		
		if(successFlag)
		{
			CompileFrame.errorArea.append("SUCCEED"+String.valueOf('\n'));

		}
		else
		{
			CompileFrame.errorArea.append("Number of error: "+String.valueOf(errorNum)+String.valueOf('\n'));
		}
	}
	////////show the symbol table//////////////////
	public void showSymbolTable()
	{
		for(int i=0;i<symbolTableLength;i++)
		{
			CompileFrame.errorArea.append("symbol name:"+symbolTable[i].getSymbolName()+"  type:"+symbolTable[i].getSymbolType()+String.valueOf('\n'));
		}
	}
	
	public void showIncludeFile()
	{
		for(int i=0;i<fileNum;i++)
		{
			CompileFrame.errorArea.append("file name:"+includeFile[i].getFileName()+"  type:"+includeFile[i].getFileType()+String.valueOf('\n'));
		}
	}
	
	public void showErrorLine()
	{
		for(int i=0;i<errorNum;i++)
		{
			CompileFrame.errorArea.append("error line in errorLines:"+String.valueOf(errorLines[i])+String.valueOf('\n'));
		}
	}
	
	///////////program analyze//////////////////
	public void programAnalyze()
	{
		/////////the defination part/////////
		defineAnalyze();
	
		/////////the program part///////////
		while(WordAnalyze.wordPointer<WordAnalyze.wordStringLength-1)
		{
		
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("if"))
			{
				ifAnalyze();
				clearStack();
				clearQueue();
			}
			else
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("while"))
			{
				whileAnalyze();
				clearStack();
				clearQueue();
			}
			else
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("for"))
			{ 
				forAnalyze();
				clearStack();
				clearQueue();
			}
			else
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("printf"))
			{
				printfAnalyze();
				clearStack();
				clearQueue();
			}
			else
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("scanf"))
			{
				scanfAnalyze();
				clearStack();
				clearQueue();
			}
			else
			if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
			{
				evaluateAnalyze();
				clearStack();
				clearQueue();
			}
			else
			if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(";"))
			{
				nullAnalyze();
				clearStack();
				clearQueue();
			}
			else
			{
				errorMethod.error("internal",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
				getOverError();
				clearStack();
				clearQueue();
				
			}
		}
		
	}	
	
	public void parsingAnalyzeMethod()
	{
		if(WordAnalyze.wordStringLength==0)
		{
			errorMethod.error("nothing",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
		}
		else
		{
			includeOtherFile();
			
			if(WordAnalyze.wordPointer<WordAnalyze.wordStringLength)
			{
				mainProgram();
			}
			

		}
			//	showSymbolTable();
			//	showIncludeFile();
			//	showErrorLine();
				
	}
	
	
	
}

⌨️ 快捷键说明

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