70 likes | 297 Views
Prolog i parsery : DCG. autorzy: leisman sepuq mattiq. Informacje ogólne o parserach.
E N D
Prolog i parsery : DCG autorzy: leisman sepuq mattiq
Informacje ogólne o parserach • Parser (inaczej analizator składniowy) to program który dokonuje analizy danych wejściowych. Parsery zwykle opierają się na zmodyfikowanych algorytmach analizy języków formalnych - zmodyfikowanych choćby dlatego, by sprawdzić czy pytanie lub dany tekst jest poprawny jest zupełnie nieinteresujące w porównaniu do pytania jaką on ma strukturę. Parsery wielu języków programowania bazują na gramatykach. • Stosowane najczęściej do sprawdzania poprawności składni poleceń, plików oraz wydobywania informacji z określonych struktur. • Współcześnie najczęściej parserów nie pisze się ręcznie, ale korzysta z generatorów parserów takich jak yacc, bison, ocamlyacc lub ANTLR.
DCG – Definite Clause Grammar • Jednym z narzędzi używanych do generowania parserów jest Prolog, który tworzy je wykorzystując DCG. • DCG jest uogólnieniem gramatyk bezkontekstowych (znanych nam z Lingwistyki Matematycznej) • Gramatyka w DCG jest zestawem reguł konstruowanych przy pomocy symbolu --> • Symbole nieterminalne są zapisywane jako prologowe atomy. Reguły składają się z głowy i ciała. Głowa może być tylko symbolem nieterminalnym, natomiast ciało składa się z elementów oddzielonych przecinkami, gdzie elementem jest symbol terminalny ( umieszczony w nawiasach kwadratowych ) lub nieterminalny.
Przykład : • Gramatyka bezkontekstowa : S a S S b S S c • Ta sama gramatyka w DCG : s --> [a], s. s --> [b], s. s --> [c].
Przykład c.d. : • Po wygenerowaniu przez prolog nasza gramatyka przedstawiona jest przez następujące predykaty: s(A,B) :- 'C'(A,a,C), s(C,B). s(A,B) :- 'C'(A,b,C), s(C,B). s([c|A],A). Gdzie 'C' jest wbudowanym predykatem, który wygląda następująco 'C'([A|B],A,B). Przykładowe użycie: ?- 'C'([1,2,3],1,[2,3]). Zwróci: Yes
SWI Prolog Java • Istnieje wiele klas umożliwiających komunikację pomiędzy Prologiem, a Java. Ze względu na dostępność oraz prostotę użycia zdecydowaliśmy się na wykorzystanie pakietu JPL (dostarczonego wraz z SWI Prologiem) • Zainteresowanych odsyłamy do lektury dokumentacji JPL-a.
Co dalej ? • E-DCG (Extended-DCG) pozwala na jeszcze lepsze wykorzystanie własności gramatyk w Prologu, łatwiejsza rozbudowę programu oraz skrócenie kodu źródłowego programu. • Zainteresowanych : z przyjemnością zapraszamy