Member 13175373 Ответов: 1

Я хочу извлечь однострочные и многострочные комментарии


он не может извлечь комментарии, как ниже
/*
это первая программа
*/

и это дает как
/*


*/

Что я уже пробовал:

package javaapplication5;


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * BufferedReader and Scanner can be used to read line by line from any File or
 * console in Java.
 * This Java program demonstrate line by line reading using BufferedReader in Java
 *
 * @author Javin Paul
 */
public class BufferedReaderExample {   

    public static void main(String args[]) throws IOException{
      
        //reading file line by line in Java using BufferedReader       
        FileInputStream fis = null;
        BufferedReader br = null;
        //String line;
        try {
            fis = new FileInputStream("E:/Sum.txt");
            br = new BufferedReader(new InputStreamReader(fis));
            String line;
            while((line = br.readLine()) != null){
                if(line.contains("/*") || line.contains("*/")|| line.contains("//")){
                    
                    System.out.println(line);
                    
                }
                
                else
                   
                    System.out.println("");
                
            }
            br.close();
          
            
  }
        catch(IOException e){
            System.out.println("file could not read");
            
        }
    }
}

[no name]

Да, это именно то, что вы сказали своей программе сделать. Какой у вас вопрос?

Richard MacCutchan

Если строка содержит "/*" тогда это может быть многострочный комментарий, поэтому вам нужно проверить, содержит ли он также "*/", а если нет, то продолжайте смотреть на следующие строки.

Member 13175373

спасибо я думаю что вы правы но мой опыт программирования не так уж хорош

Richard MacCutchan

Речь идет о простой логике, а не о программировании. Если строка содержит "//" тогда это однострочный комментарий, так что с ним легко иметь дело. Если строка содержит "/*" тогда это начало единого или многострочный комментарий. Поэтому в этом случае вы выводите строку, а затем проверяете, содержит ли она "*/" Если это так, то больше никакой обработки. Если это не так, то установите флаг, чтобы продолжать искать флаг конца комментария, и выводите каждую строку, пока не найдете ее.

Member 13175373

спасибо я попробую

PIEBALDconsult

Писать Парсеры не так-то просто. Вам нужно читать Символ за раз и отслеживать, с какими "особыми" символами вы сталкиваетесь - например, кавычками или любым другим экранирующим символом, используемым языком.
В качестве примера, что вы ожидаете, что произойдет с чем-то вроде этого:
mystring = " эта строка содержит комментарий \" / * oh elephant! * / в комментарии\", так что будьте осторожны." ;

PIEBALDconsult

Кроме того, обязательно прочтите спецификацию для языка, который вы анализируете, чтобы убедиться, что вы действительно знаете, что представляет собой комментарий. Например, распространяется ли" однострочный комментарий " просто на следующую новую строку? Или Терминатор оператора завершит его?
Однажды меня поймал язык, который позволяет:
это утверждение ; / / этот комментарий заканчивается на этой точке с запятой -->; Это новое утверждение ;

Member 13175373

спасибо за ваше руководство у меня не так много опыта написания кода если это возможно пожалуйста помогите в этом отношении

1 Ответов

Рейтинг:
1

Rick York

Старые комментарии в стиле C могут занимать более одной строки, поэтому у вас может быть логический флаг, который является истинным, если вы находитесь в комментарии, и если это так, вам нужно вывести строки внутри комментария.


Member 13175373

пожалуйста попробуйте я также постараюсь поделиться образцом спасибо

Rick York

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

PIEBALDconsult

Мы должны иметь возможность голосовать за комментарии. +5