From 4fcfc78e76770513eb65c594d76a21c0e45773f9 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Tue, 25 Mar 2003 21:33:11 +0000 Subject: [PATCH] Replaced various nesting heuristics by proper parsing of parenthesized blocks. Also noted that "E" is now multi-valued. --- lib/perl/Query.pm | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/lib/perl/Query.pm b/lib/perl/Query.pm index b39b5ac0..e07f64f1 100644 --- a/lib/perl/Query.pm +++ b/lib/perl/Query.pm @@ -1,6 +1,6 @@ # Perl module for sending queries to Sherlock search servers and parsing answers # -# (c) 2002 Martin Mares +# (c) 2002--2003 Martin Mares # # This software may be freely distributed and used according to the terms # of the GNU Lesser General Public License. @@ -141,41 +141,26 @@ sub command($$) { } our $hdr_syntax = { - 'D' => { - 'D' => "", + '(D' => { 'W' => [], 'P' => [], 'n' => [], - 'T' => "", - '-' => "", '.' => [], }, '.' => [], - '' => "" }; our $card_syntax = { - 'U' => { - 'U' => "", - 'D' => "", - 'E' => "", - 'L' => "", - 'T' => "", - 'c' => "", - 's' => "", + '(U' => { 'V' => [], - 'b' => "", - 'i' => "", 'y' => [], - 'z' => "", + 'E' => [], }, 'M' => [], 'X' => [], - '' => "" }; our $footer_syntax = { - '' => "" }; sub query($$) { @@ -221,18 +206,19 @@ sub do_parse_tree($$$$) { my $syntax = shift @_; while ($i < @$raw) { - $raw->[$i] =~ /^(.)(.*)/; - if (!defined($syntax->{$1}) && !defined($syntax->{''})) { return $i; } - if (ref $syntax->{$1} eq "ARRAY") { + $raw->[$i] =~ /^([^(]|\(.)(.*)/; + if ($1 eq ")") { + return $i; + } elsif (!defined($syntax->{$1})) { + $cooked->{$1} = $2 if !defined($cooked->{$1}); + $i++; + } elsif (ref $syntax->{$1} eq "ARRAY") { push @{$cooked->{$1}}, $2; $i++; } elsif (ref $syntax->{$1} eq "HASH") { my $block = {}; push @{$cooked->{$1}}, $block; - $i = do_parse_tree($raw, $i, $block, $syntax->{$1}); - } else { - $cooked->{$1} = $2 if !defined($cooked->{$1}); - $i++; + $i = do_parse_tree($raw, $i+1, $block, $syntax->{$1}); } } return $i; -- 2.39.2