%{
#include <stdio.h>
#include <string.h>
void print_first(char *non_terminal) {
if (strcmp(non_terminal, "E") == 0)
printf("FIRST(E) = { (, id }\n");
else if (strcmp(non_terminal, "E'") == 0)
printf("FIRST(E') = { +, ε }\n");
else if (strcmp(non_terminal, "T") == 0)
printf("FIRST(T) = { (, id }\n");
else if (strcmp(non_terminal, "T'") == 0)
printf("FIRST(T') = { *, ε }\n");
else if (strcmp(non_terminal, "F") == 0)
printf("FIRST(F) = { (, id }\n");
else
printf("Unknown non-terminal: %s\n", non_terminal);
}
%}
%%
[A-Z][']? { print_first(yytext); }
[ \t\n]+ { /* skip whitespace */ }
. { printf("Invalid input: %s\n", yytext); }
%%
int main() {
printf("Enter non-terminals (e.g., E T E' F):\n");
yylex();
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnZvaWQgcHJpbnRfZmlyc3QoY2hhciAqbm9uX3Rlcm1pbmFsKSB7CiAgICBpZiAoc3RyY21wKG5vbl90ZXJtaW5hbCwgIkUiKSA9PSAwKQogICAgICAgIHByaW50ZigiRklSU1QoRSkgPSB7ICgsIGlkIH1cbiIpOwogICAgZWxzZSBpZiAoc3RyY21wKG5vbl90ZXJtaW5hbCwgIkUnIikgPT0gMCkKICAgICAgICBwcmludGYoIkZJUlNUKEUnKSA9IHsgKywgzrUgfVxuIik7CiAgICBlbHNlIGlmIChzdHJjbXAobm9uX3Rlcm1pbmFsLCAiVCIpID09IDApCiAgICAgICAgcHJpbnRmKCJGSVJTVChUKSA9IHsgKCwgaWQgfVxuIik7CiAgICBlbHNlIGlmIChzdHJjbXAobm9uX3Rlcm1pbmFsLCAiVCciKSA9PSAwKQogICAgICAgIHByaW50ZigiRklSU1QoVCcpID0geyAqLCDOtSB9XG4iKTsKICAgIGVsc2UgaWYgKHN0cmNtcChub25fdGVybWluYWwsICJGIikgPT0gMCkKICAgICAgICBwcmludGYoIkZJUlNUKEYpID0geyAoLCBpZCB9XG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlVua25vd24gbm9uLXRlcm1pbmFsOiAlc1xuIiwgbm9uX3Rlcm1pbmFsKTsKfQolfQoKJSUKW0EtWl1bJ10/ICAgIHsgcHJpbnRfZmlyc3QoeXl0ZXh0KTsgfQpbIFx0XG5dKyAgICAgeyAvKiBza2lwIHdoaXRlc3BhY2UgKi8gfQouICAgICAgICAgICAgeyBwcmludGYoIkludmFsaWQgaW5wdXQ6ICVzXG4iLCB5eXRleHQpOyB9CiUlCgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiRW50ZXIgbm9uLXRlcm1pbmFscyAoZS5nLiwgRSBUIEUnIEYpOlxuIik7CiAgICB5eWxleCgpOwogICAgcmV0dXJuIDA7Cn0K