%{ #include #include #include #define INFILE_ERROR 1 #define OUTFILE_ERROR 2 extern int yylineno; extern FILE *yyin; int yylex(); void yyerror(const char *msg, ...); %} %union { char *text; int ival; } %token ID %token INT_LIT %token LET %token INT_TYPE %token SEMICOLON COLON %left '+' '-' %left '*' '/' %start program %% program : statement_list { printf("koniec\n"); } ; statement_list : statement | statement_list statement ; statement : variable_declaration { printf("Deklaracja zmiennej\n"); } | expression SEMICOLON { printf("instrukcja\n"); } ; variable_declaration : LET ID COLON INT_TYPE '=' expression SEMICOLON { printf("Deklaracja zmiennej: %s\n", $2); } ; expression : expression '+' expression { printf("Wyrazenie z +\n"); } | expression '-' expression { printf("Wyrazenie z -\n"); } | expression '*' expression { printf("Wyrazenie z *\n"); } | expression '/' expression { printf("Wyrazenie z /\n"); } | '(' expression ')' { printf("Wyrazenie w nawiasach\n"); } | INT_LIT { printf("Literal calkowity: %d\n", $1); } | ID { printf("Identyfikator: %s\n", $1); } ; %% int main(int argc, char *argv[]) { yyparse(); return 0; }