1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpackage ANTLR::Runtime::RecognizerSharedState; 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse ANTLR::Runtime::Token; 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse Moose; 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# Track the set of token types that can follow any rule invocation. 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# Stack grows upwards. When it hits the max, it grows 2x in size 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# and keeps going. 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'following' => ( 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'ArrayRef[ANTLR::Runtime::BitSet]', 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => sub { [] }, 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas '_fsp' => ( 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => -1, 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# This is true when we see an error and before having successfully 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# matched a token. Prevents generation of more than one error message 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# per error. 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'error_recovery' => ( 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Bool', 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => 0, 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# The index into the input stream where the last error occurred. 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# This is used to prevent infinite loops where an error is found 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# but no token is consumed during recovery...another error is found, 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# ad naseum. This is a failsafe mechanism to guarantee that at least 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# one token/tree node is consumed for two errors. 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'last_error_index' => ( 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => -1, 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# In lieu of a return value, this indicates that a rule or token 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# has failed to match. Reset to false upon valid token match. 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'failed' => ( 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Bool', 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => 0, 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# Did the recognizer encounter a syntax error? Track how many. 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'syntax_errors' => ( 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => 0, 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# If 0, no backtracking is going on. Safe to exec actions etc... 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# If >0 then it's the level of backtracking. 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'backtracking' => ( 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => 0, 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# An array[size num rules] of Map<Integer,Integer> that tracks 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# the stop token index for each rule. ruleMemo[ruleIndex] is 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# the memoization table for ruleIndex. For key ruleStartIndex, you 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# get back the stop token for associated rule or MEMO_RULE_FAILED. 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# This is only used if rule memoization is on (which it is by default). 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'rule_memo' => ( 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Maybe[ArrayRef[HashRef[Int]]]', 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# The goal of all lexer rules/methods is to create a token object. 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# This is an instance variable as multiple rules may collaborate to 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# create a single token. nextToken will return this object after 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# matching lexer rule(s). If you subclass to allow multiple token 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# emissions, then set this to the last token to be matched or 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# something nonnull so that the auto token emit mechanism will not 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# emit another token. 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'token' => ( 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Maybe[ANTLR::Runtime::Token]', 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# What character index in the stream did the current token start at? 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# Needed, for example, to get the text for current token. Set at 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# the start of nextToken. 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'token_start_char_index' => ( 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver default => -1, 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# The line on which the first character of the token resides 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'token_start_line' => ( 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# The character position of first character within the line 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'token_start_char_position_in_line' => ( 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# The channel number for the current token 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'channel' => ( 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# The token type for the current token 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'type' => ( 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Int', 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# You can set the text for the current token to override what is in 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# the input char buffer. Use setText() or can set this instance var. 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'text' => ( 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'rw', 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Maybe[Str]', 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverno Moose; 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver__PACKAGE__->meta->make_immutable(); 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1; 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver__END__ 131