%{ #include "test.tab.h" #include #include #include int CURRENT_LINE_NUMBER = 1; void yyerror(const char *s) { fprintf(stderr, "\033[91mError at line %i: %s\033[0m\n", CURRENT_LINE_NUMBER, s); exit(1); } %} DIGIT [0-9] LETTER [a-zA-Z_] LETTER_OR_DIGIT [a-zA-Z0-9_] %% "string" { return STRING; } "uint" { return UINT; } "uint8" { return UINT8; } "uint16" { return UINT16; } "uint32" { return UINT32; } "uint64" { return UINT64; } "int" { return INT; } "int8" { return INT8; } "int16" { return INT16; } "int32" { return INT32; } "int64" { return INT64; } "var" { return VAR; } ":=" { return SHORT_DECLARATION; } "=" { return ASSIGN; } "{" { return LBRACE; } "}" { return RBRACE; } ";" { return SEMICOLON; } \"([^"\\]|\\.)*\" { yylval.str = strdup(yytext); return STRING_LITERAL; } {LETTER}{LETTER_OR_DIGIT}* { yylval.str = strdup(yytext); return IDENTIFIER; } {DIGIT}+ { yylval.str = strdup(yytext); return NUMBER; } [ \t]+ ; // Пропускаем пробелы и табы \n { CURRENT_LINE_NUMBER++; } . { fprintf(stderr, "\033[91mUnexpected character at line %i: %c\033[0m\n", CURRENT_LINE_NUMBER, yytext[0]); exit(1); } %% int yywrap() { return 1; }