fork download
  1. %{
  2. // --- Sección de Definiciones ---
  3. // Este código en C se copia directamente en el archivo de salida.
  4. #include <stdio.h>
  5. %}
  6.  
  7. /* Opciones de Flex:
  8.   noyywrap -> Indica al compilador que no necesita la función yywrap().
  9.   Simplifica la compilación.
  10. */
  11. %option noyywrap
  12.  
  13. %%
  14. /* --- Sección de Reglas --- */
  15. /* El orden de las reglas es MUY importante.
  16.   Flex aplica la regla que coincida con la cadena más larga.
  17.   Si dos reglas coinciden con una cadena de la misma longitud,
  18.   se aplica la primera que aparece en el archivo.
  19.   Por eso, las palabras reservadas se ponen ANTES de la regla general
  20.   para identificadores.
  21. */
  22.  
  23. "int" { printf("Palabra Reservada (keyword): %s\n", yytext); }
  24. "float" { printf("Palabra Reservada (keyword): %s\n", yytext); }
  25. "if" { printf("Palabra Reservada (keyword): %s\n", yytext); }
  26. "else" { printf("Palabra Reservada (keyword): %s\n", yytext); }
  27. "while" { printf("Palabra Reservada (keyword): %s\n", yytext); }
  28. "return" { printf("Palabra Reservada (keyword): %s\n", yytext); }
  29.  
  30. /* Regla para identificadores de C:
  31.   - Debe empezar con una letra (a-z, A-Z) o un guion bajo (_). -> [a-zA-Z_]
  32.   - Puede ser seguido de cero o más letras, números o guiones bajos. -> [a-zA-Z0-9_]*
  33. */
  34. [a-zA-Z_][a-zA-Z0-9_]* { printf("Identificador: %s\n", yytext); }
  35.  
  36. /* Regla para reconocer números enteros */
  37. [0-9]+ { printf("Numero: %s\n", yytext); }
  38.  
  39. /* Reglas para ignorar espacios, tabulaciones y saltos de línea */
  40. [ \t] { /* Ignorar */ }
  41. \n { /* Ignorar */ }
  42.  
  43. /* Cualquier otro caracter se considera no reconocido */
  44. . { printf("Simbolo no reconocido: %s\n", yytext); }
  45.  
  46. %%
  47. /* --- Sección de Código de Usuario --- */
  48.  
  49. int main() {
  50. printf("Escribe codigo en C y presiona Enter (Ctrl+D para terminar):\n");
  51.  
  52. // yylex() es la función principal generada por Flex que inicia el análisis.
  53. yylex();
  54.  
  55. return 0;
  56. }
Success #stdin #stdout #stderr 0.03s 6940KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
ERROR: /home/7Bkmld/prog:2:4: Syntax error: Operator expected
ERROR: /home/7Bkmld/prog:4:1: Syntax error: Operator expected
ERROR: /home/7Bkmld/prog:44:73: Syntax error: Unexpected `;' before `}'
ERROR: /home/7Bkmld/prog:56:0: Syntax error: Unexpected end of file
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit