¿Cómo puedo hacer que mi programa FLEX ignore los caracteres especiales en determinados momentos?
Frecuentes
Visto 1,347 equipos
1
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();
}
1 Respuestas
1
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 flex-lexer or haz tu propia pregunta.
Cosa segura. Gracias por responder. Editaré mi comentario original para incluir el código. - user2690798