aboutsummaryrefslogtreecommitdiff
path: root/src/__OLD_parcom/any_token.cr
blob: 1f65bfcd398111721413ff4e2a24e1dbaa348b2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
require "./parser.cr"

module Parcom
  # `AnyToken` is a `Parser` that consumes exactly one token from
  # the input stream and returns it.
  # It fails if the input stream is empty.
  class AnyToken(T) < Parser(T, T)
    # Parses the first token in the input, fails if the input is empty.
    def parse(tokens : Tokens(T)) : Result(T, T)
      if tokens.empty?
        raise ParserFail.new("AnyToken: input was empty")
      else
        Result.new(tokens[1..], tokens[0])
      end
    end
  end
end