Table of Contents
A section declaration follow the rules:
|      section  : name argument '{' commands '}' ';'
     name     : symbol
     argument : (string)?
     commands : (section_specific_command ';')*
     symbol   : [a-zA-Z0-9_]+
     string   : "([^\\\"]|\\[\\\"])*" | 
|      section_specific_command : option_selection
     option_selection         : symbol '=' string | 
| config {
    transp   = "ipv4,ipv6,std";
    output   = "straight,text";
    verbose  = "explain,details,intro,counter";
    error    = "standard";
    resolver = "127.0.0.1";
}; | 
toto
|      section_specific_command : affectation
     affectation              : symbol '=' string | 
| constant {
    # For connectivity testing
    #  the '%s' will be replaced by the IP address
    ping4                 = "ping  -q -c 5 %s > /dev/null";
    ping6                 = "ping6 -q -c 5 %s > /dev/null";
    # HTML path for generated pages
    publish_html_path     = "/zc/";
}; | 
toto
|      section_specific_command : domain_mapping
     domain_mapping           : 'map' domainname filename
     domainname               : string
     filename                 : string | 
| useconf {
    map "fr."         "zc.conf.fr";
    map "arpa."       "zc.conf.arpa";
    map "."           "zc.conf.root";
}; | 
toto
|      commands                 : block
     block                    : (check ';' | switch)*
     check                    : checkname  severity  category
     switch                   : 'case' testname ('when' symbol block)+ 
                                                ('else' block)? 'end'
     testname                 : symbol    # with prefix 'tst_'
     checkname                : symbol    # with prefix 'chk_'
     severity                 : 'f' | 'w' | 'i' | 
| testseq "address" {
    chk_given_ip			f	dns;
    chk_given_nsprim_vs_soa		f	dns;
    case tst_mail_by_mx_or_a
    when MX
        # MX
	chk_mx				f	dns;
	chk_mx_auth			f	dns;
	chk_mx_sntx			f	dns;
    end
}; |