diff options
Diffstat (limited to 'src/__OLD_parcom/phrase.cr')
| -rw-r--r-- | src/__OLD_parcom/phrase.cr | 33 |
1 files changed, 0 insertions, 33 deletions
diff --git a/src/__OLD_parcom/phrase.cr b/src/__OLD_parcom/phrase.cr deleted file mode 100644 index 1996fd4..0000000 --- a/src/__OLD_parcom/phrase.cr +++ /dev/null @@ -1,33 +0,0 @@ -require "./parser.cr" -require "./eof.cr" -require "./map.cr" - -module Parcom - # `Phrase` is a `Parser` that tries to parse with another parser, - # but will fail if any of the input has not been consumed. - # - # Example: - # ``` - # letter_a = Token.new('a') - # tokens = Tokens.from_string("aaa") - # one_a = Phrase(Char, Char).new(letter_a) - # result = one_a.parse(tokens) # This fails - # ``` - class Phrase(T, V) < Parser(T, V) - @p : Map(T, {V, Nil}, V) - - # Accepts the parser to parse with. - def initialize(p : Parser(T, V)) - @p = (p + EOF(T).new).map &.first - end - - # Tries to parse with the given parser, fails if there - # is any un-parsed input remaining. - def parse(tokens : Tokens(T)) : Result(T, V) - @p.parse(tokens) - rescue ex : ParserFail - raise ParserFail.new("Phrase: #{ex.message}") - end - end -end - |
