%option c++
%option noyywrap
%{
#include <iostream>
#include <cstdlib> // for exit()
using namespace std;
// Required declaration for C++ flex
int yylex();
%}
DIGIT [0-9]
ID [a-zA-Z_][a-zA-Z0-9_]*
KEYWORD int
|float|if
|else
|while
|return
%%
{KEYWORD} { cout << "Keyword: " << yytext << endl; }
{ID} { cout << "Identifier: " << yytext << endl; }
{DIGIT
}+ { cout
<< "
Integer: "
<< yytext
<< endl
; } {DIGIT
}+"
."
{DIGIT
}+ { cout
<< "
Float: "
<< yytext
<< endl
; } [+\-*/=] { cout << "Operator: " << yytext << endl; }
[;,(){}] { cout << "Punctuation: " << yytext << endl; }
[ \t\n]+ { /* ignore whitespace */ }
. { cerr << "Error: Unrecognized character '" << yytext << "'" << endl; }
%%
int main(int argc, char** argv) {
if (argc > 1) {
yyin = fopen(argv[1], "r");
if (!yyin) {
cerr
<< "Error
: Cannot
open file "
<< argv
[1] << endl
; return 1;
}
}
yylex();
if (argc > 1) {
fclose(yyin);
}
return 0;
}
JW9wdGlvbiBjKysKJW9wdGlvbiBub3l5d3JhcAoKJXsKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIGZvciBleGl0KCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIFJlcXVpcmVkIGRlY2xhcmF0aW9uIGZvciBDKysgZmxleAppbnQgeXlsZXgoKTsKJX0KCkRJR0lUICAgIFswLTldCklEICAgICAgIFthLXpBLVpfXVthLXpBLVowLTlfXSoKS0VZV09SRCAgaW50fGZsb2F0fGlmfGVsc2V8d2hpbGV8cmV0dXJuCgolJQoKe0tFWVdPUkR9ICAgICAgICAgICB7IGNvdXQgPDwgIktleXdvcmQ6ICIgPDwgeXl0ZXh0IDw8IGVuZGw7IH0Ke0lEfSAgICAgICAgICAgICAgICB7IGNvdXQgPDwgIklkZW50aWZpZXI6ICIgPDwgeXl0ZXh0IDw8IGVuZGw7IH0Ke0RJR0lUfSsgICAgICAgICAgICB7IGNvdXQgPDwgIkludGVnZXI6ICIgPDwgeXl0ZXh0IDw8IGVuZGw7IH0Ke0RJR0lUfSsiLiJ7RElHSVR9KyB7IGNvdXQgPDwgIkZsb2F0OiAiIDw8IHl5dGV4dCA8PCBlbmRsOyB9ClsrXC0qLz1dICAgICAgICAgICAgeyBjb3V0IDw8ICJPcGVyYXRvcjogIiA8PCB5eXRleHQgPDwgZW5kbDsgfQpbOywoKXt9XSAgICAgICAgICAgIHsgY291dCA8PCAiUHVuY3R1YXRpb246ICIgPDwgeXl0ZXh0IDw8IGVuZGw7IH0KWyBcdFxuXSsgICAgICAgICAgICB7IC8qIGlnbm9yZSB3aGl0ZXNwYWNlICovIH0KLiAgICAgICAgICAgICAgICAgICB7IGNlcnIgPDwgIkVycm9yOiBVbnJlY29nbml6ZWQgY2hhcmFjdGVyICciIDw8IHl5dGV4dCA8PCAiJyIgPDwgZW5kbDsgfQoKJSUKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewogICAgaWYgKGFyZ2MgPiAxKSB7CiAgICAgICAgeXlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CiAgICAgICAgaWYgKCF5eWluKSB7CiAgICAgICAgICAgIGNlcnIgPDwgIkVycm9yOiBDYW5ub3Qgb3BlbiBmaWxlICIgPDwgYXJndlsxXSA8PCBlbmRsOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHl5bGV4KCk7CiAgICAKICAgIGlmIChhcmdjID4gMSkgewogICAgICAgIGZjbG9zZSh5eWluKTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=