- Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead - caStr/cpStr durch yyless/yymore?? - syntax verification - command line query tool - error checking in scanner? - OSSP ex support - wieso geht sample.cfg nicht als Arg bei "make check"? - newline in error message $ ./cfg_test sample2.cfg ERROR: quu'> - cfg_t rewrite-uri { } rewrite-uri ^/(.*) /path/$1 --redirect=permanent q{ %{SOURCE} != "x" }; Directory [--foo=A] Argument: - type: - keyword ("foo") via name - option ("--foo=BAR") via name & regex - argument ("foo") via regex - amount: - 1 - 0/1 ? - 0..n * - 1..n + - location: - by position - by name - lookup via: - name - position - regex match foo * bar foo = bar|quux|... foo (bar baz quux) foo ::= bar* ; kleene closure foo ::= bar|baz|quux ; union foo ::= bar baz quux ; concatenation foo ::= {foo;...} ; sequence of ... foo ::= (...) ; grouping foo ::= "bar" ; fixed terminal foo ::= /bar/ ; regex terminal foo ::= ; arbitrary argument foo ::= ; arbitrary option SEQ ::= "{" DIR DIR* "}" DIR ::= TOK (" " TOK)* ";" TOK ::= ... SEQ ::= DIR* SEQ(dir,dir,...) DIR ::= TOK+ DIR(tok,tok,...) TOK ::= string "..." config ::= SEQ(directory|user|rewrite|access) directory ::= DIR("directory",*,) dir_options ::= user ::= DIR("user",/^[a-z]$/) rewrite ::= access ::= "access" ("allow"|"deny"):action SEQ(access_list):acl access_list ::= m/^!?%{ID}$/ acl ::= "acl" TOK:name acl_list acl_list ::= SEQ(acl_entry) acl_entry ::= acl_action "from" net-addr:src "to" net-addr:dst acl_action ::= "allow"|"deny" net_addr ::= net_hostname | net_ipv4addr | net_ipv6addr sequence all { directive --class 1; }; directive --class 1 "foo" { option "bar" --occur=1 };