The lookahead feature
<https://docs.racket-lang.org/megaparsack/reference.html?q=megaparsack#%28def._%28%28lib._megaparsack%2Fmain..rkt%29._lookahead%2Fp%29%29>
you've
added is precisely what I was missing when I tried megaparsack, although I
was able to work around the need for it with some hacks. Excited to give it
another try!


On Sun, Jul 4, 2021 at 12:21 PM Alexis King <[email protected]> wrote:

> Addendum: the docs are now built, so you can read more at these two links:
>
>    - https://docs.racket-lang.org/megaparsack/state.html
>    -
>    
> https://docs.racket-lang.org/megaparsack/reference.html#%28part._parser-parameters%29
>
>
> On Sun, Jul 4, 2021 at 2:21 AM Alexis King <[email protected]> wrote:
>
>> Hi all,
>>
>> As some of you may know, I am the maintainer of the Megaparsack
>> <https://docs.racket-lang.org/megaparsack/index.html> package, a
>> Parsec-style parser combinator library. Though it’s mostly been in
>> maintenance mode for some time, the latest release adds a significant new
>> feature: *user-defined parser state*. This closes the main expressivity
>> gap Megaparsack has historically had relative to Parsack (though Parsack
>> continues to be more performant).
>>
>> As a quick overview to pique your interest, Megaparsack 1.4 provides a
>> new abstraction called a *parser parameter*. Parser parameters are
>> similar to ordinary Racket parameters, but their state is associated with a
>> parsing context rather than with a thread. Their interface should already
>> look familiar to Racketeers, so here is an example that uses parser
>> parameters to implement an indentation-sensitive syntax:
>>
>> (define current-indent (make-parser-parameter 0))
>>
>> (define skip-current-indent/p
>>   (do [cols <- (current-indent)]
>>       (repeat/p cols (char/p #\space))))
>>
>> (define markdown-like-list/p
>>   (do (string/p "* ")
>>       [blk <- block/p]
>>       [cols <- (current-indent)]
>>       [blks <- (parameterize/p ([current-indent (+ cols 2)])
>>                  (many/p block/p))]
>>       (pure (cons blk blks))))
>>
>> Modifications to parser parameters are automatically reverted when the
>> parser backtracks past the point of modification, which allows them to be
>> used for accumulating information during parsing even if the current parse
>> branch is tentative. To illustrate, note that this example results in 10
>> rather than 15:
>>
>> (define current-count (make-parser-parameter 0))
>>
>> (define (increment/p n)
>>   (do [count <- (current-count)]
>>       (current-count (+ count n))))
>>
>> > (parse-string
>>    (do (or/p (try/p (do (string/p "!") (increment/p 5) eof/p))
>>              (do (string/p "!!") (increment/p 10) eof/p))
>>        (current-count))
>>    "!!")
>> (success 10)
>>
>> I generally don’t post about releases to this list, but I happen to know
>> Megaparsack has at least a few active users, and this is the first major
>> update in a long while, so I figured I’d give a heads-up. If you’ve counted
>> the library out in the past for missing this feature, consider giving it
>> another look. And if you’re interested in learning more, the gory details
>> are described in the documentation, along with some additional examples (at
>> the time of this writing, pkg-build hasn’t rebuilt the docs just yet, but
>> that should be resolved with tomorrow’s daily refresh).
>>
>> Happy parsing,
>> Alexis
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/CAA8dsafQt%2BCtXPVFKuTYC1ZShC3%3DZgzNBEzfe7_bH67sYCJMCg%40mail.gmail.com
> <https://groups.google.com/d/msgid/racket-users/CAA8dsafQt%2BCtXPVFKuTYC1ZShC3%3DZgzNBEzfe7_bH67sYCJMCg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CACQBWFnh%2B4DAa%2Bdze%2BADXfKXswtjkMQqkPy0ZV3aFm_2vGrTeQ%40mail.gmail.com.

Reply via email to