Enum/Stream pattern matching parser library?

I’ve got a list of text tokens + metadata as structs from a custom tokeniser. I want to match patterns in that list, some of which can be expressed with Elixir pattern matching, others of which will need a custom function to test for.

Some of the rules will need to be akin to simple regular expressions: not this, optional that, no more than three of these, etc.

Is there a library that will let me express a set of rules and match against those?

I found ExSpirit from @OvermindDL1, but I couldn’t see any examples of it being used for list patterns, just text. It looks like NimbleParsec just operates on text too. Should be I looking at something else? Thanks!

Nimbleparsec is parsing context free languages and it is very fast from what I can tell.

This is a very comprehensive thread on Nimbleparsec and Exspirit: NimbleParsec - a simple and fast parser combinator for Elixir

Thanks, but unless I’m missing something, those operate on strings, not lists of structs.

Doesn’t sound like you want a parser at all but some kind of constraint satisfier/solver. Perhaps you get some inspiration from these:

1 Like

I think I probably just need to write my own combinator parser for this use case. I’m finding this video very helpful: https://www.youtube.com/watch?v=xNzoerDljjo

1 Like

I do believe that @OvermindDL1 did say ExSpirit can work on non string based streams so you may be able to make it work with structured data.

I can’t really comment on feasibility other than what he wrote here:

Strangely enough that was in response to a comment by Sasha from the video you linked, as he used the slower combine parser which wasn’t a significant factor for his use case.

1 Like