Я хочу отсканировать входной файл (.txt) на основе грамматики лексера и распознать его токены. но как только появляется первый неожиданный токен, программа завершает работу и просто запускает первое исключение.
что я должен сделать, чтобы программа продолжила работу, чтобы найти и распечатать все другие неожиданные токены до конца файла.
Например, мой ввод int $de #de
, но после достижения $de
программа завершает работу и не выдает никаких исключений о #de
вот мой код:
public class Main {
private static HashMap<String, String> keywords = new HashMap<String, String>();
private static HashMap<Integer, String> tokenType = new HashMap<Integer, String>();
public static void main(String[] args) {
setHashMap();
String type , tokInformation;
int blkNo=0 , blkOrd =0;
Token token=Token.badToken;
FileReader r;
BufferedReader br=null;
MyLexer lex = null;
try
{
r = new FileReader("inputFile.txt");
br = new BufferedReader(r);
lex = new MyLexer(r);
}
catch(IOException u ){
u.printStackTrace();
}
try{
token = lex.nextToken();
while (token.getType()!= Token.EOF_TYPE)
{
if(token.getType()==MyLexerTokenTypes.OPEN_ACCOLADE){
blkNo ++;
blkOrd++;
}
if(token.getType()==MyLexerTokenTypes.CLOSE_ACCOLADE)
blkNo--;
if(token.getType()==MyLexerTokenTypes.IDENTIFIER)
{
type=keywords.get(token.getText());
if(type==null)
type = "IDENTIFIER";
}
else
type = tokenType.get(token.getType());
tokInformation = token.getText() + "\t\t"+ type + "\t\t\t"+
token.getLine() + "\t\t"+ token.getColumn()+"\t\t"
+blkNo+"\t\t"+blkOrd;
System.out.println(tokInformation);
token = lex.nextToken();
}
}//end try
catch(Throwable t)
{
System.err.println("Exception: "+t.toString());
for(StackTraceElement e : t.getStackTrace())
System.err.println("\t"+ e);
}
}