TUPLE: satisfy-parser quot ;
-C: satisfy satisfy-parser ( quot -- parser )
+C: satisfy satisfy-parser
M: satisfy-parser parse ( input parser -- list )
#! A parser that succeeds if the predicate,
TUPLE: epsilon-parser ;
-C: epsilon epsilon-parser ( -- parser )
+C: epsilon epsilon-parser
M: epsilon-parser parse ( input parser -- list )
#! A parser that parses the empty string. It
TUPLE: succeed-parser result ;
-C: succeed succeed-parser ( result -- parser )
+C: succeed succeed-parser
M: succeed-parser parse ( input parser -- list )
#! A parser that always returns 'result' as a
TUPLE: fail-parser ;
-C: fail fail-parser ( -- parser )
+C: fail fail-parser
M: fail-parser parse ( input parser -- list )
#! A parser that always fails and returns
#! Return a parser that first skips all whitespace before
#! calling the original parser.
-C: sp sp-parser ( p1 -- parser )
+C: sp sp-parser
M: sp-parser parse ( input parser -- list )
#! Skip all leading whitespace from the input then call
TUPLE: just-parser p1 ;
-C: just just-parser ( p1 -- parser )
+C: just just-parser
M: just-parser parse ( input parser -- result )
#! Calls the given parser on the input removes
TUPLE: apply-parser p1 quot ;
-C: <@ apply-parser ( parser quot -- parser )
+C: <@ apply-parser
M: apply-parser parse ( input parser -- result )
#! Calls the parser on the input. For each successful
TUPLE: some-parser p1 ;
-C: some some-parser ( p1 -- parser )
+C: some some-parser
M: some-parser parse ( input parser -- result )
#! Calls the parser on the input, guarantees