Programuję od wielu lat, ale jednym z zadań, które wciąż zajmuje mi wyjątkowo dużo czasu, jest określenie gramatyki parsera, a nawet po tym nadmiernym wysiłku nigdy nie jestem pewien, czy gramatyka, którą wymyśliłem, jest dobra ( przez jakąkolwiek rozsądną miarę „dobra”).
Nie oczekuję, że istnieje algorytm automatyzujący proces określania gramatyki, ale mam nadzieję, że istnieją sposoby na ustrukturyzowanie problemu, który wyeliminuje wiele domysłów i prób i błędów mojego obecnego podejścia.
Moją pierwszą myślą było przeczytanie o parserach i zrobiłem niektóre z nich, ale wszystko, co przeczytałem na ten temat, przyjmuje gramatykę jako coś konkretnego (lub na tyle trywialnego, że można ją określić przez inspekcję) i skupia się na problem z przetłumaczeniem tej gramatyki na parser. Interesuje mnie ten problem bezpośrednio przed: jak określić gramatykę w pierwszej kolejności.
Interesuje mnie przede wszystkim problem określania gramatyki, która formalnie reprezentuje zbiór konkretnych przykładów (pozytywnych i negatywnych). Różni się to od problemu projektowania nowej składni . Dziękujemy Macneilowi za wskazanie tego rozróżnienia.
Nigdy tak naprawdę nie doceniałem rozróżnienia między gramatyką a składnią, ale teraz, gdy zaczynam to rozumieć, mogłem wyostrzyć moje pierwsze wyjaśnienie, mówiąc, że przede wszystkim jestem zainteresowany problemem określenia gramatyki, która wymusi predefiniowana składnia: tak się składa, że w moim przypadku podstawą tej składni jest zwykle zbiór przykładów pozytywnych i negatywnych.
Jak określona jest gramatyka dla analizatora składni? Czy istnieje książka lub odnośnik, który jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne pomocne informacje na temat określania gramatyki dla parsera? Na jakich punktach, czytając o gramatyce parsera, powinienem się skupić?