/* common section */
nl \n
ws [ \t]+
-socket [\/][a-zA-Z0-9\/]+
-topic [\"][a-zA-Z0-9/]+[\"]
+special [()+\|\?\*,]
+sstring [a-zA-Z0-9]
+socket \/{sstring}[^{special}][a-zA-Z0-9\/\.]+
+quotedstring \"[^"\n]*\"
+bracketstring \<[^>]*\>
+comment ^\#[^\n]*
%%
-any { return(ANY); }
-drop { yylval.number=0;return (ACTION);}
-pass { yylval.number=1;return (ACTION);}
-in { yylval.number=0;return (DIR);}
-out { yylval.number=1;return (DIR);}
-{topic} { yylval.string=strdup(yytext);return WORD;}
-{socket} { yylval.string=strdup(yytext);return SOCKET;}
-"FROM" { return FROM;}
-"ANY" { return ANY;}
+"DROP" { yylval.number=0;return (ACTION);}
+"PASS" { yylval.number=1;return (ACTION);}
+"IN" { return (IN);}
+"OUT" { return (OUT);}
+"ANY" { return (ANY);}
+{bracketstring} { yylval.string=strndup(yytext+1, yyleng -2);return WORD;}
+{ws}"FROM"{ws}{socket}$ { yylval.string=strdup(yytext);return SOCKET;}
+^"LOG" { return LOG;}
+"QUICK" { return QUICK;}
{ws} { ; }
{nl} { ; }
-
+{comment} { return COMMENT; }
%%
+