2015-03-24 3 views
0

Я использую лексический анализатор с использованием Java. Внутри «String palavras_reservadas» У меня есть все зарезервированные слова, которые нельзя использовать для обозначения переменных и тому подобного. Matcher отвечает за поиск этих зарезервированных слов внутри моего кода ввода. Я поместил все строки из моего кода ввода в другое положение ArrayList под названием «vetor1». Я хочу разбить этот «vetor1», когда найду одно зарезервированное слово. Например, у меня есть этот код, как мой вход:Использование split в Java

a = b + c; 
if (a > b) 
c = c + b; 

Мой код будет поместить каждую строку в другую позицию массива:

v[0] = a = b + c; 
v[1] = if (a > b) 
v[2] = c = c + b; 

и что я хочу сделать, это:

v[0] = a = b + c; 
v[1] = if 
v[2] = (a > b) 
v[3] = c = c + b; 

(или что-то в этом роде). Могу ли я использовать split для этого?

Это то, что я до сих пор:

public class AnalisadorLexico { 
    public static void main(String args[]) throws FileNotFoundException { 

     List<String> vetor1 = new ArrayList<String>(); 
     File text = new File("/Users/Mvaguimaraes/Desktop/codigo.marcos"); 
     Scanner scnr = new Scanner(text); 

     String palavras_reservadas = "fim-se|enquanto|então|se|senão|para|de|até|faça|fim-para|fim-enquanto"; 
     Pattern r = Pattern.compile(palavras_reservadas); 
     int i = 0; 
      while(scnr.hasNextLine()) 
      { 

       String line = scnr.nextLine(); 
       vetor1.add(line); 
       Matcher m = r.matcher(scnr.nextLine()); 
       if (m.find()) { 
        System.out.println("Found value: " + m.group()); 

       } 

      } 

       for(i = 0; i<vetor1.size(); i++) 
       { 
         String value = vetor1.get(i); 
         System.out.println(value); 
       } 


     } 
} 

ответ

0

использовать раскол вы должны иметь символ для разделения последовательности, например «если (а> Ь)!» Раскол («!») дает вам «если» и «(а> Ь)», не совсем так, то я боюсь,

+0

Есть ли другой способ сделать это без использования split? –

+0

, вы можете сделать это, проверив ключевые слова (например, если) с помощью regex или string.substring (0,3) .equals ("if"), а затем разделите их вручную подстрокой следующим образом: если ваша позиция в списке равна k вы делаете list.set (k, string.substring (0,3)) и list.add (k + 1, string.substring (3, string.length) – Dix

+0

В "m.group()" У меня есть строка для разделите последовательность. Итак, как мне ее использовать, чтобы разделить vetor1 в моем коде? –

0

Я думаю, вы можете использовать Pattern класс, например

Pattern p = Pattern.compile("(if) ([(].*[)])\n")); 
Matcher matcher = p.matcher("if (a>b)"); 
if (matcher.matches()) { 
    matcher.group(1); // "if" 
    matcher.group(2); // "(a>b)" 
} 

основном контента в каждой круглой скобке может быть захвачен методом group (k), где k - пара скобок для букв слева. Подробнее см .: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

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