#!perl $_=join"",; sub parse { my ($text) = @_; $nw++; my $parens = qr{(?:[^{}]+?|\{(??{$parens})\})*}x; while($text =~ /module (\w+) \{ ($parens) \};?/gx) { ($name, $content)=($1, $2); # print "[$&]"; print ' 'x$nw, "subgraph $name\n"; print ' 'x$nw, "{\n"; parse($content); print ' 'x$nw, "}\n"; } $nw--; } print "digraph G\n{\n"; parse($_); print "}\n"; __DATA__ module abc { module def { module ghi { }; }; };