Parser.pm revision 324c4644fee44b9898524c09511bd33c3f12e2df
1package ANTLR::Runtime::Parser;
2
3use Readonly;
4use Carp;
5
6use Moose;
7
8extends 'ANTLR::Runtime::BaseRecognizer';
9
10has 'input' => (
11    is   => 'rw',
12    does => 'ANTLR::Runtime::TokenStream'
13);
14
15sub reset {
16    my ($self) = @_;
17
18    $self->SUPER::reset();  #  reset all recognizer state variables
19    if (defined $self->input) {
20        $self->input->seek(0);  # rewind the input
21    }
22}
23
24sub get_current_input_symbol {
25    my ($self, $input) = @_;
26    return $self->input->LT(1);
27}
28
29sub get_missing_symbol {
30    my ($self, $arg_ref) = @_;
31    my $input = $arg_ref->{input};
32    my $exception = $arg_ref->{exception};
33    my $expected_token_type = $arg_ref->{expected_token_type};
34    my $follow = $arg_ref->{follow};
35
36    my $token_text;
37    if ($expected_token_type == ANTLR::Runtime::Token->EOF) {
38        $token_text = '<missing EOF>';
39    }
40    else {
41        $token_text = '<missing ' . $self->get_token_names()->[$expected_token_type] . '>';
42    }
43
44    my $t = ANTLR::Runtime::CommonToken->new({
45        type => $expected_token_type,
46        text => $token_text
47    });
48    my $current = $input->LT(1);
49    if ($current->get_type() == ANTLR::Runtime::Token->EOF) {
50        $current = $input->LT(-1);
51    }
52    $t->set_line($current->get_line());
53    $t->set_char_position_in_line($current->get_char_position_in_line());
54    $t->set_channel($self->DEFAULT_TOKEN_CHANNEL);
55
56    return $t;
57}
58
59sub set_token_stream {
60    my ($self, $input) = @_;
61
62    $self->input(undef);
63    $self->reset();
64    $self->input($input);
65}
66
67sub get_token_stream {
68    my ($self) = @_;
69
70    return $self->input;
71}
72
73sub get_source_name {
74    my ($self) = @_;
75    return $self->input->get_source_name();
76}
77
78sub trace_in {
79    my ($self, $rule_name, $rule_index) = @_;
80
81    $self->SUPER::trace_in($rule_name, $rule_index, $self->input->LT(1));
82}
83
84sub trace_out {
85    my ($self, $rule_name, $rule_index) = @_;
86
87    $self->SUPER::trace_out($rule_name, $rule_index, $self->input->LT(1));
88}
89
90no Moose;
91__PACKAGE__->meta->make_immutable();
921;
93__END__
94