aboutsummaryrefslogtreecommitdiff
path: root/src/__OLD_parcom/some.cr
diff options
context:
space:
mode:
authorMatthew Hall <hallmatthew314@gmail.com>2023-03-19 23:02:29 +1300
committerMatthew Hall <hallmatthew314@gmail.com>2023-03-19 23:02:29 +1300
commit9734fa2d530b9496b70a388a117ea57fe5730772 (patch)
tree78a42db1e64e5148edfa96cb2a451a17ef362485 /src/__OLD_parcom/some.cr
parent2ef8841e9c7a48eea0f66cfe09d8fe996f43c2b2 (diff)
Remove old files
Diffstat (limited to 'src/__OLD_parcom/some.cr')
-rw-r--r--src/__OLD_parcom/some.cr33
1 files changed, 0 insertions, 33 deletions
diff --git a/src/__OLD_parcom/some.cr b/src/__OLD_parcom/some.cr
deleted file mode 100644
index a2e3563..0000000
--- a/src/__OLD_parcom/some.cr
+++ /dev/null
@@ -1,33 +0,0 @@
-require "./parser.cr"
-require "./assert.cr"
-require "./many.cr"
-
-module Parcom
- # `Some` is a `Parser` that repeatedly tries to parse with another parser.
- # The `Some` object will collect all success values in an array, and
- # return them with the final state of the input stream. If the wrapped
- # parser ever fails or succeeds without parsing any input, the `Some`
- # object will stop attempting to parse and will return the array of
- # previous successes.
- #
- # `Some` will raise a `ParserFail` exception if the parser never succeeds
- # or consumes input. For cases where parsing should allow for 0 successes,
- # use `Many`.
- class Some(T, V) < Parser(T, Array(V))
- @p : Assert(T, Array(V))
-
- # Accepts the parser to use.
- def initialize(p : Parser(T, V))
- @p = Many.new(p).assert { |arr| !arr.empty? }
- end
-
- # Continuously parses with the wrapped parser, returns all successes.
- # Fails if there are no successes.
- def parse(tokens : Tokens(T)) : Result(T, Array(V))
- @p.parse(tokens)
- rescue ex : ParserFail
- raise ParserFail.new("Some: #{ex.message}")
- end
- end
-end
-