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

📄 lexicalanalyser.java

📁 java版本的词法分析器
💻 JAVA
字号:
//LexicalAnalyser:LexicalAnalyser.java
//the class receive the file to be complied and print
package LexicalAnalyser;

import java.io.*;

class LexicalAnalyser
{
	private ReservedTable rt;//the component which hold the keyword
	private String sourceString;/*the component which hold the 
	                             content of source file*/
	private File sourceFile;
	private int currentToken;//hold the token of currentString
	private String currentString;//hold the string to be exported
	private Scanner scan;


	LexicalAnalyser(File sourceFile,ReservedTable rt)
	{System.out.println("the Lexical Analyser is setting up");
	 this.sourceFile=sourceFile;
	 this.rt=rt;
	
	}
	
	public void beginAnalyser(){
	
		//the string save the source file to be analysed
        sourceString="";  		
		//
		try{
		    FileReader rf=new FileReader("D:\\scanner\\LexicalAnalyser\\ex1.H");
		    BufferedReader br=new BufferedReader(rf);
		    String rs;
		    while((rs=br.readLine())!=null)
		    {
		        sourceString=sourceString+rs+"\n";
		    }
		    br.close();
		}
	   catch(IOException e){
	   	System.out.println(e);
	   }
	  
	   scan=new Scanner(sourceString,rt);//create a new Scanner object
	   
	   int line=1;//the counter of line number
/***********************************************************
 ***********************************************************
 *                     MAIN FUCTION                        *
 *while circle
 ***********************************************************/
       while((scan.counter+1)<sourceString.length()){
       
	   	currentToken=scan.getToken();
	   	
	    currentString=scan.returncurrentString();
	   
	    if(scan.newline)//output the lineNO.
	    {
	    	System.out.println("第"+line+"行");
		     line++;
		}
		
	    Output(currentString,currentToken);
	   }
	}
		
/* Procedure output prints a token String 
 * and its lexeme 
 */		
	public void Output(String currentString,int currentToken){
	    switch (currentToken){
	    	case TokenType.ERROR:
	    	System.out.println("ERROR");
	    	break;
	    	case TokenType.ID://if the identitier is keyword.point out
	    	
	    	if(rt.isKeyWord(currentString))
	    	System.out.println("[KEYWORD]:"+currentString);
	    	else
	    	System.out.println("[ID]:"
	    	                   +currentString+"[TokenType]:"+currentToken);
	    	break;
	    	case TokenType.NUM:
	    	System.out.println("[NUM]:"
	    	                   +currentString+"[TokenType]:"+currentToken);
	    	break;
	        case TokenType.ASSIGN:
	        System.out.println("[ASSIGN]:"
	                            +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.EQ:
	        System.out.println("[EQ]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.LT:
	        System.out.println("[LT]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.LTE:
	        System.out.println("[LTE]:"
	                          +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.PLUS:
	        System.out.println("[PLUS]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.MINUS:
	        System.out.println("[MINUS]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.TIMES:
	        System.out.println("[TIMES]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.OVER:
	        System.out.println("[OVER]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.LPAREN:
	        System.out.println("[LPAREN]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.RPAREN:
	        System.out.println("[RPAREN]:"
	                           +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.SEMI:
	        System.out.println("[SEMI]:"
	                          +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.LCBRACKET:
	        System.out.println("[LCBRACKET]:"
	                            +currentString+"[TokenType]:"+currentToken);
	        break;
	        case TokenType.RCBRACKET:
	        System.out.println("[RCBRACKET]"
	                           +currentString+"[TokenType]"+currentToken);
	        break;
	        
	        default: /* should never happen */
            System.out.println("unknown state");
	        
	        
	        
	        
	        }
	}

                             
}	
	
	
	
	
	
	

⌨️ 快捷键说明

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