1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpackage ANTLR::Runtime::Token; 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse Readonly; 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse feature qw( state ); 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse ANTLR::Runtime::CharStream; 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#use ANTLR::Runtime::CommonToken; 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse Moose::Role; 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 12324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $EOR_TOKEN_TYPE => 1; 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub EOR_TOKEN_TYPE { $EOR_TOKEN_TYPE } 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# imaginary tree navigation type; traverse "get child" link 16324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $DOWN => 2; 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub DOWN { $DOWN } 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# imaginary tree navigation type; finish with a child list 20324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $UP => 3; 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub UP { $UP } 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $MIN_TOKEN_TYPE => $UP + 1; 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub MIN_TOKEN_TYPE { $MIN_TOKEN_TYPE } 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# All tokens go to the parser (unless skip() is called in that rule) 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# on a particular "channel". The parser tunes to a particular channel 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# so that whitespace etc... can go to the parser on a "hidden" channel. 29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $DEFAULT_CHANNEL => 0; 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub DEFAULT_CHANNEL { $DEFAULT_CHANNEL } 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# Anything on different channel than DEFAULT_CHANNEL is not parsed 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# by parser. 34324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $HIDDEN_CHANNEL => 99; 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub HIDDEN_CHANNEL { $HIDDEN_CHANNEL } 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub EOF { ANTLR::Runtime::CharStream->EOF } 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#Readonly my $EOF_TOKEN => ANTLR::Runtime::CommonToken->new({ type => EOF }); 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub EOF_TOKEN { 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver require ANTLR::Runtime::CommonToken; 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver state $EOF_TOKEN = ANTLR::Runtime::CommonToken->new({ type => EOF }); 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return $EOF_TOKEN; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverReadonly my $INVALID_TOKEN_TYPE => 0; 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub INVALID_TOKEN_TYPE { $INVALID_TOKEN_TYPE } 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#Readonly my $INVALID_TOKEN => ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub INVALID_TOKEN { 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver require ANTLR::Runtime::CommonToken; 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver state $INVALID_TOKEN = ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return $INVALID_TOKEN; 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# will avoid creating a token for this symbol and try to fetch another. 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#Readonly my $SKIP_TOKEN => ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub SKIP_TOKEN { 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver require ANTLR::Runtime::CommonToken; 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver state $SKIP_TOKEN = ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return $SKIP_TOKEN; 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_text', 'set_text'; 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_type', 'set_type'; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_line', 'set_line'; 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_char_position_in_line', 'set_char_position_in_line'; 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_channel', 'set_channel'; 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_token_index', 'set_token_index'; 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequires 'get_input_stream', 'set_input_stream'; 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverno Moose::Role; 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1; 81