Cześć.
Kiedyś często słyszałem stwierdzenie, że język programowania powinien być dostosowany do rowiązywanego problemu.
Wtey zawsze się z tym nie zgadzałem, bo większość problemów, które rozwiązuje to CRUDy lub źle sformułowany warunek w if
ie.
Dziś jednak przychodzę do was z niestandardowym problemem, bo chciałbym napisać parser własnego, prostego języka programowania i dlatego pytam się was Jaki jest najlepszy język do pisania parserów
. Możliwe, że w przyszłości chciałbym dopisać także interpreter i/lub kompilator.
Żeby nie było, że nic sam nie zrobiłem jest to moja trzecia próba:
- Za pierszym razem, 10 lat temu, wziąłem klasycznie C, Flex (Lex) i Bison (Yacc). Nauczyło mnie to, że C jest niesamowicie rozwlekły i potrzebuje bardziej ekspresyjnego języka programowania. Dodatkowo pisanie gramatyki LALR w dodatkowych plikach, które później są kompilowane do C, dla gramatyki języka prostszego od C jest uciążliwe.
- Za drugiem razem, 5 lat temu, wziąłem Perla. Zachwycił mnie swoją zwięzłością, tym że niepotrzebowałem Lexa tylko wystarczyła jedna funkcja, oraz tym że Yacc był dostarczany jako biblioteka, więc nie potrzebowałem żadnych zewnętrznych doinstalowywać. Niestety Perl jest językiem dynamicznie typowanym a ja nie ogarniam programowania nie wiem jakiego typu jest zmienna.
- Obecnie stwierdzam, że dalej nie rozumiem zmiennego stanu, więc dobrzy by ten język preferował niezmienność nad zmiennością.
TL;DR
Poszukuj ekspresywnego, statycznie typowanego, języka programowania ułatwiającego pisanie z niezmiennych stanem, do którego jest napisana dobra biblioteka do pisania parserów.
Na razie mam trzy typy:
- OCaml - ma dodatki YaccOCaml i LexOCaml, więc znów oznacza to pisanie gramatyki LALR w dziwnym języku domenowym
- Haskell. Najpopularniejsza jest biblioteka MegaParsec w której jest napisany np. parser języka Idris
- Rust. Najpopularniejsza jest biblioteka nom w której jest napisany np. parser języka Elm
Która najlepsza?
Jakieś inne propozycje?