2013-11-07 4 views
1

Я протестировал this example(lexe.java), но он дал мне только один выход.Лексический анализ дает только один выход?

Я дал этот текст в качестве читателя:

public class LexeTest{ 
private int a = 14; 
} 

, а nextToken() функции:

public Category nextToken() { 
     if (inp.findWithinHorizon (tokenPat, 0) == null) 
      return Category.EOF; 
     else { 
      lastLexeme = inp.match().group (0); 
      if (inp.match().start (1) != -1) 
       return nextToken(); 
      else if (inp.match().start (2) != -1) 
       return Category.IDENT; 
      else if (inp.match().start (3) != -1) 
       return Category.NUMERAL; 
      Category result = tokenMap.get (lastLexeme); 
      if (result == null) 
       return Category.ERROR; 
      else 
       return result; 
     } 
    } 

Isdie основного метод:

System.out.println(lexeObject.nextToken());

выход:

IDENT

Почему? но текстовый файл содержит несколько ключевых слов? Кто-нибудь знает, в чем проблема?

ответ

1

Извините, что это проблема, кажется, ваша способность чтения. Вот часть самого первого комментария примера вы связаны (выделено мной):

Лексический анализатор производит поток лексем, взятых из произвольного чтения подводимой к конструктору, в ответ на повторил звонки в Лексера nextToken.

+0

em, я этого не замечал. Однако, пожалуйста, если вы можете просто написать мне основную, я попробовал «сделать-то», но я не добился успеха. –

+0

Вы хотите «главное»? Который из? – Ingo

+0

Да, основной метод, как вы называете 'Lexer # nextToken()' в цикле, спасибо –

2

Если вы звоните только nextToken(), вы получите только один токен. Я не понимаю, почему это такая тайна. Попробуйте петлю .