2016-03-14 10 views
0

Я пытаюсь создать программу, которая изображает лексический анализ в JAVA. Я могу определить токен и установить все, но у меня есть проблема с чтением всей строки, введенной во время цикла. Я хочу, чтобы строка проходила каждый шаг, но я не могу их достичь. Если я попытаюсь сделать это, не делаю, очевидно, что это не дает точного результата. Как читать строку до конца в то время?Невозможно прочитать строку до конца в JAVA

do { 
      if (string.contains("+")) { 
       lex_air[0]++; 
      } else if (string.contains("-")) { 
       lex_air[1]++; 
      } else if (string.contains("*")) { 
       lex_air[2]++; 
      } else if (string.contains("/")) { 
       lex_air[3]++; 
      } 
      if (string.contains(">")) { 
       lex_log[0]++; 
      } else if (string.contains("<")) { 
       lex_log[1]++; 
      } else if (string.contains("=")) { 
       lex_log[2]++; 
      } else if (string.contains(">=")) { 
       lex_log[3]++; 
      } else if (string.contains("<=")) { 
       lex_log[4]++; 
      } 
      if (string.contains("for")) { 
       lex_reserve[0]++; 
      } else if (string.contains("int")) { 
       lex_reserve[1]++; 
      } else if (string.contains("while")) { 
       lex_reserve[2]++; 
      } else if (string.contains("char")) { 
       lex_reserve[3]++; 
      } else { 
       lex_alpha++; 
      } 
     } while (string.endsWith("")); 
+1

заканчивается чем? –

+1

a Строка * всегда * заканчивается символом '' ''; условие в цикле while просто «истинно». –

+0

Откуда вы знаете, что не читаете до конца строки? Не похоже, что вы когда-либо рассматриваете позицию, в которой появляется токен. –

ответ

1

Попробуйте это:

String s = ""; 
     String[] words = s.split("\\s+"); 
     for (int i = 0; i < words.length; i++) 
     { 
      switch (words[i]) 
      { 
      case "+" : 
       lex_air[0]++; 
       break; 

      case "-": 
       lex_air[1]++; 
       break; 

      case "*" : 
       lex_air[2]++; 
       break; 

      case "/": 
       lex_air[3]++; 
       break; 

      case ">": 
       lex_log[0]++; 
       break; 

      case "<": 
       lex_log[1]++; 
       break; 

      case "=": 
       lex_log[2]++; 
       break; 

      case ">=": 
       lex_log[3]++; 
       break; 

      case "<=": 
       lex_log[4]++; 
       break; 

      case "for": 
       lex_reserve[0]++; 
       break; 

      case "int": 
       lex_reserve[1]++; 
       break; 

      case "while": 
       lex_reserve[2]++; 
       break; 

      case "char": 
       lex_reserve[3]++; 
       break; 

      default: 
       lex_alpha++; 
       break; 

      } 
     } 
+0

Если у меня есть строка типа 'k ++', тогда это просто не сработает. – user2004685

+0

Не хотите ли вы добавить к нему чехол? –

+0

Если я правильно понял, то 'k' должен идти в' lex_alpha', а 'lex_air [0]' должен быть увеличен дважды для указанной выше String. Это не? Пожалуйста, поправьте меня, если я ошибаюсь. – user2004685

 Смежные вопросы

  • Нет связанных вопросов^_^