network:north = { ip = 10.1.1.0; mask = 255.255.255.0; host:asterix = {ip = 10.1.1.10;} host:obelix = {ip = 10.1.1.11;} host:idefix = {ip = 10.1.1.12;} host:ix_13_20 = {range = 10.1.1.13 - 10.1.1.20;} } #### host:ix_13_20 = {ip = 10.1.1.13; ip = 10.1.1.14; ..... ; ip = 10.1.1.20 } #### startrule: network_object(s) ip: 'ip' '=' /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ ip_nosemi: 'ip' '=' /\d{1,3}\.\d{1,3}\.\d{1,3}\.d{1,3}/ mask: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3};/ host: /host:\w+/ '=' '{' ip(s) '}' host_range: /host:\w+/ '=' '{' 'range' '=' ip_nosemi '-' ip '}' hosts_or_range: host(s?) | host_range #hosts_or_range: host(s?) | host_range network_object: /network:(\w+)/ '=' '{' ip 'mask' '=' mask hosts_or_range '}' { print "Found network object named $item[1] " . "with IP $item{ip} and MASK $item{mask}\n"; }