/* Define tokens */
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
%}
%%
/* Define patterns and corresponding actions */
"STORE" { printf("STORE\n"); }
"LOAD" { printf("LOAD\n"); }
"MACRO" { printf("MACRO\n"); }
"MEND" { printf("MEND\n"); }
"ADD" { printf("ADD\n"); }
"DIV" { printf("DIV\n"); }
"END" { printf("END\n"); }
[a-zA-Z_][a-zA-Z0-9_]* { printf("ID: %s\n", yytext); }
[0-9]+ { printf("NUM: %s\n", yytext); }
[ \t\n] { /* Ignore whitespace and newline characters */ }
%%
int main(int argc, char* argv[]) {
/* Open input file */
FILE* fp = fopen(argv[1], "r");
if (fp == NULL) {
perror("Error opening file");
exit(EXIT_FAILURE);
}
/* Set input file */
yyin = fp;
/* Call the lexer */
yylex();
/* Close input file */
fclose(fp);
return 0;
}
LyogRGVmaW5lIHRva2VucyAqLwolewojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiV9CgolJQoKLyogRGVmaW5lIHBhdHRlcm5zIGFuZCBjb3JyZXNwb25kaW5nIGFjdGlvbnMgKi8KIlNUT1JFIiAgICAgICAgICB7IHByaW50ZigiU1RPUkVcbiIpOyB9CiJMT0FEIiAgICAgICAgICAgeyBwcmludGYoIkxPQURcbiIpOyB9CiJNQUNSTyIgICAgICAgICAgeyBwcmludGYoIk1BQ1JPXG4iKTsgfQoiTUVORCIgICAgICAgICAgIHsgcHJpbnRmKCJNRU5EXG4iKTsgfQoiQUREIiAgICAgICAgICAgIHsgcHJpbnRmKCJBRERcbiIpOyB9CiJESVYiICAgICAgICAgICAgeyBwcmludGYoIkRJVlxuIik7IH0KIkVORCIgICAgICAgICAgICB7IHByaW50ZigiRU5EXG4iKTsgfQpbYS16QS1aX11bYS16QS1aMC05X10qICAgeyBwcmludGYoIklEOiAlc1xuIiwgeXl0ZXh0KTsgfQpbMC05XSsgICAgICAgICAgeyBwcmludGYoIk5VTTogJXNcbiIsIHl5dGV4dCk7IH0KWyBcdFxuXSAgICAgICAgIHsgLyogSWdub3JlIHdoaXRlc3BhY2UgYW5kIG5ld2xpbmUgY2hhcmFjdGVycyAqLyB9CgolJQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewogICAgLyogT3BlbiBpbnB1dCBmaWxlICovCiAgICBGSUxFKiBmcCA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CiAgICBpZiAoZnAgPT0gTlVMTCkgewogICAgICAgIHBlcnJvcigiRXJyb3Igb3BlbmluZyBmaWxlIik7CiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgfQoKICAgIC8qIFNldCBpbnB1dCBmaWxlICovCiAgICB5eWluID0gZnA7CgogICAgLyogQ2FsbCB0aGUgbGV4ZXIgKi8KICAgIHl5bGV4KCk7CgogICAgLyogQ2xvc2UgaW5wdXQgZmlsZSAqLwogICAgZmNsb3NlKGZwKTsKCiAgICByZXR1cm4gMDsKfQo=