Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <stdio.h>
- #include <string.h>
- int line = 1;
- int token_count = 0;
- %}
- %option noyywrap
- DIGIT [0-9]
- LETTER [a-zA-Z_]
- WHITESPACE [ \t\r]
- %%
- \n { line++; }
- {WHITESPACE}+ { /* Ignora spatiile */ }
- "if" { printf("Keyword: IF (linia %d)\n", line); token_count++; }
- "else" { printf("Keyword: ELSE (linia %d)\n", line); token_count++; }
- "while" { printf("Keyword: WHILE (linia %d)\n", line); token_count++; }
- "for" { printf("Keyword: FOR (linia %d)\n", line); token_count++; }
- "return" { printf("Keyword: RETURN (linia %d)\n", line); token_count++; }
- "break" { printf("Keyword: BREAK (linia %d)\n", line); token_count++; }
- "continue" { printf("Keyword: CONTINUE (linia %d)\n", line); token_count++; }
- "int" { printf("Tip de date: INT (linia %d)\n", line); token_count++; }
- "float" { printf("Tip de date: FLOAT (linia %d)\n", line); token_count++; }
- "char" { printf("Tip de date: CHAR (linia %d)\n", line); token_count++; }
- "bool" { printf("Tip de date: BOOL (linia %d)\n", line); token_count++; }
- {DIGIT}+ {
- printf("Intreg: %s (linia %d)\n", yytext, line);
- token_count++;
- }
- {DIGIT}+"."{DIGIT}+ {
- printf("Real: %s (linia %d)\n", yytext, line);
- token_count++;
- }
- [a-zA-Z_][a-zA-Z0-9_]* {
- printf("Identificator: %s (linia %d)\n", yytext, line);
- token_count++;
- }
- "+" { printf("Operator aritmetic: + (linia %d)\n", line); token_count++; }
- "-" { printf("Operator aritmetic: - (linia %d)\n", line); token_count++; }
- "*" { printf("Operator aritmetic: * (linia %d)\n", line); token_count++; }
- "/" { printf("Operator aritmetic: / (linia %d)\n", line); token_count++; }
- "%" { printf("Operator aritmetic: modulo %% (linia %d)\n", line); token_count++; }
- "=" { printf("Operator de atribuire: = (linia %d)\n", line); token_count++; }
- "+=" { printf("Operator de atribuire: += (linia %d)\n", line); token_count++; }
- "-=" { printf("Operator de atribuire: -= (linia %d)\n", line); token_count++; }
- "*=" { printf("Operator de atribuire: *= (linia %d)\n", line); token_count++; }
- "/=" { printf("Operator de atribuire: /= (linia %d)\n", line); token_count++; }
- "==" { printf("Operator de comparatie: == (linia %d)\n", line); token_count++; }
- "!=" { printf("Operator de comparatie: != (linia %d)\n", line); token_count++; }
- "<" { printf("Operator de comparatie: < (linia %d)\n", line); token_count++; }
- ">" { printf("Operator de comparatie: > (linia %d)\n", line); token_count++; }
- "<=" { printf("Operator de comparatie: <= (linia %d)\n", line); token_count++; }
- ">=" { printf("Operator de comparatie: >= (linia %d)\n", line); token_count++; }
- "&&" { printf("Operator logic: AND (linia %d)\n", line); token_count++; }
- "||" { printf("Operator logic: OR (linia %d)\n", line); token_count++; }
- "!" { printf("Operator logic: NOT (linia %d)\n", line); token_count++; }
- "(" { printf("Simbol: Paranteza deschisa ( (linia %d)\n", line); token_count++; }
- ")" { printf("Simbol: Paranteza inchisa ) (linia %d)\n", line); token_count++; }
- "{" { printf("Simbol: Acolada deschisa { (linia %d)\n", line); token_count++; }
- "}" { printf("Simbol: Acolada inchisa } (linia %d)\n", line); token_count++; }
- "[" { printf("Simbol: Paranteza patrata deschisa [ (linia %d)\n", line); token_count++; }
- "]" { printf("Simbol: Paranteza patrata inchisa ] (linia %d)\n", line); token_count++; }
- ";" { printf("Simbol: Punct si virgula ; (linia %d)\n", line); token_count++; }
- "," { printf("Simbol: Virgula , (linia %d)\n", line); token_count++; }
- \"([^\\\"]|\\.)*\" {
- printf("Litera sir: %s (linia %d)\n", yytext, line);
- token_count++;
- }
- "//".* { /* Comentariu pe o singura linie - ignorat */ }
- "/*"(.|\n)*"*/" { /* Comentariu pe mai multe linii - ignorat */ }
- . {
- printf("EROARE LEXICALA la linia %d: caracter neasteptat '%s'\n",
- line, yytext);
- }
- %%
- int main(int argc, char **argv) {
- if(argc > 1) {
- if(!(yyin = fopen(argv[1], "r"))) {
- perror(argv[1]);
- return 1;
- }
- }
- yylex();
- printf("\nRaport:\n");
- printf("Total linii procesate: %d\n", line);
- printf("Total token-uri recunoscute: %d\n", token_count);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement