El analizador Flex define las siguientes normas para identificar Expresiones regulares (expresiones regulares):
- Primero intentará asociar una e.r con la cadena más larga posible.
- En caso de conflicto entre expresiones regulares, es decir, que varias e.r sean capaces de reconocer una misma cadena de entrada. Flex elegirá la declaración con mayor prioridad, que será la que más arriba del archivo esté definida.
Ejemplo con cadena de entrada: [abb]
ab* {printf("reconozco las cadenas que empiezan en \"a\" y acaban en ninguna o varias \"b\" \n");}
ab+ {printf("reconozco las cadenas que empiezan en \"a\" y acaban en 1 o varias \"b\" \n");}
ab+ {printf("reconozco las cadenas que empiezan en \"a\" y acaban en 1 o varias \"b\" \n");}
La cadena sería aceptada por las dos e.r pero por cuestión de prioridad se elige {ab*}
Las primeras e.r que se aprenden a detectar con Flex suelen referirse a la identificación de números.
- Reconocer un dígito: digito [0-9]
- Reconocer un número entero: entero {digito}+
- Reconocer un número real: real {digito}+"."{digito}*
Es importante remarcar que en "." las comillas hacen que nos refiramos al símbolo del punto. Existe una e.r que se refiere a <cualquier carácter> y su símbolo es precisamente el punto.
- Reconocer un número en notación científica: cientifico {real}[eE][\+\-]?{entero}
Los símbolos suma y resta llevan el "\" antecediéndoles para no confundirlo con operandos que usan el mismo símbolo en una e.r
No hay comentarios:
Publicar un comentario