package ANTLR::Runtime::CommonToken; use Readonly; use Moose; use overload 'bool' => \¬_eof, fallback => 1, ; with 'ANTLR::Runtime::Token'; has 'type' => ( is => 'rw', isa => 'Int', required => 1, ); has 'line' => ( is => 'rw', isa => 'Int', default => 0, ); has 'char_position_in_line' => ( is => 'rw', isa => 'Int', # set to invalid position default => -1, ); has 'channel' => ( is => 'rw', isa => 'Int', default => sub { ANTLR::Runtime::Token->DEFAULT_CHANNEL } ); has 'input' => ( is => 'rw', isa => 'Maybe[ANTLR::Runtime::CharStream]', ); # We need to be able to change the text once in a while. If # this is non-null, then getText should return this. Note that # start/stop are not affected by changing this. has 'text' => ( is => 'rw', isa => 'Maybe[Str]', ); # What token number is this from 0..n-1 tokens; < 0 implies invalid index has 'index' => ( is => 'rw', isa => 'Int', default => -1, ); # The char position into the input buffer where this token starts has 'start' => ( is => 'rw', isa => 'Int', ); # The char position into the input buffer where this token stops has 'stop' => ( is => 'rw', isa => 'Int', ); sub BUILD { my ($self, $arg_ref) = @_; if (exists $arg_ref->{token}) { my $token = $arg_ref->{token}; $self->text($token->get_text()); $self->type($token->get_type()); $self->line($token->get_line()); $self->index($token->get_token_index()); $self->char_position_in_line($token->get_char_position_in_line()); $self->channel($token->get_channel()); } return; } sub get_type { my ($self) = @_; return $self->type; } sub set_type { my ($self, $value) = @_; $self->value($value); return; } sub get_line { my ($self) = @_; return $self->line; } sub set_line { my ($self, $line) = @_; $self->line($line); return; } sub get_text { my ($self) = @_; if (defined $self->text) { return $self->text; } if (!defined $self->input) { return undef; } $self->text($self->input->substring($self->start, $self->stop)); return $self->text; } sub set_text { my ($self, $text) = @_; $self->text($text); return; } sub get_char_position_in_line { my ($self) = @_; return $self->char_position_in_line; } sub set_char_position_in_line { my ($self, $pos) = @_; $self->char_position_in_line($pos); return; } sub get_channel { my ($self) = @_; return $self->channel; } sub set_channel { my ($self, $channel) = @_; $self->channel($channel); return; } sub get_start_index { my ($self) = @_; return $self->start; } sub set_start_index { my ($self, $start) = @_; $self->start($start); return; } sub get_stop_index { my ($self) = @_; return $self->stop; } sub set_stop_index { my ($self, $stop) = @_; $self->stop($stop); return; } sub get_token_index { my ($self) = @_; return $self->index; } sub set_token_index { my ($self, $index) = @_; $self->index($index); return; } sub get_input_stream { my ($self) = @_; return $self->input; } sub set_input_stream { my ($self, $input) = @_; $self->input($input); return; } sub not_eof { my ($self) = @_; return $self->type != ANTLR::Runtime::Token->EOF; } =begin later public String toString() { String channelStr = ""; if ( channel>0 ) { channelStr=",channel="+channel; } String txt = getText(); if ( txt!=null ) { txt = txt.replaceAll("\n","\\\\n"); txt = txt.replaceAll("\r","\\\\r"); txt = txt.replaceAll("\t","\\\\t"); } else { txt = ""; } return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]"; } =end later =cut no Moose; __PACKAGE__->meta->make_immutable(); 1;