| 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; |