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

📄 yufafenxi.java

📁 编译原理 实现了词法分析 语法分析等基本功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			Cuowu err=new Cuowu(0);
			err.showError();
			System.exit(0);
		}
		
		
	}
	
	void bianliangshuoming(){//变量说明部分			
		do{
			CurrentWord=getSym(mys);	
		    if(CurrentWord.SYM.equals("IDENT"))
		    {		
		    	////////////////////////////////
		        define=new Tabdingyi(CurrentWord.NAME,"VARIABLE",-1,level,adr++);
		    	define.display();  	
		    	show(define);
		    	table.add(define);
		    	///////////////////////////////		    	
		    	CurrentWord=getSym(mys);//读下一个		        
		    }
		    else{
		    	Cuowu err=new Cuowu(4);
				err.showError();
				System.exit(0);
		    }		    	
		}while(CurrentWord.SYM.equals(","));
		if(CurrentWord.SYM.equals(";")){
			CurrentWord=getSym(mys);//说明结束,读下一个
			System.out.println("语法:");
			System.out.println("分析了一个变量说明的部分");
		}
		else{
			Cuowu err=new Cuowu(5);
			err.showError();
			System.exit(0);
		}
	}
	void changliangdingyi(){//常量定义
		//CurrentWord.show(CurrentWord.NAME);
		if(CurrentWord.SYM.equals("IDENT")){//标识符	
			
			String helpName=CurrentWord.NAME;//define的NAME
			
			CurrentWord=getSym(mys);//读下一个
			
			if(CurrentWord.SYM.equals("=")){
				CurrentWord=getSym(mys);//读下一个	
			}
			else{
				Cuowu err=new Cuowu(1);
				err.showError();
				System.exit(0);
			}
			if(CurrentWord.SYM=="NUMBER"){//CurrentWord.NUM=Integer.parseInt(help);
				System.out.println("语法:");
				System.out.println("分析了一个常量定义");
				////////////////////////////////////
				 define=new Tabdingyi(helpName,"CONSTANT",CurrentWord.NUM,-1,-1);
			     define.display();  	
			     show(define);
			     table.add(define);
				////////////////////////////////////
			     CurrentWord=getSym(mys);//说明结束,读下一个
				
				
				
			}	
			else{
				Cuowu err=new Cuowu(3);
				err.showError();
				System.exit(0);
			}
			
		}
		else{
			//System.out.println("google!");
			Cuowu err=new Cuowu(2);
			err.showError();
			System.exit(0);
		}		
	}
	
	
	void guochengshuoming(){//过程说明部分,往下读了一个	
		    CurrentWord=getSym(mys);
		    if(CurrentWord.SYM.equals("IDENT")){
            ////////////////////////////////////
		     adr=3;//adr返回0
			 define=new Tabdingyi(CurrentWord.NAME,"PROCEDURE",-1,level++,adr);//过程为3!!!
		     define.display();  	
		     show(define);
		     table.add(define);
		     table.addLevel();
		    ////////////////////////////////////			
			CurrentWord=getSym(mys);
			if(CurrentWord.SYM.equals(";")){
				CurrentWord=getSym(mys);//说明结束,读下一个	
				System.out.println("语法:");
				System.out.println("分析了一个过程首部");
				Fenchengxu();//分程序
				//CurrentWord=getSym(mys);
				if(CurrentWord.SYM.equals(";")){
					level=0;
					CurrentWord=getSym(mys);//说明结束,读下一个					
                    //<过程说明部分>---可重复,
					//没有在下读一个,隐含上面完成说明后要下读一个单词
					while(CurrentWord.SYM.equalsIgnoreCase("procedure"+"SYM")){
						guochengshuoming();
					}
					//CurrentWord=getSym(mys);	
					System.out.println("分析了过程说明部分");		
					
				}
				else{
					CurrentWord.show(CurrentWord.SYM);
					Cuowu err=new Cuowu(8);
					err.showError();
					System.exit(0);
				}
					
			}
			else{
				Cuowu err=new Cuowu(7);
				err.showError();
				System.exit(0);
			}		
			
			
			
		}
		
		else{
			CurrentWord.show(CurrentWord.SYM);
			Cuowu err=new Cuowu(6);
			err.showError();
			System.exit(0);
		}
		
	}
	void yuju(){//语句 
		if(CurrentWord.SYM.equals("IDENT")){
			CurrentWord=getSym(mys);
			fuzhiyuju();//赋值语句	
			System.out.println("语法:");
			System.out.println("分析了一个赋值语句");
		}
		else if(CurrentWord.SYM.equals("if"+"SYM")){
			CurrentWord=getSym(mys);
			tiaojianyuju();//条件语句			
		}
		else if(CurrentWord.SYM.equals("while"+"SYM")){
			CurrentWord=getSym(mys);
			dangxingxunhuan();//当形循环语句			
		}
		else if(CurrentWord.SYM.equals("call"+"SYM")){//过程调用语句
			CurrentWord=getSym(mys);
			if(CurrentWord.SYM.equals("IDENT")){
				CurrentWord=getSym(mys);//说明结束,读下一个
				System.out.println("语法:");
				System.out.println("分析了一个过程调用语句");
			}
		}
		else if(CurrentWord.SYM.equals("read"+"SYM")){			
			duyuju();//读语句			
		}
		else if(CurrentWord.SYM.equals("write"+"SYM")){
			xieyuju();//写语句			
		}
		else if(CurrentWord.SYM.equals("begin"+"SYM")){
			fuheyuju();//复合语句 			
		}
		else if(CurrentWord.SYM.equals(".")||CurrentWord.NAME.equals(";")||CurrentWord.NAME.equals("end")){//空语句
			//CurrentWord=getSym(mys);//说明结束,读下一个
			System.out.println("语法:");
			System.out.println("分析了一个空语句");	
		}
		else{
			CurrentWord.show(CurrentWord.SYM);
			Cuowu err=new Cuowu(13);
			err.showError();
			System.exit(0);
		}
		
	}
	void fuzhiyuju(){////赋值语句				
			
			if(CurrentWord.SYM.equals(":")){
				CurrentWord=getSym(mys);//读下一个	
			}
			else{
				CurrentWord.show(CurrentWord.SYM);
				
				Cuowu err=new Cuowu(10);
				err.showError();
				System.exit(0);
			}			
			//CurrentWord=getSym(mys);//读下一个			
			if(CurrentWord.SYM.equals("=")){
				CurrentWord=getSym(mys);//读下一个	
			}
			else{
				CurrentWord.show(CurrentWord.SYM);
				Cuowu err=new Cuowu(10);
				err.showError();
				System.exit(0);
			}
			biaodashi();//表达式	
			//System.out.println("分析了一个赋值语句");
			
	}
    void biaodashi(){
		if(CurrentWord.SYM.equals("+")||CurrentWord.SYM.equals("-")){
			CurrentWord=getSym(mys);//读下一个					
		}
    	xiang();
    	while(CurrentWord.SYM.equals("+")||CurrentWord.SYM.equals("-")){
    		CurrentWord=getSym(mys);//读下一个
    		xiang();
		}
    	//CurrentWord=getSym(mys);//说明结束,读下一个
    	System.out.println("语法:");
		System.out.println("分析了一个表达式");
    	
	}
	void xiang(){
		yinzi();
		while(CurrentWord.SYM.equals("*")||CurrentWord.SYM.equals("/")){
			CurrentWord=getSym(mys);//读下一个
    		yinzi();
		}
		System.out.println("语法:");
		System.out.println("分析了一个项");
		
	}
	void yinzi(){
		if(CurrentWord.SYM.equals("IDENT")){//标识符
			CurrentWord=getSym(mys);//说明结束,读下一个
			System.out.println("语法:");
			System.out.println("分析了一个标识符因子项");
		}
		else if(CurrentWord.SYM.equals("NUMBER")){//无符号整数
			CurrentWord=getSym(mys);//说明结束,读下一个
			System.out.println("语法:");
			System.out.println("分析了一个无符号整数因子");
		}
        else if(CurrentWord.SYM.equals("(")){//表达式
        	CurrentWord=getSym(mys);
			biaodashi();
			if(CurrentWord.SYM.equals(")")){
				CurrentWord=getSym(mys);//说明结束,读下一个
				System.out.println("语法:");
				System.out.println("分析了一个表达式因子");
			}
			else{
				Cuowu err=new Cuowu(15);
				err.showError();
				System.exit(0);
			}
			
		}
		
		else{
			Cuowu err=new Cuowu(16);
			err.showError();
			System.exit(0);
			
		}	
	}
	
	
	void tiaojianyuju(){//条件语句
		tiaojian();//条件		
		if(CurrentWord.SYM.equals("then"+"SYM")){
			CurrentWord=getSym(mys);//读下一个
			yuju();
			CurrentWord=getSym(mys);//说明结束,读下一个
			System.out.println("语法:");
			System.out.println("分析了一个条件语句");				
		}
		else{
			Cuowu err=new Cuowu(11);
			err.showError();
			System.exit(0);
		}
		
	}
	
	void tiaojian(){//条件
		if(CurrentWord.SYM.equals("odd"+"SYM")){
			CurrentWord=getSym(mys);//读下一个
			biaodashi();
			//CurrentWord=getSym(mys);//说明结束,读下一个
			System.out.println("语法:");
			System.out.println("分析了一个条件");				
		}
	    else{
		   biaodashi();
		   if(CurrentWord.SYM.equals("=")||CurrentWord.SYM.equals("#")||CurrentWord.SYM.equals("<")
				||CurrentWord.SYM.equals("<=")||CurrentWord.SYM.equals(">")||CurrentWord.SYM.equals(">="))
		   {
			   CurrentWord=getSym(mys);//读下一个
			   biaodashi();
			   //CurrentWord=getSym(mys);//说明结束,读下一个	
			   System.out.println("语法:");
				System.out.println("分析了一个条件");
			   
		   }
		   else{
			   CurrentWord.show(CurrentWord.SYM);
			   Cuowu err=new Cuowu(17);
			   err.showError();
			   System.exit(0);
		    }
		
	    }
		
	}
	
	
	
	
	
	
	void dangxingxunhuan(){//当型语句
		tiaojian();//条件		
		if(CurrentWord.SYM.equals("do"+"SYM")){
			CurrentWord=getSym(mys);//读下一个
			yuju();
			CurrentWord=getSym(mys);//说明结束,读下一个	
			System.out.println("语法:");
			System.out.println("分析了一个条件语句");				
		}
		else{
			CurrentWord.show(CurrentWord.SYM);
			Cuowu err=new Cuowu(12);
			err.showError();
			System.exit(0);
		}
		
	}
	void duyuju(){
		CurrentWord=getSym(mys);
		if(CurrentWord.SYM.equals("(")){
			do{
				CurrentWord=getSym(mys);	
			    if(CurrentWord.SYM.equals("IDENT"))		  
			        CurrentWord=getSym(mys);
			    else{
			    	Cuowu err=new Cuowu(14);
					err.showError();
					System.exit(0);
			    }		    	
			}while(CurrentWord.SYM.equals(","));
			
			if(CurrentWord.SYM.equals(")")){
				CurrentWord=getSym(mys);//说明结束,读下一个	
				System.out.println("语法:");
				System.out.println("分析了一个读语句");
			}
			else{
				Cuowu err=new Cuowu(19);
				err.showError();
				System.exit(0);
			}
			
		}
		else{
			Cuowu err=new Cuowu(20);
			err.showError();
			System.exit(0);
		}
				
		
	}
	void xieyuju(){
		CurrentWord=getSym(mys);
		if(CurrentWord.SYM.equals("(")){
			do{
				CurrentWord=getSym(mys);	
			    if(CurrentWord.SYM.equals("IDENT"))		  
			        CurrentWord=getSym(mys);
			    else{
			    	Cuowu err=new Cuowu(21);
					err.showError();
					System.exit(0);
			    }		    	
			}while(CurrentWord.SYM.equals(","));
			
			if(CurrentWord.SYM.equals(")")){
				CurrentWord=getSym(mys);//说明结束,读下一个	
				System.out.println("语法:");
				System.out.println("分析了一个写语句");
			}
			else{
				Cuowu err=new Cuowu(22);
				err.showError();
				System.exit(0);
			}
			
		}
		else{
			Cuowu err=new Cuowu(23);
			err.showError();
			System.exit(0);
		}
				
		
	}
	void fuheyuju(){
		do{
			CurrentWord=getSym(mys);	
		    yuju();		    	
		}while(CurrentWord.SYM.equals(";"));
		if(CurrentWord.SYM.equals("end"+"SYM")){
			CurrentWord=getSym(mys);//说明结束,读下一个	
			System.out.println("语法:");
			System.out.println("分析了一个复合语句");
		}
		else{
			CurrentWord.show(CurrentWord.SYM);
			Cuowu err=new Cuowu(18);
			err.showError();
			System.exit(0);
		}
	}
	
	
//	------------------------------------------结束----------------------------------------------------------------------
	
	
	

	public void actionPerformed(ActionEvent arg0) {
		// TODO 自动生成方法存根
		
	}
	
//	----------------------------------------结束------------------------------------------------------------------------
	
	

	
	
	
	
	
	
	
}

⌨️ 快捷键说明

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