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

📄 getwords.java

📁 这个是java版本的pl0语言的词法分析器,带有图形界面,很好的
💻 JAVA
字号:
package myCompiler;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Vector;

public class GetWords {
	  int senLength = 0;
	  int index = 0;
	  char[] sentenceChar = new char[1000];
	  String Token;
	  char CHAR;
	  int Num=100;
	 int Identnum=0;
	  SYM sym;
	  Vector<IDENT> Ident=new Vector<IDENT>();
	  int value;
	  String IDENTITY="IDENTITIER";
	  String DIGIT="DIGIT";
	  int Length=10;
	  int line=1;
	  private java.io.File SourceFile;
	  public  java.io.RandomAccessFile randomAFile; 
	  long pos=0;
	  long fileLength;
	  byte[] b;
	  public GetWords(String SourceFileName){
		  try {
			  SourceFile = new java.io.File(SourceFileName);
		        randomAFile = new java.io.RandomAccessFile(this.SourceFile, "r");
		      try {
				 fileLength=randomAFile.length();
		    	 randomAFile.seek(pos);
		         b=new byte[(int) fileLength+1];
				 randomAFile.readFully(b,0,(int) fileLength);
				 b[(int) fileLength]='$';
				} catch (IOException e) {
				e.printStackTrace();
			}
		      KWTable.initKWTable();
		      IDETable.initIDETable();
		    }
		    catch (FileNotFoundException e) {
		      e.printStackTrace(System.err);
		    }
	  }
	  public char getchar() {
		  char c = 0;
		  c=(char) b[(int) pos];
		  pos++;
		  return c;
	  }
	  public static void main(String args[]){
		  String s="e:/pl0.txt";
		  GetWords g=new GetWords(s);
		 if(g.SourceFile.exists()){
			  do{
			  g.getsym();
			  System.out.println(g.sym.name+" "+g.sym.code);
			  }while(g.pos<g.fileLength);
			  for(int i=0;i<g.Ident.size();i++){
				  System.out.println(g.Ident.get(i).name+" "+g.Ident.get(i).type);
			  }
			  System.out.println(g.value);
		  }
		  
	  }
public void getsym(){
	   sym=new SYM();
	    int Index1;
	    Token="";
	    CHAR=getchar();
	    while(CHAR==' '|(byte)CHAR==13|(byte)CHAR==10)
	    {if(CHAR==13)line++;
	        	CHAR=getchar();
	    }
	    if (CHAR == '$') {
	        	sym.name="$";
	        	sym.code=IDETable.findKey(String.valueOf(CHAR));
	          return; 
	        }
	    if(Character.isLetter(CHAR)){
	        	Index1=0;
	           while (Character.isLetter(CHAR) || Character.isDigit(CHAR)) {
	            	if(Character.isUpperCase(CHAR))
	            		CHAR=Character.toLowerCase(CHAR);
	            	if(Index1<10)
	            	{	Token=contact(Token,CHAR);
	                	Index1++;
	            	 }
	                 CHAR = getchar();
	              }
	            retract();
	            if (KWTable.findKey(Token)>0){
	            	sym.name=Token;
	            	sym.code=KWTable.findKey(Token);
	            }
	            else {
	            	int i;
	            	for( i=0;i<Ident.size();i++)
	            	if(Token.equalsIgnoreCase(Ident.get(i).name))
	            		break;
	            	if(i==Ident.size())
	            		Ident.add(new IDENT(Token));
	                   	sym.name=Token;
	            	sym.code=IDETable.findKey(IDENTITY);
	            }
	        
	        }
	      else if(Character.isDigit(CHAR)){
	        	 Index1=0;
	            while (Character.isDigit(CHAR)) {
	            	Token=contact(Token,CHAR);
	                Index1++;
	                CHAR = getchar();
	            }
	            retract();
	           
	            value=Integer.parseInt(Token);
	            sym.name=Token;
	            sym.code=IDETable.findKey(DIGIT);
	        }
	        else if(CHAR=='+'|CHAR=='-'|CHAR=='*'|CHAR=='/'|CHAR=='='|CHAR=='.'
	        	|CHAR==','|CHAR==';'|CHAR=='('|CHAR==')'|CHAR=='#')
	        {
	        	Token=contact(Token,CHAR);
	        	sym.name=Token;
	        	sym.code=IDETable.findKey(Token);
	          }
	        else  if(CHAR=='>')
	        {
	        	Token=contact(Token,CHAR);
	        	CHAR = getchar();
	             if(CHAR=='=')
	             {
	                  Token=contact(Token,CHAR);
	                  sym.name=Token;
	        	      sym.code=IDETable.findKey(Token);
	                    	
	              }
	             else{
	            	 sym.name=Token;
     	        	 sym.code=IDETable.findKey(Token);
	            	 retract();
	             }
	             
	        }
	                           		
	        else if(CHAR=='<')
	        		{
	        			Token=contact(Token,CHAR);
	        			CHAR = getchar();
	                    if(CHAR=='=')
	                    {
	                    	Token=contact(Token,CHAR);
	                        sym.name=Token;
	        	        	sym.code=IDETable.findKey(Token);
	                    	  CHAR = getchar();
	                    }
	                    else{
	   	            	 sym.name=Token;
	        	         sym.code=IDETable.findKey(Token);
	   	            	 retract();
	   	             }
	        		}
	        else if(CHAR==':'){
	        	Token=contact(Token,CHAR);
	        	CHAR = getchar();
	        	  if(CHAR=='=')
		             {
		                  Token=contact(Token,CHAR);
		                  sym.name=Token;
		        	      sym.code=IDETable.findKey(Token);
		                    	
		              }
		             else{
		                	 Error.error(1);
		            	 	// retract();
		             }
	        	
	        }
	        else
	        {
	        	Error.error(1);
	        }
	        		
                	
	        	}
	        
	        
	        
	        
	  

public  String contact(String TOKEN, char CHAR) {
    String tmpS = TOKEN + String.valueOf(CHAR);
    TOKEN = tmpS;
    return TOKEN;
  }
public void retract(){
	pos--;
}

}

⌨️ 快捷键说明

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