Module: ANTLR3::TokenStream
- Extended by:
- ClassMacros
- Includes:
- Stream
- Included in:
- CommonTokenStream
- Defined in:
- lib/antlr3/streams.rb
Overview
TokenStream further extends the abstract-ish base mixin Stream to add methods specific to navigating token sequences. Thus, it serves as an imitation of the Java interface for token-based streams, which are used by many different components in ANTLR, including parsers and tree parsers.
Token Streams
Token streams wrap a sequence of token objects produced by some token source, usually a lexer. They provide the operations required by higher-level recognizers, such as parsers and tree parsers for navigating through the sequence of tokens. Unlike simple character-based streams, such as StringStream, token-based streams have an additional level of complexity because they must manage the task of “tuning” to a specific token channel.
One of the main advantages of ANTLR-based recognition is the token channel feature, which allows you to hold on to all tokens of interest while only presenting a specific set of interesting tokens to a parser. For example, if you need to hide whitespace and comments from a parser, but hang on to them for some other purpose, you have the lexer assign the comments and whitespace to channel value HIDDEN as it creates the tokens.
When you create a token stream, you can tune it to some specific channel value. Then, all peek, look, and consume operations only yield tokens that have the same value for channel. The stream skips over any non-matching tokens in between.
The TokenStream Interface
In addition to the abstract methods and attribute methods provided by the base Stream module, TokenStream adds a number of additional method implementation requirements and attributes.
Constant Summary
Constants included from Constants
Constants::BUILT_IN_TOKEN_NAMES, Constants::DEFAULT, Constants::DOWN, Constants::EOF, Constants::EOF_TOKEN, Constants::EOR_TOKEN_TYPE, Constants::HIDDEN, Constants::INVALID, Constants::INVALID_NODE, Constants::INVALID_TOKEN, Constants::MEMO_RULE_FAILED, Constants::MEMO_RULE_UNKNOWN, Constants::MIN_TOKEN_TYPE, Constants::SKIP_TOKEN, Constants::UP
Instance Attribute Summary collapse
-
#channel ⇒ Object
the integer channel value to which the stream is “tuned”.
-
#last_marker ⇒ Object
readonly
expected to return the value of the last marker produced by a call to
stream.mark. -
#position ⇒ Object
readonly
expected to return the integer index of the stream cursor.
-
#token_source ⇒ Object
readonly
expected to return the token source object (such as a lexer) from which all tokens in the stream were retreived.
Attributes included from Stream
Instance Method Summary collapse
-
#at ⇒ Object
:method: at( i ) return the stream symbol at index
i. -
#to_s ⇒ Object
:method: to_s(start=0,stop=tokens.length-1) should take the tokens between start and stop in the sequence, extract their text and return the concatenation of all the text chunks.
Methods included from Stream
#consume, #index, #look, #mark, #peek, #release, #rewind, #seek
Instance Attribute Details
#channel ⇒ Object
the integer channel value to which the stream is “tuned”
326 327 328 |
# File 'lib/antlr3/streams.rb', line 326 def channel @channel end |
#last_marker ⇒ Object (readonly)
expected to return the value of the last marker produced by a call to stream.mark
318 319 320 |
# File 'lib/antlr3/streams.rb', line 318 def last_marker @last_marker end |
#position ⇒ Object (readonly)
expected to return the integer index of the stream cursor
322 323 324 |
# File 'lib/antlr3/streams.rb', line 322 def position @position end |
#token_source ⇒ Object (readonly)
expected to return the token source object (such as a lexer) from which all tokens in the stream were retreived
313 314 315 |
# File 'lib/antlr3/streams.rb', line 313 def token_source @token_source end |
Instance Method Details
#at ⇒ Object
:method: at( i ) return the stream symbol at index i
337 |
# File 'lib/antlr3/streams.rb', line 337 abstract :at |
#to_s ⇒ Object
:method: to_s(start=0,stop=tokens.length-1) should take the tokens between start and stop in the sequence, extract their text and return the concatenation of all the text chunks
332 |
# File 'lib/antlr3/streams.rb', line 332 abstract :to_s |