69 lines
1.6 KiB
Plaintext
69 lines
1.6 KiB
Plaintext
%{
|
|
#include "test.tab.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
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;
|
|
} |