123 lines
2.2 KiB
Perl
123 lines
2.2 KiB
Perl
package ANTLR::Runtime::RecognitionException;
|
|
|
|
use Carp;
|
|
use Readonly;
|
|
|
|
use Moose;
|
|
use Moose::Util::TypeConstraints;
|
|
|
|
extends 'ANTLR::Runtime::Exception';
|
|
|
|
has 'input' => (
|
|
is => 'ro',
|
|
does => 'ANTLR::Runtime::IntStream',
|
|
required => 1,
|
|
);
|
|
|
|
has 'index' => (
|
|
is => 'ro',
|
|
isa => 'Int',
|
|
default => 0,
|
|
);
|
|
|
|
has 'token' => (
|
|
is => 'ro',
|
|
does => 'ANTLR::Runtime::Token',
|
|
);
|
|
|
|
has 'node' => (
|
|
is => 'ro',
|
|
isa => 'Any',
|
|
);
|
|
|
|
subtype 'Char'
|
|
=> as 'Str'
|
|
=> where { $_ eq '-1' || length == 1 };
|
|
|
|
has 'c' => (
|
|
is => 'ro',
|
|
isa => 'Maybe[Char]',
|
|
);
|
|
|
|
has 'line' => (
|
|
is => 'ro',
|
|
isa => 'Int',
|
|
default => 0,
|
|
);
|
|
|
|
has 'char_position_in_line' => (
|
|
is => 'ro',
|
|
isa => 'Int',
|
|
default => 0,
|
|
);
|
|
|
|
has 'approximate_line_info' => (
|
|
is => 'rw',
|
|
isa => 'Bool',
|
|
);
|
|
|
|
sub BUILDARGS {
|
|
my ($class, @args) = @_;
|
|
my $args = $class->SUPER::BUILDARGS(@args);
|
|
|
|
my $new_args = { %$args };
|
|
my $input = $args->{input};
|
|
$new_args->{input} = $input;
|
|
$new_args->{index} = $input->index();
|
|
|
|
if ($input->does('ANTLR::Runtime::TokenStream')) {
|
|
my $token = $input->LT(1);
|
|
$new_args->{token} = $token;
|
|
$new_args->{line} = $token->get_line();
|
|
$new_args->{char_position_in_line} = $token->get_char_position_in_line();
|
|
}
|
|
|
|
if ($input->does('ANTLR::Runtime::TreeNodeStream')) {
|
|
# extract_information_from_tree_node_stream($input);
|
|
}
|
|
elsif ($input->does('ANTLR::Runtime::CharStream')) {
|
|
$new_args->{c} = $input->LA(1);
|
|
$new_args->{line} = $input->get_line();
|
|
$new_args->{char_position_in_line} = $input->get_char_position_in_line();
|
|
}
|
|
else {
|
|
$new_args->{c} = $input->LA(1);
|
|
}
|
|
|
|
return $new_args;
|
|
}
|
|
|
|
sub get_unexpected_type {
|
|
my ($self) = @_;
|
|
|
|
if ($self->input->isa('ANTLR::Runtime::TokenStream')) {
|
|
return $self->token->get_type();
|
|
} else {
|
|
return $self->c;
|
|
}
|
|
}
|
|
|
|
sub get_c {
|
|
my ($self) = @_;
|
|
return $self->c;
|
|
}
|
|
|
|
sub get_line {
|
|
my ($self) = @_;
|
|
return $self->line;
|
|
}
|
|
|
|
sub get_char_position_in_line {
|
|
my ($self) = @_;
|
|
return $self->char_position_in_line;
|
|
}
|
|
|
|
sub get_token {
|
|
my ($self) = @_;
|
|
return $self->token;
|
|
}
|
|
|
|
no Moose;
|
|
__PACKAGE__->meta->make_immutable();
|
|
1;
|