(Z góry przepraszam, jeśli dział jest nieodpowiedni i proszę o przeniesienie do odpowiedniego)
pieczarek napisał(a):
Niemniej nikt dzisiaj już nie pisze sam parserów... (chyba, że ktoś jest poważnie niedouczony, lub musi zastosować specyficzne kruczki optymalizacyjne). Obecnie wykorzystuje się generatory parserów, które na podstawie definicji, generują kod parsera. Popularne to Yacc,/BISON czy lex/flex dla języka C.
Yacc o ile wiem jest LALR(1); flexa nie znam, ale jeśli wierzyć cioci Wiki, to jest on wręcz do języków regularnych?
W ogóle - proszę mnie poprawić, jeśli się mylę - tego rodzaju generatory parserów zazwyczaj są tylko do języków LALR(1). Czy to oznacza, że języki programowania zazwyczaj są nie bardziej skomplikowane, niż LALR(1)?
Pamiętam, że kilka lat temu na uczelni należało zaprojektować język programowania i napisać do niego interpreter. No i przeoczyłem, że mój język nie był LALR(1), więc natknąłem się na problemy z yaccem. Przez chwilę myślałem, żeby samemu napisać parser do mojego języka, ale w końcu zrezygnowałem i doprowadziłem go do LALR(1), chociaż odbyło się to kosztem zrobienia z niego jeszcze większego brzydactwa. Więc ograniczyłem się do LALR(1) nie bez pewnego żalu.
Jak to jest z tymi językami? Są języki nie mieszczące się w LALR(1)? Czy zazwyczaj raczej się uznaje, że jeśli gramatyka nie jest LALR(1), to jest to smell i próbuje się za wszelką cenę doprowadzić to jednak do LALR(1)?