Why not adopt me?
NAME
Text::TokenStream::Role::Stream - role for token-stream classes
SYNOPSIS
# In some kind of parser class:
has stream => (
is => 'ro',
handles => 'Text::TokenStream::Role::Stream',
);
DESCRIPTION
This role requires and/or implements methods that provide the machinery for scanning an input string into tokens. It exists as a role so that a parser class can easily delegate those methods to a stream instance.
See Text::TokenStream.
PROVIDED METHODS
collect_all
Takes no arguments. Returns a list of all remaining tokens found in the input.
collect_upto
Takes a single argument indicating a token to match, as with Text::TokenStream::Token#matches
. Scans through the input until it finds a token that matches the argument, and returns a list of all tokens before the matching one. If no remaining token in the input matches the argument, behaves as "collect_all"
.
REQUIRED METHODS
current_position
Should take no arguments, and return the current input position.
err
Should take any number of arguments, and throw an exception that reports an error at the current position.
fill
Should take a non-negative integer argument, and fill the internal buffer with that many tokens (or as many as are available), and return true iff that succeeded.
looking_at
Should take any number of arguments for Text::TokenStream::Token#matches
, fill the internal buffer with the right number of elements (returning false if there aren't enough), and return true if each token is matched by the corresponding argument.
next
Should take no elements, and return the next token (or undef if no more elements are available), advancing the current position.
next_of
Should take an argument for Text::TokenStream::Token#matches
, ensure that there is at least one token remaining and that it matches that argument (reporting an error if not), and return that token, advancing the current position.
peek
Should take no elements, and return the next token if one exists, without advancing the current position.
skip_optional
Should take an argument for Text::TokenStream::Token#matches
, and if there's another token that matches it, advance past that token, and return true; otherwise, it should return false.
token_err
Should take a token, and any number of arguments, and throw an exception that reports an error at the position of the token.
AUTHOR
Aaron Crane, <arc@cpan.org>
COPYRIGHT
Copyright 2021 Aaron Crane.
LICENCE
This library is free software and may be distributed under the same terms as perl itself. See http://dev.perl.org/licenses/.