go-analyzer/analyzers/test/test.l

83 lines
2.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

%{
#include "test.tab.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
extern int yylineno;
void yyerror(const char *s) {
fprintf(stderr, "\033[1;91mError at line %i: %s\033[0m\n", yylineno, 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; }
"package" { return PACKAGE; }
"import" { return IMPORT; }
"var" { return VAR; }
"func" { return FUNC; }
"return" { return RETURN; }
":=" { return SHORT_DECLARATION; }
"=" { return ASSIGN; }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return MULT; }
"/" { return DIV; }
"%" { return MOD; }
"{" { return LBRACE; }
"}" { return RBRACE; }
"(" { return LPAREN; }
")" { return RPAREN; }
"," { return COMMA; }
";" { return SEMICOLON; }
\"([^"\\]|\\.)*\" { // правило для строк с возможность экранирования через \спецсимвол
return STRING_LITERAL;
}
{LETTER}{LETTER_OR_DIGIT}* {
yylval.str = strdup(yytext);
return IDENTIFIER;
}
[0-9]+\.[0-9]+ {
return FLOAT_LITERAL;
}
{DIGIT}+ {
return NUMBER;
}
[ \t\r]+ ; // Пропускаем пробелы и табы
\n { yylineno++; }
. {
fprintf(stderr, "\033[91mUnexpected character at line %i: %c\033[0m\n",
yylineno, yytext[0]);
exit(1);
}
%%
int yywrap() {
return 1;
}