It was amazing : the full compiler was around 650 lines of code while only using Parsec as a third party library and was able to compile correctly at the first successful compilation. Compiling to LLVM (as text, I didn't used any library for code generation) using monads and Text-Lazy was also pretty pleasant.
My only deception was to be unable to use GADTs : these are awesome but so hard to use with a parser.
I mostly write my assignments in French. It just feels "strange" to me to write comments (which are just real sentences) in English when anyone which will read the thing shares my native language.
When I'm comment complex things (like some parts of this compiler), I feel it easier and more comprehensive to explain them in my mother tongue.
Anyway, I write all of my "public code" in English. The audience is different.
Re. GADTs, you can parse to an ADT then have a separate function to add the extra type information. The problem is that you want to add static information to dynamic input, so you need to handle the error cases.
Here's my toy programming language compiler written in Haskell using LLVM. It has classical Hindley-Milner type inference and a limited form of "lambda" closures using LLVM's trampoline intrinsic.
It's not in a state where the language would actually be useful for useful, and it's only a learning project for me. I tried to suggest this project as the topic of my master's thesis but my prof thought that it wasn't a good subject.
windows version? not everyone is a CS student or academic...
making language tools in windows is actually quite challenging due to the poor quality of tools. its the only thing i've ever struggled with in that area. using haskell and llvm makes it a little easier than using C and llvm but not much...
it would be nice to have a windows friendly set of instructions - setting up GHC, happy, alex etc. isn't hard, but LLVM is a pain for windows.
it would be nice if it was in C rather than Haskell too. imo its highly likely nobody wants to touch Haskell if they have a choice. then the many C tools one might want to use like flex, bison - even win-flex and win-bison are a bit rubbish and difficult to configure for use in windows...
still a very useful article - its great to see an example worked through like this, its one of the best forms of documentation imo and not enough of that around in this area...
oh sure, there is a nice mapping between parser combinators and lbnf, however most programmers have little experience of fp and don't want to touch haskell for anything. this might be unpopular, but it has the unfortunate property of being a true statement. i'm happy to be downvoted for 'trolling'
i had seen that kaleidoscope tutorial in the LLVM docs before but didn't remember it particularly or find it helpful - perhaps its the presentation but this site is much more polished than that part of the llvm docs. granted they make the explicit choice to not use lexer/parser generators but that is not as practical in c/c++ as it is with haskell and adds a lot of needless cruft imo.
> making language tools in windows is actually quite challenging due to the poor quality of tools.
This is why the tutorial doesn't use Windows. It would mostly be a tutorial about fighting to get tools installed instead of actually talking about building compilers. The total Haskell source comes out to about 500 lines of code for the whole compiler, the equivalent C would be an order of magnitude larger. It makes no sense to do what you suggest.