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

📄 compiler.java

📁 java compiler project to implement LR parsing
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
 		t.getTokenName().equalsIgnoreCase("or"))
 		{
 			match(t.getTokenName(),"KeyWord");
 		}
	}
	/**************************************************************************/
	private void term()
	{
		factor();
		term2();
	}
	/**************************************************************************/
	private void term2()
	{
 		if(
 	    t.getTokenName().equals("*")||
 	    t.getTokenName().equals("/")||
 		t.getTokenName().equalsIgnoreCase("div")||
 		t.getTokenName().equalsIgnoreCase("mod")||
 		t.getTokenName().equalsIgnoreCase("and"))
 		{
 			match(t.getTokenName(),"KeyWord");
 			mulop();
 			factor();
 			term2();
 		}
 		else
 		{}
	}
	/**************************************************************************/
	private void factor()
	{
		if(t.getTokenName().equalsIgnoreCase("not"))
 		{
 			match("not","KeyWord");
 			factor();
 		}
 		else
 		if(t.getTokenName().matches("[a-zA-Z]\\w*"))
 		{
 			match("","Identifier");
 			factor2();
 		}
 		else
 		if(t.getTokenName().matches("\\d+")||
 		t.getTokenName().matches("\\d+.\\d+"))
 		{
 			match("","Numeric");
 		}
 		else
 		if(t.getTokenName().equals("("))
 		{
 			match("(","KeyWord");
 			expression();
 			match(")","KeyWord");
 		} 
	}
	/**************************************************************************/
	private void factor2()
	{
		if(t.getTokenName().equals("("))
		{
			match("(","KeyWord");
			expression_list();
			match(")","KeyWord");
		}
		else
		{}
	}
	/**************************************************************************/
	private void mulop()
	{
		if(t.getTokenName().equals("*")||
		t.getTokenName().equals("/")||
 		t.getTokenName().equalsIgnoreCase("div")||
 		t.getTokenName().equalsIgnoreCase("mod")||
 		t.getTokenName().equalsIgnoreCase("and"))
 		{
 			match(t.getTokenName(),"KeyWord");
 		}
	}
	/**************************************************************************/
	/**The following method is used for check the token with regular syntax.
	/**************************************************************************/
	private void match(String name,String type)
	{
		if(type.equalsIgnoreCase(t.getTokenType())&&
		!t.getTokenType().equalsIgnoreCase("KeyWord")&&
		!t.getTokenType().equalsIgnoreCase("Identifier"))
		nextToken();
		else
		if(name.equalsIgnoreCase(t.getTokenName())&&
		type.equalsIgnoreCase(t.getTokenType()))
		nextToken();
		else
		if(type.equalsIgnoreCase(t.getTokenType())&&
		!t.getTokenType().equalsIgnoreCase("KeyWord"))
		nextToken();
		else
		errorMessage(name);
	}
	/**************************************************************************/
	/**The following method is used for taking the text from file or text area.
	/**************************************************************************/
	private void start()
	{
		scan=new Scanner(code);
	}
	/**************************************************************************/
	/**The following method is used for indicating to new line from text.
	/**************************************************************************/
	private void newLine()
	{
		if(scan.hasNextLine())
		{
			counter++;
			tokens=scan.nextLine();
			token=new StringTokenizer(tokens," .;:=><,+-*/()[]{}",true);
			temp =new StringTokenizer(tokens," .;:=><,+-*/()[]{}",true);
			nextToken();
		}
	}
	/**************************************************************************/
	/**The following method is used for getting new token.
	/**************************************************************************/
	private void nextToken()
	{
		if(token.hasMoreTokens())
		{
			String str=token.nextToken();
			String strTemp;
			String tokenType="";
			if(!str.matches("\\s*"))
			{
				if(str.equals("{"))
				{
					while(token.hasMoreTokens())
					{
						str=token.nextToken();
						System.out.println("************\n"+
						                   str+"\n"+
						                   "************\n");
						if(str.equals("}"))
						nextToken();
					}
				}
				/**************************************************************/
				else
				if(str.equals(":"))
				{
					stop:
					{
						while(temp.hasMoreTokens())
						{
							strTemp=temp.nextToken();
							if(strTemp.equals(":"))
							{
								if(temp.hasMoreTokens())
								{
									strTemp=temp.nextToken();
									if(strTemp.equals("="))
									{
										if(token.hasMoreTokens())
										strTemp=token.nextToken();
										str=str.concat(strTemp);
									}
									break stop;
								}
							}
						}
					}
				}
				/**************************************************************/
				else
				if(str.equals("<"))
				{
					stop:
					{
						while(temp.hasMoreTokens())
						{
							strTemp=temp.nextToken();
							if(strTemp.equals("<"))
							{
								if(temp.hasMoreTokens())
								{
									strTemp=temp.nextToken();
									if(strTemp.equals("=")||strTemp.equals(">"))
									{
										if(token.hasMoreTokens())
										strTemp=token.nextToken();
										str=str.concat(strTemp);
									}
									break stop;
								}
							}
						}
					}
				}
				/**************************************************************/
				else
				if(str.equals(">"))
				{
					stop:
					{
						while(temp.hasMoreTokens())
						{
							strTemp=temp.nextToken();
							if(strTemp.equals(">"))
							{
								if(temp.hasMoreTokens())
								{
									strTemp=temp.nextToken();
									if(strTemp.equals("="))
									{
										if(token.hasMoreTokens())
										strTemp=token.nextToken();
										str=str.concat(strTemp);
									}
									break stop;
								}
							}
						}
					}
				}
				/**************************************************************/
				else
				if(str.matches("\\d+"))
				{
					
					stop:
					{
						while(temp.hasMoreTokens())
						{
							strTemp=temp.nextToken();
							if(strTemp.matches("\\d+"))
							{
								if(temp.hasMoreTokens())
								{
									strTemp=temp.nextToken();
									if(strTemp.equals("."))
									{
										if(token.hasMoreTokens())
										strTemp=token.nextToken();
										str=str.concat(strTemp);
										
										if(temp.hasMoreTokens())
										{
											strTemp=temp.nextToken();
											if(strTemp.matches("\\d+"))
											if(token.hasMoreTokens())
											strTemp=token.nextToken();
											str=str.concat(strTemp);
										}
										
									}
								}
								break stop;
							}
						}
					}
				}
				/**************************************************************/
				else
				if(str.equals("."))
				{
					stop:
					{
						while(temp.hasMoreTokens())
						{
							strTemp=temp.nextToken();
							if(strTemp.equals("."))
							{
								if(temp.hasMoreTokens())
								{
									strTemp=temp.nextToken();
									if(strTemp.equals("."))
									{
										if(token.hasMoreTokens())
										strTemp=token.nextToken();
										str=str.concat(strTemp);
									}
									break stop;
								}
							}
						}
					}
				}
				/**************************************************************/
				if(isKeyWord(str))
				tokenType="KeyWord";
				else
				if(str.matches("[a-zA-Z]\\w*"))
				tokenType="Identifier";
				else
				if(str.matches("\\d+")||str.matches("\\d+.\\d+"))
				tokenType="Numeric";
				
				String lineNo=Integer.toString(counter);
				
				/*********************************/
				t=new Token(str,tokenType,lineNo);
				/*********************************/
				
				System.out.println(str+"\t\t"+tokenType+"\t\t\t\t"+counter);
			}
			else
			nextToken();
		}
		else
		newLine();
	}
	/**************************************************************************/
	/**The following method is used for checking if the token is KeyWord.
	/**************************************************************************/
	private boolean isKeyWord(String s)
	{
		KeyWordsTable key=new KeyWordsTable();
		int index=0;
		while(index<key.KeyWords.length)
		{
			if(s.equalsIgnoreCase(key.KeyWords[index]))
			return true;
			index++;
		}
		return false;
	}
	/**************************************************************************/
	/**The following method is used for formatting the error message.
	/**************************************************************************/
	private void errorMessage(String name)
	{
		numberOfErrors++;
		String infoError;
		if(name.equals(""))
		infoError="Illigal value ..";
		else
		infoError="Un expected : \t<<"+name+">>";
		error+=infoError+"\nError detected at <"+t.getTokenName()+"> Line number : \t<"+t.getLineNo()+">\n\n";
//		System.out.println(
//			"Error detected at <"+t.getTokenName()+"> Line number <"+t.getLineNo()+">");
	}
	/**************************************************************************/
	/**The following method is used for adding simple details about error.
	/**************************************************************************/
	private void errorDetails()
	{
		if(numberOfErrors==0)
		details="No Errors founded\nProcess completed";
		else
		details="Number of Errors are : "+numberOfErrors;
	}
	/**************************************************************************/
	/**The following method is used for retrieving the final formatted message.
	/**************************************************************************/
	public String getFinalMessage()
	{
		errorDetails();
		return details+
		       "\n\n__________________BASCAL  --  CREATOR 1.01V__________________\n\n"+
		       error;
	}
}

⌨️ 快捷键说明

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