Advertisement
leonard007

Untitled

Jan 19th, 2025
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.70 KB | None | 0 0
  1. %{
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. int line = 1;
  6. int token_count = 0;
  7. %}
  8.  
  9. %option noyywrap
  10.  
  11. DIGIT       [0-9]
  12. LETTER      [a-zA-Z_]
  13. WHITESPACE  [ \t\r]
  14.  
  15. %%
  16.  
  17. \n                  { line++; }
  18. {WHITESPACE}+       { /* Ignora spatiile */ }
  19.  
  20. "if"               { printf("Keyword: IF (linia %d)\n", line); token_count++; }
  21. "else"             { printf("Keyword: ELSE (linia %d)\n", line); token_count++; }
  22. "while"            { printf("Keyword: WHILE (linia %d)\n", line); token_count++; }
  23. "for"              { printf("Keyword: FOR (linia %d)\n", line); token_count++; }
  24. "return"           { printf("Keyword: RETURN (linia %d)\n", line); token_count++; }
  25. "break"            { printf("Keyword: BREAK (linia %d)\n", line); token_count++; }
  26. "continue"         { printf("Keyword: CONTINUE (linia %d)\n", line); token_count++; }
  27.  
  28. "int"              { printf("Tip de date: INT (linia %d)\n", line); token_count++; }
  29. "float"            { printf("Tip de date: FLOAT (linia %d)\n", line); token_count++; }
  30. "char"             { printf("Tip de date: CHAR (linia %d)\n", line); token_count++; }
  31. "bool"             { printf("Tip de date: BOOL (linia %d)\n", line); token_count++; }
  32.  
  33. {DIGIT}+           {
  34.     printf("Intreg: %s (linia %d)\n", yytext, line);
  35.     token_count++;
  36. }
  37.  
  38. {DIGIT}+"."{DIGIT}+ {
  39.     printf("Real: %s (linia %d)\n", yytext, line);
  40.     token_count++;
  41. }
  42.  
  43. [a-zA-Z_][a-zA-Z0-9_]* {
  44.     printf("Identificator: %s (linia %d)\n", yytext, line);
  45.     token_count++;
  46. }
  47.  
  48. "+"                { printf("Operator aritmetic: + (linia %d)\n", line); token_count++; }
  49. "-"                { printf("Operator aritmetic: - (linia %d)\n", line); token_count++; }
  50. "*"                { printf("Operator aritmetic: * (linia %d)\n", line); token_count++; }
  51. "/"                { printf("Operator aritmetic: / (linia %d)\n", line); token_count++; }
  52. "%"                { printf("Operator aritmetic: modulo %% (linia %d)\n", line); token_count++; }
  53.  
  54. "="                { printf("Operator de atribuire: = (linia %d)\n", line); token_count++; }
  55. "+="               { printf("Operator de atribuire: += (linia %d)\n", line); token_count++; }
  56. "-="               { printf("Operator de atribuire: -= (linia %d)\n", line); token_count++; }
  57. "*="               { printf("Operator de atribuire: *= (linia %d)\n", line); token_count++; }
  58. "/="               { printf("Operator de atribuire: /= (linia %d)\n", line); token_count++; }
  59.  
  60. "=="               { printf("Operator de comparatie: == (linia %d)\n", line); token_count++; }
  61. "!="               { printf("Operator de comparatie: != (linia %d)\n", line); token_count++; }
  62. "<"                { printf("Operator de comparatie: < (linia %d)\n", line); token_count++; }
  63. ">"                { printf("Operator de comparatie: > (linia %d)\n", line); token_count++; }
  64. "<="               { printf("Operator de comparatie: <= (linia %d)\n", line); token_count++; }
  65. ">="               { printf("Operator de comparatie: >= (linia %d)\n", line); token_count++; }
  66.  
  67. "&&"               { printf("Operator logic: AND (linia %d)\n", line); token_count++; }
  68. "||"               { printf("Operator logic: OR (linia %d)\n", line); token_count++; }
  69. "!"                { printf("Operator logic: NOT (linia %d)\n", line); token_count++; }
  70.  
  71. "("                { printf("Simbol: Paranteza deschisa ( (linia %d)\n", line); token_count++; }
  72. ")"                { printf("Simbol: Paranteza inchisa ) (linia %d)\n", line); token_count++; }
  73. "{"                { printf("Simbol: Acolada deschisa { (linia %d)\n", line); token_count++; }
  74. "}"                { printf("Simbol: Acolada inchisa } (linia %d)\n", line); token_count++; }
  75. "["                { printf("Simbol: Paranteza patrata deschisa [ (linia %d)\n", line); token_count++; }
  76. "]"                { printf("Simbol: Paranteza patrata inchisa ] (linia %d)\n", line); token_count++; }
  77. ";"                { printf("Simbol: Punct si virgula ; (linia %d)\n", line); token_count++; }
  78. ","                { printf("Simbol: Virgula , (linia %d)\n", line); token_count++; }
  79.  
  80. \"([^\\\"]|\\.)*\"  {
  81.    printf("Litera sir: %s (linia %d)\n", yytext, line);
  82.    token_count++;
  83. }
  84.  
  85. "//".*             { /* Comentariu pe o singura linie - ignorat */ }
  86. "/*"(.|\n)*"*/"    { /* Comentariu pe mai multe linii - ignorat */ }
  87.  
  88. .                  {
  89.     printf("EROARE LEXICALA la linia %d: caracter neasteptat '%s'\n",
  90.            line, yytext);
  91. }
  92.  
  93. %%
  94.  
  95. int main(int argc, char **argv) {
  96.     if(argc > 1) {
  97.         if(!(yyin = fopen(argv[1], "r"))) {
  98.             perror(argv[1]);
  99.             return 1;
  100.         }
  101.     }
  102.  
  103.     yylex();
  104.  
  105.     printf("\nRaport:\n");
  106.     printf("Total linii procesate: %d\n", line);
  107.     printf("Total token-uri recunoscute: %d\n", token_count);
  108.  
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement