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

📄 syntaxanalyse.java

📁 操作系统中的语法分析,主要是判断语言是否合乎语言规范
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	 else return false;
	}
	else if("READ"==keystr)
	{
	if(true==Read())
	 {
	 	return true;
	 }
	 else return false;
	}
	else if("WRITE"==keystr)
	{
	if(true==Write())
	 {
	 	return true;
	 }
	 else return false;
	}
	else if("BEGIN"==keystr)
	{
		if(true==CompSent())
	 {
	 	return true;
	 }
	 else return false;
	}
	else
	{
		System.out.println(keystr);
		errstr="语句定义出现错误";
		ErrorDoen(errstr);
		return false;
	}
	//return true;
}

//赋值语句r
public boolean AssiPro()
{
	if("IDENT"==keystr)
	{
	 GetKeyWord();
	 if(true==Suffix())
	 {
	 	return true;
	 }	
	 else return false;
	}
	else
	{
		errstr="定义标识符出现错误";
		ErrorDoen(errstr);
		return false;
	}
}
//后缀r
public boolean Suffix()
{
	if("BECOMES"==keystr)
	{    
		 GetKeyWord();
		 if(true==Express())
		 {
		 	return true;
		 }
		 else return false;
	   
	}
	else if("LPAREN"==keystr)
	{
		GetKeyWord();
		if(true==Express())
		{
		 	if("RPAREN"==keystr)
		 	{
		 		GetKeyWord();
		 		return true;
		 	}
		 	else
		 	{
		 	errstr="定义后缀出现错误";
		    ErrorDoen(errstr);
		    //GetKeyWord();
		    return false;		
		 	}
		}
		 else return false;
		}
	else return true;	
	}

//条件语句r
public boolean IfSent()
{
	if("IF"==keystr)
	{
	 GetKeyWord();	
	 if(true==Conditio())
	 {
	 	if("THEN"==keystr)
	 	{
	 	   GetKeyWord();
	 	   if(true==Sentence())
	 	   {
	 	   	return true;
	 	   }
	 	   else return false;
	 	}
	 	else
	 	{
	 		errstr="条件语句出现错误";
		    ErrorDoen(errstr);
		    GetKeyWord();
		    return false;
	 	}
	 }
	 else return false;	
	}
	else
	{
	        errstr="条件语句出现错误";
		    ErrorDoen(errstr);
		    return false;	
	}
}
//条件r
public boolean Conditio()
{
	
     if(("PLUS"==keystr)||("MINUS"==keystr)||("USNUMBER"==keystr)||("LPAREN"==keystr)||("IDENT"==keystr))
     //表达式的frist集
	  {
	  	if(true==Express())
	  {
		if(true==RespOper())
		{
		 if(true==Express())
		 return true;	
		 else return false;
		}
		else return false;
	  }
	  else return false;
	  }
	else if("ODD"==keystr)
	{
		GetKeyWord();
	 if(true==Express())
	 return true;	
     else return false;	
	}
	else
	{
	 errstr="条件语出现错误";
    ErrorDoen(errstr);
    //GetKeyWord();
    return false;	
	}
}
//当型语句r
public boolean WhilSent()
{
	if("WHILE"==keystr)
	{
		GetKeyWord();
		if(true==IfSent())
		{
		 if("DO"==keystr)
		 {
		 	GetKeyWord();
		 	if(true==Sentence())
		    return true;	
		    else return false;
		 }
		 else
		 {
		 	errstr="当语句出现错误";
            ErrorDoen(errstr);
		    //GetKeyWord();
            return false;
		 }	
		}
		else return false;
		
	}
	else
	{
	errstr="当语句出现错误";
    ErrorDoen(errstr);
		    //GetKeyWord();
    return false;	
	}
}
//读语句r
public boolean Read()
{
	if("READ"==keystr)
	{
		GetKeyWord();
	 if("LPAREN"==keystr)
	 {
	 	GetKeyWord();
	  if("IDENT"==keystr)
	  {
	  	GetKeyWord();
	  	if(true==this.IdSuff())
	  	{
	  	 if("RPAREN"==keystr)
	  	 {
	  	  GetKeyWord();
	  	  return true;	
	  	 }
	  	 
	  	 else
	  	 {
	  	 	errstr="读语句出现错误";
            ErrorDoen(errstr);
		    //GetKeyWord();
            return false;
	  	 }
	  	}
	  	else return false;
	  }
	  else
	  {
	 	errstr="读语句出现错误";
        ErrorDoen(errstr);
		    //GetKeyWord();
        return false;	  	
	  }	
	 }
	 else
	 {
	 	errstr="读语句出现错误";
        ErrorDoen(errstr);
		    //GetKeyWord();
        return false;	
	 }	
	}
	else
	{
	errstr="读语句出现错误";
    ErrorDoen(errstr);
		    //GetKeyWord();
    return false;
    }
    }

//写语句
public boolean Write()
{
	if("WRITE"==keystr)
	{
		GetKeyWord();
	 if("LPAREN"==keystr)
	 {
	 	GetKeyWord();
	  if(true==this.Express())
	  {
	  	if(true==this.ExprSuff())
	  	{
	  	 if("RPAREN"==keystr)
	  	 {
	  	  GetKeyWord();
	  	  return true;	
	  	 }
	  	 
	  	 else
	  	 {
	  	 	errstr="写语句出现错误";
            ErrorDoen(errstr);
		    //GetKeyWord();
            return false;
	  	 }
	  	}
	  	else return false;
	  }
	  else return false;	  	
	 
	 }
	 else
	 {
	 	errstr="写语句出现错误";
        ErrorDoen(errstr);
		    //GetKeyWord();
        return false;	
	 }	
	}
	else
	{
	errstr="写语句出现错误";
    ErrorDoen(errstr);
		    //GetKeyWord();
    return false;
    }
}
//复合语句
public boolean CompSent()
{
	if("BEGIN"==keystr)
	{
		GetKeyWord();
	  if(true==this.Sentence())
	  {
	  	if(true==this.SentSuff())
	  	{
	  	 if("END"==keystr)
	  	 {
	  	  GetKeyWord();
	  	  return true;	
	  	 }
	  	 
	  	 else
	  	 {
	  	 	errstr="复合语句出现错误";
            ErrorDoen(errstr);
		    //GetKeyWord();
            return false;
	  	 }
	  	}
	  	else return false;
	  }
	  else return false;	  	
	 }
	else
	{
	errstr="复合语句出现错误";
    ErrorDoen(errstr);
    //GetKeyWord();
    return false;
    }
}
//语句后缀
public boolean SentSuff()
{
	while(true)
	{
		if("SEMICOLON"==keystr)
		{
			GetKeyWord();
		 	if(true==Sentence()) {}
		 	else return false;
		}
		else return true;
	}
}
//表达式
public boolean Express()
{
	
	if("PLUS"==keystr)
	{
		GetKeyWord();
		if(true==Term())
		{
		 if(true==TermSuff())
		   return true;
		   else return false;	
		}
		else return false;
	}
	else if("MINUS"==keystr)
	{
	   GetKeyWord();
	   if(true==Term())
		{
		 if(true==TermSuff())
		   return true;
		  else return false;	
		}
		else return false;	
	}
	else if("IDENT"==keystr||"USNUMBER"==keystr||"LPAREN"==keystr)
	{
	  if(true==Term())	
	  {
	  	if(true==TermSuff())
	  	return true;
	  	else return false;
	  }
	  else return false;
	  	
	}
	else
	{
	 errstr="表达式语句出现错误";
     ErrorDoen(errstr);
     return false;	
	}
	
}
//表达式后缀
public boolean ExprSuff()
{
	while(true)
	{
		if("COMMA"==keystr)
		{
			GetKeyWord();
		 	if(true==Express())
		 	return true;
		 	else return false;
		}
		else return true;
	}
}
//项
public boolean Term()
{
	if(true==Factor())
	{
		if(true==FactSuff())
		return true;
		else return false;
	}
	else return false;
}
//项后缀
public boolean TermSuff()
{
	while(true)
	{
	if("PLUS"==keystr||"MINUS"==keystr)//TermSuff()的first集中的字符
	{
	 if(true==AddOper())
	 {
	 	if(true==Term())
	 	return true;
	  	else return false;
	 }
	 else return false;	
	}
	else return true;
	}
}
//因子后缀
public boolean FactSuff()
{
	while(true)
	{
	if("TIMES"==keystr||"SLASH"==keystr)//FactSuff()的first集中的字符
	{
	 if(true==MulOper())
	 {
	 	if(true==Factor()){}
	  	else return false;
	 }
	 else return false;	
	}
	else return true;
	}
}
//因子
public boolean Factor()
{
	if("IDENT"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("USNUMBER"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("LPAREN"==keystr)
	{
		GetKeyWord();
		if(true==Express())
	 	{
	 		if("RPAREN"==keystr)
	 		{
	 			GetKeyWord();
	 			return true;
	 		}
	 		else
	 		{
	 		 System.out.println(keystr);
	 		 errstr="因子构造中缺少右括号出现错误";
              ErrorDoen(errstr);
		    //GetKeyWord();
             return false;	
	 		}
	 	}
	  	else return false;
	}
	else
	{
	 errstr="因子构造出现错误";
     ErrorDoen(errstr);
		    //GetKeyWord();
    return false;	
	}
}
//加型运算符
public boolean AddOper()
{
	if("PLUS"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("MINUS"==keystr)
	{
		GetKeyWord();
		return true;
	}
    else
    {
     errstr="加型运算符构造出现错误";
     ErrorDoen(errstr);
     //GetKeyWord();
    return false;	
    }
}
//乘型因子
public boolean MulOper()
{
 if("TIMES"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("SLASH"==keystr)
	{
		GetKeyWord();
		return true;
	}
    else
    {
     errstr="乘型运算符构造出现错误";
     ErrorDoen(errstr);
     //GetKeyWord();
    return false;	
    }
}
//关系运算符
public boolean RespOper()
{
	if("EQL"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("NLEQ"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("LSS"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("LEQ"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else if("GTR"==keystr)
	{
		GetKeyWord();
		return true;
		
	}
	else if("GEQ"==keystr)
	{
		GetKeyWord();
		return true;
	}
	else
	{
	 errstr="关系运算符运算符构造出现错误";
     ErrorDoen(errstr);
     //GetKeyWord();
     return false;	
	}
}
public static void main(String args[])
{
	WordAnalyse worda=new WordAnalyse();
	SyntaxAnalyse syntax=new SyntaxAnalyse();
	String str=new String();
	String str1=new String();
	System.out.println("请你输入要进行词法分析的文件:");
	str=worda.ReadLineFormConsole();
	System.out.println("请你创建要存储词法分析后的文件名:");
	str1=worda.ReadLineFormConsole();
	if(false==worda.WriteFile(str1))
	 	{
	 	 System.out.println("创建存储词法分析后的文件名失败:");	
	 	}
	 	if(true==worda.OpenFile(str))
	 	{
	 		while(-1!=worda.FileIsEnd())
	 	    {
	 	     worda.GetSym();
	 	     if(-1!=worda.FileIsEnd())
	 	     {
	 	     	worda.PrintResult();
	 	     }
	 	     
	 	    }
	 	 System.out.println("词法分析总共错误出现"+worda.GetErrorNum());
	 	}
	System.out.println();
	System.out.println("语法分析结果");
	if(syntax.OpenFile(str1))
	{
		if(syntax.Program())
		{
			System.out.println("无语法错误!");
			syntax.CloseFile();
		}
	}
	else
	{
		System.out.println("无法打开文件!");
	}
	
	
	
}
}

⌨️ 快捷键说明

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