?? lexicalanalyser.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 + -