NAME
Parse::Token
- Classe définissant les lexèmes utilisés par Parse::Lex.pm (Alpha 1.16).
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, SUB
-
Crée un objet de type
Token
. Les arguments de la méthodenew
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'objetToken
.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'