%s BODY HEADER %{ #include "email.h" #include "y.tab.h" %} FROM (From\ ) FROMLINE (From\ .*\n) HEADERNAME ([A-Za-z0-9-]*:\ ) CONTINUATION (\t.*\n) LINE (.*\n) EMPTY_LINE (\n) %% {FROMLINE} { strtok(yytext, "\n"); debug(2, "fromline: %s\n", yytext); BEGIN INITIAL; yylval.string = yytext; return FROMLINE; } {FROM} { BEGIN INITIAL; REJECT; } {LINE} { debug(2, "body line: %s\n", yytext); yylval.string = yytext; return LINE; } {HEADERNAME} { debug(2, "header: %s\n", yytext); BEGIN HEADER; strtok(yytext, ":"); yylval.string = yytext; return HEADERNAME; }
{LINE} { strtok(yytext, "\n"); debug(2, "header is: %s\n", yytext); BEGIN INITIAL; yylval.string = yytext; return HEADERBODY; } {CONTINUATION} { strtok(yytext, "\n"); debug(2, "continues: %s\n", yytext); yylval.string = yytext + 1; return CONTINUATION; } {EMPTY_LINE} { debug(2, "empty line: %s\n", yytext); BEGIN BODY; return EMPTY_LINE; } . { debug(1, "(%c?)", yytext[0]); } %%