=head1 NAME

C<Parse::Token> - Classe définissant les lexèmes utilisés par
Parse::Lex.pm (Alpha 1.16).

=head1 SYNOPSIS

	require 5.000;

	use Parse::Lex;
	@token = qw(
	    ADDOP    [-+]
	    INTEGER  [1-9][0-9]*
	   );

	$lexer = Parse::Lex->new(@token);
	$lexer->from(\*DATA);

	$content = $INTEGER->next;
	if ($INTEGER->status) {
	  print "$content\n";
	}
	$content = $ADDOP->next;
	if ($ADDOP->status) {
	  print "$content\n";
	}
	if ($INTEGER->isnext(\$content)) {
	  print "$content\n";
	}
	__END__
	1+2

=head1 DESCRIPTION

Le package C<Token> permet de définir les lexèmes utilisés par
C<Parse::Lex>. La méthode C<Lex::new> du package C<Parse::Lex> crée
indirectement un objet de type C<Token> par lexème à reconnaître.  Les
méthodes C<next> ou C<isnext> du package C<Token> permettent d'interfacer
aisément l'analyseur lexical avec un analyseur syntaxique.

Le package C<Parse::Token> n'est pas destiné à être directement
utilisé.  L'inclusion de ce package doit se faire par le biais d'un
C<use Parse::Lex>.

=head2 Méthodes

=item get EXPR

C<get> permet d'obtenir la valeur de l'attribut résultant de
l'évaluation d'EXPR.  Il est également possible d'utiliser le nom de
l'attribut comme nom de méthode.

=item getstring

Retourne la chaîne de caractères reconnue au moyen de l'objet
C<Token>.

=item isnext EXPR

=item isnext

Retourne le statut du token. La chaîne consommée est disponible dans
EXPR s'il s'agit d'une référence à un scalaire.

=item mean

Retourne la fonction anonyme définie dans l'objet C<Token>.

=item name

Retourne le nom symbolique de l'objet C<Token>.

=item next

Active la recherche du lexème défini par l'expression régulière
contenue dans l'objet. Si ce lexème est reconnu sur le flot de
caractère à analyser alors C<next> retourne la chaîne trouvée et met le
statut de l'objet à vrai.

=item new SYMBOL_NAME, REGEXP, SUB

Crée un objet de type C<Token>. Les arguments de la méthode C<new> sont
dans l'ordre : un nom symbolique, une expression régulière et une
fonction anonyme.

REGEXP est soit une expression régulière simple, soit une référence à
un tableau contenant de une à trois expressions régulières. Dans ce
dernier cas le lexème peut être réparti sur plusieurs
enregistrements. Ce peut être par exemple une chaîne de caractères
délimitée par des guillemets, des commentaires d'un programme C, etc.

Les expressions régulières sont utilisées pour reconnaître :

=item 1. le début du lexème, 

=item 2. le "corps" du lexème, si cette seconde expression est absente
C<Parse::Lex> utilise "(?:.*?)",

=item 3. la fin du lexème, si cette dernière expression est absente
on utilise la première.  (Attention ! La fin du lexème ne peut être à
cheval sur plusieurs enregistrements).

Exemple.

	  qw(STRING), [qw(" (?:[^"\\\\]+|\\\\(?:.|\n))* ")],

Les expressions régulières permettent des chaînes multilignes
délimitées par des guillemets, sachant que contre-oblique est utilisé
pour littéraliser les guillements qui apparaissent au sein de la
chaîne. Remarquez le quadruplement du contre-oblique.

Voici une variante de l'exemple précédent qui utilise l'option C<s>
pour inclure la nouvelle-ligne dans les caractères reconnus par "." :

	  qw(STRING), [qw(" (?s)(?:[^"\\\\]+|\\\\.)* ")],


La fonction anonyme est exécutée au moment ou le lexème est reconnu
par l'analyseur lexical. Cette fonction possède deux arguments : $_[0]
contient l'objet C<Token>, $_[1] la chaîne reconnue par l'expression
régulière. Le scalaire retourné par la fonction anonyme définit la
chaîne de caractères mémorisée dans l'objet C<Token>.

Dans la fonction anonyme vous pouvez utiliser les variables
positionnelles $1, $2,... sachant que $1 contient la chaîne reconnue
par l'expression régulière de l'objet Token.

=item regexp

Retourne l'expression régulière définie dans l'objet C<Token>.

=item set HASH

Permet de décorer un objet Token au moyen d'une liste
d'attribut-valeurs.

Un nom d'attribut peut être utilisé comme nom de méthode.

=item setstring EXPR

La valeur de C<EXPR> définit la chaîne de caractères associée au 
lexème.

=item status EXPR

=item status

Indique si la dernière recherche du lexème a réussie ou échouée.
C<status EXPR> permet de forcer le statut à la valeur dénotée
par EXPR.

=item trace OUTPUT 

=item trace 

Méthode de classe qui active/désactive une trace de l'analyse
lexicale. 

C<OUTPUT> peut être un fichier ou une référence à un
filehandle vers laquelle la trace va être dirigée.

=head1 GESTION DES ERREURS

Pour traiter les cas de non reconnaissance de lexème vous pouvez
définir un objet C<Token> spécifique.  Si la recherche de ce token
réussie il est alors possible d'appeler une fonction dévolue au
traitement des erreurs.

=head1 AUTEUR

Philippe Verdret. 

=head1 AVERTISSEMENT

Je considère que la présente version de Token.pm/Lex.pm est
expérimentale. Ce module peut notablement évoluer. J'aimerais recevoir
vos remarques et vos suggestions.

=head1 REFERENCES

Friedl, J.E.F. Mastering Regular Expressions. O'Reilly & Associates
1996.

Groc, B., & Bouhier, M. - Programmation par la syntaxe. Dunod 1990.

Mason, T & Brown, D. - Lex & Yacc. O'Reilly & Associates, Inc. 1990.

=head1 COPYRIGHT

Copyright (c) 1995-1997 Philippe Verdret. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

=cut
