# # Copyright (C) 1999 Eric Bohlman, Loic Dachary # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) any # later version. You may also use, redistribute and/or modify it # under the terms of the Artistic License supplied with your Perl # distribution # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. # # # $Header: /usr/local/cvsroot/Text-Query/lib/Text/Query/Build.pm,v 1.3 1999/06/16 10:32:13 loic Exp $ # package Text::Query::Build; use strict; sub new { my $class=shift; my $self={}; bless $self,$class; $self->initialize(); return $self; } sub initialize { } sub matchstring { my($self) = @_; return $self->{matchstring}; } sub build_init { my ($self)=@_; } sub build_final_expression { my($self, $t1) = @_; return $self->{matchstring} = $t1; } sub build_expression { my($self, $l, $r) = @_; return "[ or $l $r ]"; } sub build_expression_finish { my($self, $l) = @_; return $l; } sub build_conj { my($self, $l, $r, $first) = @_; return "[ and $l $r ]"; } sub build_near { my($self, $l, $r) = @_; return "[ near $l $r ]"; } sub build_concat { my($self, $l, $r) = @_; return "[ concat $l $r ]"; } sub build_negation { my($self, $t) = @_; return "[ not $t ]"; } sub build_literal { my($self, $t) = @_; return "[ literal $t ]"; } sub build_scope_start { my($self) = @_; } sub build_scope_end { my($self, $scope, $t) = @_; return "[ scope '$scope->[0]' $t ]"; } sub build_mandatory { my($self, $t) = @_; return "[ mandatory $t ]"; } sub build_forbiden { my($self, $t) = @_; return "[ forbiden $t ]"; } 1; =head1 NAME Text::Query::Build - Base class for query builders =head1 SYNOPSIS package Text::Query::BuildMy; use Text::Query::Build; use vars qw(@ISA); @ISA = qw(Text::Query::Build); =head1 DESCRIPTION This module provides a virtual base class for query builders. Query builders are called by the parser logic. A given set of functions is provided by the builder to match a Boolean logic. All the methods return a scalar corresponding to the code that performs the specified options. Parameters Q1 and Q2 are the same type of scalar as the return values. =head1 METHODS =over 4 =item matchstring() Return a string that represent the last built expression. Two identical expressions should generate the same string. This is for testing purpose. =back =head1 CODE-GENERATION METHODS =over 4 =item build_init() Called before building the expression. A chance to initialize object data. =item build_final_expression(Q1) Does any final processing to generate code to match a top-level expression. The return value is NOT necessarily of a type that can be passed to the other code-generation methods. =item build_expression(Q1,Q2) Generate code to match C OR C =item build_expression_finish(Q1) Generate any code needed to enclose an expression. =item build_conj(Q1,Q2,F) Generate code needed to match C AND C. F will be true if this is the first time this method is called in a sequence of several conjunctions. =item build_near(Q1,Q2) Generate code needed to match C NEAR C. =item build_concat(Q1,Q2) Generate code needed to match C immediately followed by C. =item build_negation(Q1) Generate code needed to match NOT C. =item build_literal(Q1) Generate code to match C as a literal. =item build_scope_start($scope) Generate code to enter in the C<$scope> query context. =item build_scope_end($scope,Q1) Generate code needed to match C in the C<$scope> context. =item build_mandatory(Q1) Generate code to match C (think + in AltaVista syntax). =item build_forbiden(Q1) Generate code to match NOT C (think - in AltaVista syntax). =back =head1 SEE ALSO Text::Query(3) =head1 AUTHORS Eric Bohlman (ebohlman@netcom.com) Loic Dachary (loic@senga.org) =cut # Local Variables: *** # mode: perl *** # End: ***