¿Cuál es la mejor manera de ignorar los comentarios en un archivo java con Rascal?

Nicola Meneghetti

Construí un módulo para contar las líneas de código (LOC) de un proyecto Java. Para este propósito tuve que ignorar:

  1. líneas en blanco
  2. comentarios de una sola línea
  3. y comentarios de varias líneas (/*......*/).

Logré los dos primeros usando la comprensión de la lista en las líneas del archivo con expresiones regulares y resolví también el tercer punto visitando las cadenas del archivo completo con la coincidencia y sustitución de patrones adecuadas. Me preguntaba, ¿existe una forma mejor y / o más eficaz de alcanzar el mismo objetivo?

PD: Opté por la sustitución, incluso si es más pesada que contar y restar, debido al hecho de que los comentarios de varias líneas se pueden entrelazar con el código real en la misma línea. Un ejemplo de comentarios engañosos de varias líneas puede ser:

String test2 = "abc /* fake comment*/";
String cde = "this is a test";//an inline comment
String efg = "ciccio"; /*this is a 
        weird comment*/ String hil = "pluto";
Jurgen Vinju

Sí, puedes probar diferentes formas.

  • Mi primera opción sería escribir una gramática para archivos con comentarios, usando cosas como lexical SingleLineComment = "//" ~[\n] "\n";y lexical OtherStuff = ![\\]+ !>> ![\\]. El árbol de análisis que aparece se puede visitar para contar el tamaño de todos los comentarios y se puede restar de la cantidad total.
  • Utilice una gramática de Java existente para analizar los archivos, desde la biblioteca lang::javay analizar de forma similar el árbol de análisis
  • Utilice un analizador externo existente (como el JDT) y busque las líneas de inicio de todos los nodos AST. Las líneas con nodos AST iniciales no están vacías, las otras sí. Entonces, la resta es tu amiga nuevamente.
  • Puede anclar mejor sus expresiones regulares para que se vuelvan menos no deterministas. (Es decir, con ^y $, para que lo visitque escribiste sea más rápido.

Es recomendable habilitar el perfilador de CPU Rascal en el REPL: :set profiling truey ver dónde está el nodo AST de cuello de botella real en el perfil que se imprime después de ejecutar una prueba.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Cuál es la mejor manera de reemplazar todos los caracteres especiales con sus nombres completos en un String Java?

¿Cuál es la mejor manera de reemplazar todos los caracteres especiales con sus nombres completos en un String Java?

¿Cuál es la mejor manera de leer los datos de prueba de un archivo CSV con JUnit 5?

¿Cuál es la mejor manera de agregar Streams en un DISTINCT con Java 8?

¿Cuál es la mejor manera de leer la última línea de un archivo de texto en Java?

¿Cuál es la mejor manera de escribir en un archivo en un hilo paralelo en Java?

¿Cuál es la mejor manera de leer / escribir objetos en un archivo con las siguientes condiciones?

¿Cuál es la mejor manera de cargar un archivo con javaee maven?

Cuál es la mejor manera de actualizar un archivo muy grande con c #

Java: ¿Cuál es la mejor manera de escribir miembros de datos de objeto en un archivo?

¿Cuál es la mejor manera de generar un nombre de archivo único y corto en Java?

¿Cuál es la mejor manera de eliminar una sección de un archivo binario en Java 7?

¿Cuál es la mejor manera de guardar un diccionario complejo en un archivo?

¿Cuál es la mejor manera de guardar un diccionario complejo en un archivo?

¿Cuál es la mejor manera de organizar su código CSS con comentarios?

En términos de usabilidad, ¿cuál es la mejor manera de exportar un archivo?

¿Cuál es la mejor manera de escribir un archivo de Excel desde Java?

¿Cuál es la mejor manera de analizar XML grande y generar un marco de datos con los datos en el XML (con python o de otra manera)?

¿Cuál es la mejor manera de descargar un archivo grande en NodeJS?

¿Cuál es la mejor manera de sobrescribir un archivo usando fs en node.js

¿Cuál es la mejor manera de abrir un archivo para acceso exclusivo en Python?

¿Cuál es la mejor manera de hacer una subcadena en un archivo por lotes?

¿Cuál es la mejor manera de convertir un archivo pdf en base64Binary?

¿Cuál es la mejor manera (en Github) de aplicar confirmaciones a un archivo diferente?

¿Cuál es la mejor manera de procesar los tiempos en awk y convertir la salida en una nueva columna en un archivo csv?

¿Cuál es la mejor manera de etiquetar un archivo csv para convertirlo en un archivo json en python?

¿Cuál es la mejor manera de calcular la media de los valores de un marco de datos de pandas con np.nan en él?

En jQuery, ¿cuál es la mejor manera de formatear un número con 2 decimales?

¿Cuál es la mejor manera de simular un Java Azure EventHubProducerClient con Mockito?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Kibana 4 , making pie chart , error message

  3. 3

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  4. 4

    récupérer les noms de clés depuis Firebase react-native

  5. 5

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  6. 6

    Cómo eliminar o caducar las cookies en Chrome usando asp.net

  7. 7

    desbordamiento: oculto no funciona al hacer zoom en un iframe de YouTube usando transformar

  8. 8

    Cómo extraer una palabra clave (cadena) de una columna en pandas dataframe en python

  9. 9

    Link library in Visual Studio, why two different ways?

  10. 10

    선언되지 않은 유형 'MessagingDelegate'사용

  11. 11

    actualizar el contenido de la vista de reciclaje falla en la hoja inferior

  12. 12

    Ver todos los comentarios en un video de YouTube

  13. 13

    Problema con la vista de impresión de PDF

  14. 14

    ¿Cómo pintar el Dropline de un RowHeader-JTable en el Main-JTable durante un DragAndDrop?

  15. 15

    Pregunta de fórmula de desplazamiento y transposición de Excel / Google Sheets

  16. 16

    ¿Cómo puedo hacer accesible la información de color en tablas HTML?

  17. 17

    ¿Cómo generalizar el JSON en el procedimiento almacenado?

  18. 18

    Recortar fotos rectangulares de escaneos en OpenCV con Python

  19. 19

    2D 배열에 대한 Numpy 요소 별 평균 계산

  20. 20

    Typescript의 "window"전역 개체에 "adsbygoogle"애드 센스 속성을 추가하는 방법은 무엇입니까?

  21. 21

    Error: la ejecución falló para la tarea ': app: compileDebugJavaWithJavac'. java.io.FileNotFoundException:

CalienteEtiquetas

Archivo