Thread XML-"Dialekt" parsen
(11 answers)
Opened by Linuxer at 2011-04-12 15:04
Dafür einen Parser zu schreiben ist nicht schwer:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub parse { my $str=shift; my $tree={}; my @now=(\$tree); while($str ne '') { $str=~s/^\s*//s; if($str=~s/^:(\w+)\s*\(//s) { my $name=$1; unshift(@now,\${$now[0]}->{$name}); } elsif($str=~s/^\)//) { shift(@now); } elsif($str=~s/^"([^"]+)"//s) { my $text=$1; # ignore \" while($text=~s/\\"$/"/) { $text.=$1 if($str=~s/^([^"]+)"//s) } ${$now[0]}->{TEXT}.=$text; } elsif($str=~s/^(\w+)//) { ${$now[0]}->{TEXT}.=$1; } elsif($str ne '') { die("FORMAT ERROR ($str)\n"); } } return $tree; } my $str=<<EOT; :document ("NAME" :headline ("blablabla") :paragraph ( :text (bli) :whatever (bla) ) ) EOT print Dumper(parse($str)); Wobei eine vollständige Beschreibung der Sprache durchaus nützlich wäre. :-) |