# Copyright (c) Philippe Verdret, 1995-1998
require 5.003;
use strict;
package Parse::Token;
my $old_next = \&next;
*next = sub { # add some actions before and after the routine call
my $self = $_[0];
if ($Parse::Token::trace) {
my $name = $self->name;
$self->context("try to find:\t$name");
my $reader = $self->reader;
my $pendingToken = $reader->[$Lex::PEND_TOKEN];
if ($pendingToken) {
if ($pendingToken->name eq 'EOI') {
$self->context("End of input at line $.");
return undef;
} else {
$self->context("pending token:\t", $pendingToken->name);
}
}
}
my $string = &$old_next(@_);
if ($Parse::Token::trace) {
if ($self->status) {
$self->context("token found: $string");
} else {
$self->context("token not found");
}
}
$string;
};
my $old_isnext = \&isnext;
*isnext = sub {
my $self = $_[0];
if ($Parse::Token::trace) {
my $name = $self->name;
$self->context("try to find:\t$name");
my $reader = $self->reader;
my $pendingToken = $reader->[$Lex::PEND_TOKEN];
if ($pendingToken) {
if ($pendingToken->name eq 'EOI') {
$self->context("End of input at line $.");
return undef;
} else {
$self->context("pending token:\t", $pendingToken->name);
}
}
}
my $status = &$old_isnext(@_);
if ($Parse::Token::trace) {
if ($self->status) {
$self->context("token found: ${$_[1]}");
} else {
$self->context("token not found");
}
}
$status;
};
1;
__END__