Advertisement
leonard007

Untitled

Jan 19th, 2025
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.11 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  [ \n\r\t]
  14.  
  15. %%
  16.  
  17. {WHITESPACE}+       { if(yytext[0] == '\n') line++; /* Ignora spatiile */ }
  18.  
  19. "char"             { printf("TYPE_CHAR: %s (linia %d)\n", yytext, line); token_count++; }
  20. "double"           { printf("TYPE_DOUBLE: %s (linia %d)\n", yytext, line); token_count++; }
  21. "else"             { printf("ELSE: %s (linia %d)\n", yytext, line); token_count++; }
  22. "if"               { printf("IF: %s (linia %d)\n", yytext, line); token_count++; }
  23. "int"              { printf("TYPE_INT: %s (linia %d)\n", yytext, line); token_count++; }
  24. "return"           { printf("RETURN: %s (linia %d)\n", yytext, line); token_count++; }
  25. "struct"           { printf("STRUCT: %s (linia %d)\n", yytext, line); token_count++; }
  26. "void"             { printf("VOID: %s (linia %d)\n", yytext, line); token_count++; }
  27. "while"            { printf("WHILE: %s (linia %d)\n", yytext, line); token_count++; }
  28.  
  29. {DIGIT}+           {
  30.     printf("INT: %s (linia %d)\n", yytext, line);
  31.     token_count++;
  32. }
  33.  
  34. {DIGIT}+("."{DIGIT}+)?([eE][+-]?{DIGIT}+)? |
  35. {DIGIT}+"."{DIGIT}+ {
  36.     printf("DOUBLE: %s (linia %d)\n", yytext, line);
  37.     token_count++;
  38. }
  39.  
  40. '[^']'             { printf("CHAR: %s (linia %d)\n", yytext, line); token_count++; }
  41. \"[^\"]*\"         { printf("STRING: %s (linia %d)\n", yytext, line); token_count++; }
  42.  
  43. ","                { printf("COMMA: %s (linia %d)\n", yytext, line); token_count++; }
  44. ";"                { printf("SEMICOLON: %s (linia %d)\n", yytext, line); token_count++; }
  45. "("                { printf("LPAR: %s (linia %d)\n", yytext, line); token_count++; }
  46. ")"                { printf("RPAR: %s (linia %d)\n", yytext, line); token_count++; }
  47. "["                { printf("LBRACKET: %s (linia %d)\n", yytext, line); token_count++; }
  48. "]"                { printf("RBRACKET: %s (linia %d)\n", yytext, line); token_count++; }
  49. "{"                { printf("LACC: %s (linia %d)\n", yytext, line); token_count++; }
  50. "}"                { printf("RACC: %s (linia %d)\n", yytext, line); token_count++; }
  51. <<EOF>>            { printf("END: EOF (linia %d)\n", line); token_count++; return 0; }
  52.  
  53. "+"                { printf("ADD: %s (linia %d)\n", yytext, line); token_count++; }
  54. "-"                { printf("SUB: %s (linia %d)\n", yytext, line); token_count++; }
  55. "*"                { printf("MUL: %s (linia %d)\n", yytext, line); token_count++; }
  56. "/"                { printf("DIV: %s (linia %d)\n", yytext, line); token_count++; }
  57. "."                { printf("DOT: %s (linia %d)\n", yytext, line); token_count++; }
  58. "&&"               { printf("AND: %s (linia %d)\n", yytext, line); token_count++; }
  59. "||"               { printf("OR: %s (linia %d)\n", yytext, line); token_count++; }
  60. "!"                { printf("NOT: %s (linia %d)\n", yytext, line); token_count++; }
  61. "="                { printf("ASSIGN: %s (linia %d)\n", yytext, line); token_count++; }
  62. "=="               { printf("EQUAL: %s (linia %d)\n", yytext, line); token_count++; }
  63. "!="               { printf("NOTEQ: %s (linia %d)\n", yytext, line); token_count++; }
  64. "<"                { printf("LESS: %s (linia %d)\n", yytext, line); token_count++; }
  65. "<="               { printf("LESSEQ: %s (linia %d)\n", yytext, line); token_count++; }
  66. ">"                { printf("GREATER: %s (linia %d)\n", yytext, line); token_count++; }
  67. ">="               { printf("GREATEREQ: %s (linia %d)\n", yytext, line); token_count++; }
  68.  
  69. [a-zA-Z_][a-zA-Z0-9_]* {
  70.    printf("ID: %s (linia %d)\n", yytext, line);
  71.    token_count++;
  72. }
  73.  
  74. "//"[^\n\r\0]*     { /* Ignora comentariile pe o linie */ }
  75.  
  76. .                  {
  77.    printf("EROARE LEXICALA la linia %d: caracter neasteptat '%s'\n",
  78.           line, yytext);
  79. }
  80.  
  81. %%
  82.  
  83. int main(int argc, char **argv) {
  84.    if(argc > 1) {
  85.        if(!(yyin = fopen(argv[1], "r"))) {
  86.            perror(argv[1]);
  87.            return 1;
  88.        }
  89.    }
  90.  
  91.    yylex();
  92.  
  93.    printf("\nRaport:\n");
  94.    printf("Total linii procesate: %d\n", line);
  95.    printf("Total token-uri recunoscute: %d\n", token_count);
  96.  
  97.    return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement