Le sugiero que utilice start conditions en su lugar.
%x C_COMMENT
"/*" { BEGIN(C_COMMENT); }
<C_COMMENT>"*/" { BEGIN(INITIAL); }
<C_COMMENT>\n { }
<C_COMMENT>. { }
hacer la nota que hay no debe ser ningún espacio en blanco entre el <condition>
y el Estado.
%x C_COMMENT
define el estado C_COMMENT, y la regla /*
lo tiene iniciado. Una vez que se ha iniciado, */
lo hará volver al estado inicial (INITIAL
está predefinido), y todos los demás caracteres serán consumidos sin ninguna acción particular. Cuando dos reglas coinciden, Flex desambigua al tomar la que tiene la coincidencia más larga, por lo que la regla de puntos no impide que */
coincida. La regla \n
es necesaria porque a dot matches everything except a newline.
La definición %x
hace C_COMMENT un estado exclusiva, lo que significa que el analizador léxico sólo igualará reglas que están "etiquetados" <C_COMMENT>
una vez que se entra en el estado.
Aquí hay un tiny example lexer que implementa esta respuesta imprimiendo todo excepto lo que está adentro /* comments */
.
No estoy seguro de por qué no se obtiene ningún partido, pero su expresión va a comer todo en el archivo entre el primer " /*" y el último "*/". Su expresión para que coincida con el contenido del comentario debe evitar que se consuma "* /". Una forma de hacerlo: http://flex.sourceforge.net/manual/How-can-I-match-C_002dstyle-comments_003f.html –
gracias, ese sitio fue útil – adhanlon