#=head1 NAME
C<Parse::LexEvent> - Générateur d'analyseurs lexicaux événementiels (1.00 alpha)
#=head1 SYNOPSIS
use Parse::LexEvent;
sub string {
print $_[0]->name, ": $_[1]\n";
}
sub comment {
print $_[0]->name, ": $_[1]\n";
}
sub remainder {
print $_[0]->name, ": $_[1]\n";
}
$lexer = Parse::LexEvent
->new()->configure(
From => \*DATA,
Tokens =>
[
Type => 'Simple', Name => 'ccomment', Handler => 'comment',
Regex => '//.*\n',
Type => 'Delimited', Name => 'comment', Handler => 'comment',
Start => '/[*]', End => '[*]/',
Type => 'Quoted', Name => 'squotes', Handler => 'string', Quote => qq!\'!,
Type => 'Quoted', Name => 'dquotes', Handler => 'string', Quote => qq!\"!,
Type => 'Simple', Name => 'remainder',
Regex => '(?s:[^/\'\"]+)', ReadMore => 1,
]
)->parse();
__END__
/*
C comment
*/
// C++ comment
var d = "string in double quotes";
var s = 'string in single quotes';
var i = 10;
var y = 100;
#=head1 DESCRIPTION
C<Parse::LexEvent> génère des analyseurs lexicaux à la manière de
C<Parse::Lex>, mais les analyseurs générés émettent un événement à
l'issue de la reconnaissance de chacun des tokens. Cet événement
correspond à l'appel d'une procédure qui porte le nom du token. Il est
possible de donner un nom différent à cette procédure en utilisant le
paramètre C<Handler> lors de la définition d'un token.
Une application utilisatrice de C<Parse::LexEvent> doit définir les
procédures requises. Ces procédures reçoivent l'objet token en premier
paramètre et la chaîne de caractères reconnue en second.
C<Parse::LexEvent> hérite de C<Parse::ALex> et possède toutes les
méthodes décrites dans la documentation de la classe C<Parse::Lex> à
l'exception des méthodes C<analyze()>, C<every()> C<next()>, et
C<nextis()>.
#=head2 Methodes
#=over 4
#=item parse()
Cette méthode lance l'analyse des données spécifiées par C<from()>.
#=back
#=head1 EXAMPLES
cparser.pl - Cet analyseur reconnaît trois types de structure : des
commentaires C ou C++, des chaînes entre guillemets et le reste. Il
emet un événement spécifique à chacune. On peut l'utiliser, par
exemple, pour analyser des programmes C, C++ ou Javascript.
#=head1 SEE ALSO
C<Parse::Lex>, C<Parse::Token>.
#=head1 AUTHOR
Philippe Verdret.
#=head1 COPYRIGHT
Copyright (c) 1999 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.