Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse string into another data type in Haskell

Recently I have been trying to create in Haskell a regex interpretor. What I did was create a new data type with all possible constructors (for sequence, *, ^, intervals, etc) and then define a matcher function. It works wonders but my problem is that I have to convert the input (the String, for example "a(b*)(c|d)ef") to my data type ("Seq (Sym a) (Seq (Rep Sym b) (Seq (Or Sym c Sym d) Sym ef))"). I am having trouble with this part of the problem (I tried creating a new data type, a parsing tree, but I failed completely). Any ideas on how I could solve it?

like image 475
Iulia Muntianu Avatar asked Dec 16 '22 01:12

Iulia Muntianu


1 Answers

The canonical approach is to use a parser combinator library, such as Parsec. Parser combinator libraries (like parser generators) let you write descriptions of your grammar, yielding a parser from strings to tokens in that language.

You simply have to encode your grammar as a Parsec function.

As an example, see this previous SO question: Using Parsec to parse regular expressions

like image 99
Don Stewart Avatar answered Jan 04 '23 22:01

Don Stewart