fork download
  1. %{
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #define YYSTYPE char*
  6. int line = 1;
  7. void processInput(const char *input); // Function to process input
  8. %}
  9.  
  10. %%
  11. [ \t]+ ; /* Ignore spaces and tabs */
  12. \n { line++; } /* Increment line count on newlines */
  13.  
  14. /* Comments */
  15. \/\/.* { printf("Unité Lexicale Commentaire Ligne %d lexéme //\n", line); }
  16. \/\*([^*]|\*+[^\/])*\*+\/ { printf("Unité Lexicale Commentaire Ligne %d lexéme /* ... */\n", line); }
  17.  
  18. /* Keywords - Case Insensitive */
  19. [sS][iI] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme si\n", line); }
  20. [sS][iI][nN][oO] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme sino\n", line); }
  21. [eE][cC][rR] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme ecr\n", line); }
  22. [vV][rR][aA][iI] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme vrai\n", line); }
  23. [fF][aA][uU][xX] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme Faux\n", line); }
  24. [tT][qQ] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme tq\n", line); }
  25. [qQ][tT] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme qt\n", line); }
  26. [rR][pP][tT] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme rpt\n", line); }
  27. [jJ][sS][qQ] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme jsq\n", line); }
  28. [lL][rR][eE] { printf("Unité Lexicale Mot_Cle Ligne %d lexéme lre\n", line); }
  29.  
  30. /* Integers */
  31. [0-9]+ { printf("Unité Lexicale Int Ligne %d lexéme %s\n", line, yytext); }
  32.  
  33. /* Floats (Scientific Notation or Decimal) */
  34. [-+]?[0-9]+\.[0-9]+([eE][-+]?[0-9]+)? { printf("Unité Lexicale Float Ligne %d lexéme %s\n", line, yytext); }
  35.  
  36. /* Identifiers */
  37. [A-Za-z][A-Za-z0-9]* { printf("Unité Lexicale Identificateur Ligne %d lexéme %s\n", line, yytext); }
  38.  
  39. /* Operators */
  40. "=="|"<="|">="|"!=" { printf("Unité Lexicale Operateur Ligne %d lexéme %s\n", line, yytext); }
  41. [+\-*/=<>!&|] { printf("Unité Lexicale Operateur Ligne %d lexéme %s\n", line, yytext); }
  42.  
  43. /* Separators */
  44. [;,:(){}] { printf("Unité Lexicale Separateur Ligne %d lexéme %s\n", line, yytext); }
  45.  
  46. /* Strings */
  47. \"([^\"\n]|\\.)*\" { printf("Unité Lexicale Chaine Ligne %d lexéme %s\n", line, yytext); }
  48. \".*\n { printf("ERROR Ligne %d Fin de fichier dans une constante chaîne\n", line); line++; }
  49.  
  50. /* Invalid Characters */
  51. . { printf("ERROR Ligne %d Caractère invalide %s\n", line, yytext); }
  52.  
  53. %%
  54.  
  55. void processInput(const char *input) {
  56. yy_scan_string(input);
  57. yylex();
  58. }
  59.  
  60. int main() {
  61. const char *exampleInput =
  62. "si (x > 10) {\n"
  63. " ecr(\"x is greater than 10\"); // Print message\n"
  64. "} sino {\n"
  65. " ecr(\"x <= 10\");\n"
  66. "}\n"
  67. "/* Multi-line comment */\n"
  68. "qt = 3.14;\n"
  69. "number = 12345;\n"
  70. "jsq (x != 0) {\n"
  71. " x = x - 1;\n"
  72. "}";
  73.  
  74. printf("Processing input...\n\n");
  75. processInput(exampleInput);
  76. return 0;
  77. }
  78.  
  79. int yywrap() {
  80. return 1;
  81. }
  82.  
Success #stdin #stdout #stderr 0.03s 6960KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
ERROR: /home/oNRhfT/prog:2:1: Syntax error: Operator expected
ERROR: /home/oNRhfT/prog:81:1: Syntax error: Unexpected end of file
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit