diff options
| author | Matthew Hall <hallmatthew314@gmail.com> | 2023-03-19 23:02:29 +1300 |
|---|---|---|
| committer | Matthew Hall <hallmatthew314@gmail.com> | 2023-03-19 23:02:29 +1300 |
| commit | 9734fa2d530b9496b70a388a117ea57fe5730772 (patch) | |
| tree | 78a42db1e64e5148edfa96cb2a451a17ef362485 /src/__OLD_parcom/parser.cr | |
| parent | 2ef8841e9c7a48eea0f66cfe09d8fe996f43c2b2 (diff) | |
Remove old files
Diffstat (limited to 'src/__OLD_parcom/parser.cr')
| -rw-r--r-- | src/__OLD_parcom/parser.cr | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/src/__OLD_parcom/parser.cr b/src/__OLD_parcom/parser.cr deleted file mode 100644 index ca350df..0000000 --- a/src/__OLD_parcom/parser.cr +++ /dev/null @@ -1,87 +0,0 @@ -require "../parcom.cr" - -module Parcom - # `Parser` is the base class of all parser objects and contains - # a handful of helper methods that can allow for cleaner syntax. - # - # The generic type `T` represents the type of tokens a parser will - # operate on (usually `Char`). - # The generic type `V` represents the type of value that a parser - # will return when parsing is successful. - abstract class Parser(T, V) - # Accepts a `Tokens(T)` and either retuns a `Result(T, V)`, or raises a - # `ParserFail` exception with a message providing context of where - # in the chain the parsing failed. - # - # The `V` in the returned `Result` is arbitrary, but the `Tokens(T)` in - # the returned result MUST contain the parser's input, with some tokens - # removed from the front proprtional to what was parsed. - # - # Example: - # ``` - # hello = ParsesHello.new # inherits from Parser(Char, String) - # input = Tokens.from_string("Hello world!") - # - # result = hello.parse(input) - # result.value # => "Hello" - # result.tokens # => [' ', 'w', 'o', 'r', 'l', 'd', '!'] - # - # bad_input = Tokens.from_string("Good evening world!") - # hello.parse(bad_input) # raises ParserFail - # ``` - abstract def parse(tokens : Tokens(T)) : Result(T, V) - - # Same as `#parse`, but returns `nil` instead of raising `ParserFail`. - def parse?(tokens : Tokens(T)) : Result(T, V)? - self.parse(tokens) - rescue ParserFail - return nil - end - - # Constructs an `Alt` parser with `self` and `other`. - def |(other : Parser(T, V)) : Alt(T, V) - Alt.new(self, other) - end - - # Constructs a `Plus` parser with `self` and `other`. - def +(other : Parser(T, U)) : Plus(T, V, U) forall U - Plus.new(self, other) - end - - # Constructs a `Left` parser with `self` and `other`. - def <<(other : Parser(T, U)) : Left(T, V, U) forall U - Left.new(self, other) - end - - # Constructs a `Right` parser with `self` and `other`. - def >>(other : Parser(T, U)) : Right(T, V, U) forall U - Right.new(self, other) - end - - # Constructs an `Assert` parser with `self` and the given block. - def assert(&block : V -> Bool) : Assert(T, V) - Assert.new(self, &block) - end - - # Constructs an `Assert` parser with `self` and the given proc. - def assert(f : V -> Bool) : Assert(T, V) - Assert.new(self, &f) - end - - # Constructs a `Map` parser with `self` and the given block. - def map(&block : V -> U) : Map(T, V, U) forall U - Map.new(self, &block) - end - - # Constructs a `Map` parser with `self` and the given proc. - def map(f : V -> U) : Map(T, V, U) forall U - Map.new(self, &f) - end - - # Constructs a `Recover` parser with `self` and the given `V`. - def recover(default : V) : Recover(T, V) - Recover.new(self, default) - end - end -end - |
