1package ANTLR::Runtime::RecognizerSharedState; 2 3use ANTLR::Runtime::Token; 4 5use Moose; 6 7# Track the set of token types that can follow any rule invocation. 8# Stack grows upwards. When it hits the max, it grows 2x in size 9# and keeps going. 10has 'following' => ( 11 is => 'rw', 12 isa => 'ArrayRef[ANTLR::Runtime::BitSet]', 13 default => sub { [] }, 14); 15 16has '_fsp' => ( 17 is => 'rw', 18 isa => 'Int', 19 default => -1, 20); 21 22# This is true when we see an error and before having successfully 23# matched a token. Prevents generation of more than one error message 24# per error. 25has 'error_recovery' => ( 26 is => 'rw', 27 isa => 'Bool', 28 default => 0, 29); 30 31# The index into the input stream where the last error occurred. 32# This is used to prevent infinite loops where an error is found 33# but no token is consumed during recovery...another error is found, 34# ad naseum. This is a failsafe mechanism to guarantee that at least 35# one token/tree node is consumed for two errors. 36has 'last_error_index' => ( 37 is => 'rw', 38 isa => 'Int', 39 default => -1, 40); 41 42# In lieu of a return value, this indicates that a rule or token 43# has failed to match. Reset to false upon valid token match. 44has 'failed' => ( 45 is => 'rw', 46 isa => 'Bool', 47 default => 0, 48); 49 50# Did the recognizer encounter a syntax error? Track how many. 51has 'syntax_errors' => ( 52 is => 'rw', 53 isa => 'Int', 54 default => 0, 55); 56 57# If 0, no backtracking is going on. Safe to exec actions etc... 58# If >0 then it's the level of backtracking. 59has 'backtracking' => ( 60 is => 'rw', 61 isa => 'Int', 62 default => 0, 63); 64 65# An array[size num rules] of Map<Integer,Integer> that tracks 66# the stop token index for each rule. ruleMemo[ruleIndex] is 67# the memoization table for ruleIndex. For key ruleStartIndex, you 68# get back the stop token for associated rule or MEMO_RULE_FAILED. 69# This is only used if rule memoization is on (which it is by default). 70has 'rule_memo' => ( 71 is => 'rw', 72 isa => 'Maybe[ArrayRef[HashRef[Int]]]', 73); 74 75# The goal of all lexer rules/methods is to create a token object. 76# This is an instance variable as multiple rules may collaborate to 77# create a single token. nextToken will return this object after 78# matching lexer rule(s). If you subclass to allow multiple token 79# emissions, then set this to the last token to be matched or 80# something nonnull so that the auto token emit mechanism will not 81# emit another token. 82has 'token' => ( 83 is => 'rw', 84 isa => 'Maybe[ANTLR::Runtime::Token]', 85); 86 87# What character index in the stream did the current token start at? 88# Needed, for example, to get the text for current token. Set at 89# the start of nextToken. 90has 'token_start_char_index' => ( 91 is => 'rw', 92 isa => 'Int', 93 default => -1, 94); 95 96# The line on which the first character of the token resides 97has 'token_start_line' => ( 98 is => 'rw', 99 isa => 'Int', 100); 101 102# The character position of first character within the line 103has 'token_start_char_position_in_line' => ( 104 is => 'rw', 105 isa => 'Int', 106); 107 108# The channel number for the current token 109has 'channel' => ( 110 is => 'rw', 111 isa => 'Int', 112); 113 114# The token type for the current token 115has 'type' => ( 116 is => 'rw', 117 isa => 'Int', 118); 119 120# You can set the text for the current token to override what is in 121# the input char buffer. Use setText() or can set this instance var. 122has 'text' => ( 123 is => 'rw', 124 isa => 'Maybe[Str]', 125); 126 127no Moose; 128__PACKAGE__->meta->make_immutable(); 1291; 130__END__ 131