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