NAME

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

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

DESCRIPTION

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

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

Méthodes

get EXPR

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.

getstring

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

isnext EXPR
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.

mean

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

name

Retourne le nom symbolique de l'objet Token.

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 next retourne la chaîne trouvée et met le statut de l'objet à vrai.

new SYMBOL_NAME, REGEXP, ANONYNOUS SUB

Crée un objet de type Token. Les arguments de la méthode 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 :

1. le début du lexème,
2. le "corps" du lexème, si cette seconde expression est absente Parse::Lex utilise "(?:.*?)",
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 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 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 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.

regexp

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

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.

setstring EXPR

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

status EXPR
status

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

trace OUTPUT
trace

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

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

GESTION DES ERREURS

Pour traiter les cas de non reconnaissance de lexème vous pouvez définir un objet 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.

AUTEUR

Philippe Verdret.

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.

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.

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.

3 POD Errors

The following errors were encountered while parsing the POD:

Around line 3:

Non-ASCII character seen before =encoding in 'définissant'. Assuming CP1252

Around line 47:

'=item' outside of any '=over'

Around line 162:

You forgot a '=back' before '=head1'