%{
#include <stdio.h>
#include <string.h>
int scope = 0;
%}
%%
"{" { scope++; printf("Entering scope level %d\n", scope); }
"}" {
printf("Exiting scope level %d\n", scope);
scope--;
}
"int"|"float"|"char"|"double" { printf("Data type: %s\n", yytext); }
("int"|"float"|"char"|"double")[ \t]+[a-zA-Z_][a-zA-Z0-9_]*";" {
printf("Variable declared: %s at scope level %d\n", yytext, scope);
}
[a-zA-Z_][a-zA-Z0-9_]* {
printf("Identifier: %s (scope %d)\n", yytext, scope);
}
[ \t]+ ;
\n ;
. ;
%%
int main() {
printf("Enter source code:\n");
yylex();
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBzY29wZSA9IDA7CiV9CgolJQoKInsiICAgICAgICAgICAgIHsgc2NvcGUrKzsgcHJpbnRmKCJFbnRlcmluZyBzY29wZSBsZXZlbCAlZFxuIiwgc2NvcGUpOyB9CgoifSIgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICBwcmludGYoIkV4aXRpbmcgc2NvcGUgbGV2ZWwgJWRcbiIsIHNjb3BlKTsgCiAgICAgICAgICAgICAgICAgICAgc2NvcGUtLTsgCiAgICAgICAgICAgICAgICB9CgoiaW50InwiZmxvYXQifCJjaGFyInwiZG91YmxlIiAgIHsgcHJpbnRmKCJEYXRhIHR5cGU6ICVzXG4iLCB5eXRleHQpOyB9CgooImludCJ8ImZsb2F0InwiY2hhciJ8ImRvdWJsZSIpWyBcdF0rW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7IiB7CiAgICBwcmludGYoIlZhcmlhYmxlIGRlY2xhcmVkOiAlcyBhdCBzY29wZSBsZXZlbCAlZFxuIiwgeXl0ZXh0LCBzY29wZSk7Cn0KClthLXpBLVpfXVthLXpBLVowLTlfXSogICB7CiAgICBwcmludGYoIklkZW50aWZpZXI6ICVzIChzY29wZSAlZClcbiIsIHl5dGV4dCwgc2NvcGUpOwp9CgpbIFx0XSsgICAgICA7CgpcbiAgICAgICAgICA7CgouICAgICAgICAgICA7CgolJQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoIkVudGVyIHNvdXJjZSBjb2RlOlxuIik7CiAgICB5eWxleCgpOwogICAgcmV0dXJuIDA7Cn0KCmludCB5eXdyYXAoKSB7CiAgICByZXR1cm4gMTsKfQ==