/* html_tags.l
Build: flex html_tags.l && gcc lex.yy.c -lfl -o htmltags && ./htmltags
*/
%{
#include <stdio.h>
%}
%%
"<"[ \t]*"/"[ \t]*[a-zA-Z][a-zA-Z0-9-]*[ \t]*">" { printf("END TAG: %s\n", yytext); }
"<"[ \t]*[a-zA-Z][a-zA-Z0-9-]*[^>]*">" { printf("START TAG: %s\n", yytext); }
[^<\n]+ { /* text */ }
\n { /* newline */ }
. { /* any other */ }
%%
int main(){ yylex(); return 0; }
LyogaHRtbF90YWdzLmwKICAgQnVpbGQ6IGZsZXggaHRtbF90YWdzLmwgJiYgZ2NjIGxleC55eS5jIC1sZmwgLW8gaHRtbHRhZ3MgJiYgLi9odG1sdGFncwoqLwolewojaW5jbHVkZSA8c3RkaW8uaD4KJX0KJSUKIjwiWyBcdF0qIi8iWyBcdF0qW2EtekEtWl1bYS16QS1aMC05LV0qWyBcdF0qIj4iICAgeyBwcmludGYoIkVORCBUQUc6ICVzXG4iLCB5eXRleHQpOyB9CiI8IlsgXHRdKlthLXpBLVpdW2EtekEtWjAtOS1dKltePl0qIj4iICAgICAgICAgICAgIHsgcHJpbnRmKCJTVEFSVCBUQUc6ICVzXG4iLCB5eXRleHQpOyB9CltePFxuXSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAvKiB0ZXh0ICovIH0KXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IC8qIG5ld2xpbmUgKi8gfQouICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLyogYW55IG90aGVyICovIH0KJSUKaW50IG1haW4oKXsgeXlsZXgoKTsgcmV0dXJuIDA7IH0K