Si desea asegurarse de que está analizando los comentarios de C, debe confrontar su modelo con la especificación de C. C99 §6.4.9 define la sintaxis de los comentarios de la siguiente manera:
1. Excepto dentro de una constante de caracteres, un literal de cadena o un comentario, los caracteres /*
introducen un comentario. El contenido de dicho comentario se examina solo para identificar caracteres multibyte y para encontrar los caracteres */
que lo terminan.
2. Excepto dentro de una constante de caracteres, un literal de cadena o un comentario, los caracteres //
introducen un comentario que incluye todos los caracteres multibyte hasta, pero no incluye, el siguiente carácter de nueva línea. El contenido de dicho comentario se examina solo para identificar caracteres multibyte y para encontrar el carácter de nueva línea que termina.
Esta es una prosa en inglés, no una definición formal, pero hay una interpretación razonablemente clara en términos de un autómata finito no determinista (NFA) que consume un comentario:
- Desde el estado inicial,
/
seguido de *
ingresa al estado de comentario en multilínea, y /
luego /
ingresa al estado de comentario en una sola línea.
- Desde el estado de comentario multilínea,
*
seguido de /
ingresa al estado posterior al comentario.
- Desde el estado de comentario en una sola línea, una nueva línea ingresa al estado posterior al comentario.
- Cualquier otro personaje deja el estado sin cambios.
Tenga en cuenta que para saber si se aplica el estado inicial, debe realizar un poco más de análisis para detectar cadenas y literales de caracteres.
Una vez que tenga un NFA, puede usar técnicas estándar para construir una expresión regular (no las veo en los artículos de Wikipedia, pero deberían discutirse en los libros de texto).
Si ya tiene una expresión regular y desea probarla, puede comparar su lenguaje generado con el del NFA deducido de la especificación del lenguaje: la igualdad de los idiomas regulares es decidible. Una forma de decidir la igualdad es construir un autómata determinista mínimo para cada uno; Si los idiomas son equivalentes, los DFA mínimos serán isomorfos.