Files
zut-n1-kompilatory/z5.l
2026-01-09 21:59:30 +01:00

64 lines
2.1 KiB
Plaintext

%{
#include <string.h>
#include <stdio.h>
#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;}
"if" {fprintf(stdout, "IF\n"); return IF;}
"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 LE;}
">=" {fprintf(stdout, ">=\n"); return GE;}
"==" {fprintf(stdout, "==\n"); return EQ;}
"!=" {fprintf(stdout, "!=\n"); return NE;}
\+ {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);
}