%{ #include #include #include "def.tab.hh" #define INFILE_ERROR 1 #define OUTFILE_ERROR 2 void yyerror(const char *msg, ...); %} %option noyywrap %% "let" {fprintf(stdout, "LET\n"); return LET;} "Int" {fprintf(stdout, "INT_TYPE\n"); return INT_TYPE;} ":" {fprintf(stdout, ":\n"); return COLON;} ";" {fprintf(stdout, ";\n"); return SEMICOLON;} "print_integer" {fprintf(stdout, "PRINT_INT\n"); return PRINT_INT;} "print_float" {fprintf(stdout, "PRINT_FLOAT\n"); return PRINT_FLOAT;} "print_string" {fprintf(stdout, "PRINT_STRING\n"); return PRINT_STRING;} "read_integer" {fprintf(stdout, "READ_INT\n"); return READ_INT;} "read_float" {fprintf(stdout, "READ_FLOAT\n"); return READ_FLOAT;} \+ {fprintf(stdout, "+\n"); return '+';} \* {fprintf(stdout, "*\n"); return '*';} \( {fprintf(stdout, "(\n"); return '(';} \) {fprintf(stdout, ")\n"); return ')';} \/ {fprintf(stdout, "/\n"); return '/';} \- {fprintf(stdout, "-\n"); return '-';} \= {fprintf(stdout, "=\n"); return '=';} \"[^\"]*\" { fprintf(stdout, "string literal: %s\n", yytext); yylval.text = strdup(yytext); return STRING_LIT; } [0-9]+ { fprintf(stdout, "liczba: %s\n", yytext); yylval.ival = atoi(yytext); return INT_LIT; } [A-Za-z_][A-Za-z0-9_]* { fprintf(stdout, "identyfikator: %s\n", yytext); yylval.text = strdup(yytext); return ID; } [ \t]+ {;} \n {yylineno++;} . {yyerror("Blad leksykalny\n");} %% void yyerror(const char *msg, ...) { printf("%d: %s", yylineno, msg); exit(1); }