¿Cómo puedo hacer que mi programa FLEX ignore los caracteres especiales en determinados momentos?

Estoy escribiendo un programa de tokenización simple para un programa de calculadora que vendrá más tarde. En este momento tengo el programa codificado para generar 'FALSO' cada vez que el usuario ingresa 'f'. En lo que estoy trabajando actualmente es en hacer que cuando el usuario ingrese '//' seguido de una cadena, el programa genere "COMENTARIO: // cadena que ingresé". Aquí está mi problema: debido a que tengo 'f' y otros caracteres individuales programados para hacer otras cosas, mi programa actualmente crea este tipo de salida:

**User enters:**

//Protoypes

**Desired Output:**

COMMENT: //Prototypes

**Actual Output:**

COMMENT: // Pro

TRUEo

TRUEypes

¿Alguien tiene una forma de solucionar este problema?

Aquí está el código hasta ahora:

%{

#include <stdio.h>

%}

%%

"//"    printf("\nCOMMENT: // ", yytext);

"("     printf("\nLPAREN");

")"     printf("\nRPAREN");

"="     printf("\nASSIGN");

"F"     printf("\nFALSE");

"T"     printf("\nTRUE");

"and"   printf("\nAND");


"bye"   printf("\nQUIT");

"else"  printf("\nELSE");

"exit"  printf("\nQUIT");

"f"     printf("\nFALSE");

"false" printf("\nFALSE");

"if"    printf("\nIf");

"implies"       printf("\nIMPLIES");

\n      printf("\nNEWLINE");

"not"   printf("\nNOT");

"or"    printf("\nOR");

"quit"  printf("\nQUIT");

"stop"  printf("\nQUIT");

"t"     printf("\nTRUE");

"then"  printf("\nTHEN");

"true"  printf("\nTRUE");

"xor"   printf("\nXOR");


%%
main(){
    yylex();
}

preguntado el 12 de febrero de 14 a las 07:02

Cosa segura. Gracias por responder. Editaré mi comentario original para incluir el código. -

1 Respuestas

Necesita una regla final que atrape cualquier otra cosa y la ignore. El valor predeterminado es imprimir cualquier entrada no coincidente:

. ;

Respondido 12 Feb 14, 17:02

Gracias por responder. Apliqué esto a mi programa y este fue el resultado: El usuario ingresa: //Prototipos, Salida: COMENTARIO// VERDADERO VERDADERO NUEVA LÍNEA. Ignoró todo lo que no he designado como especial. ¿Hice algo incorrectamente? - user2690798

No, solo necesita más reglas para las cosas que desea reconocer, o posiblemente desee este '.' regla para devolver 'yytext[0]' en lugar de no hacer nada. Sin conocer su analizador, es imposible decir cuál. - user207421

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.