Prosty parser
Jak wspomniałem w poprzednim odcinku, że napiszę jeszcze jeden odcinek cyklu na zakończenie. Postanowiłem pokazać na przykładzie jakiegoś prostego programiku, jak wykorzystać niektóre z obiektowych cech przy tworzeniu programu.Kilkanaście lat temu napisałem krótki artykuł do Magazynu Amiga, w którym pokazałem, jak napisać prosty parser w C++ (Magazyn Amiga 09/1998). Tu zaś pomyślałem, że może przedstawię, jak napisać taki parser w języku C. Dla przypomnienia - będzie to prosty parser wyrażeń matematycznych. Dla uproszczenia nie będziemy brać pod uwagę priorytetów operatorów.
Proponuję gramatykę zdefinować w następujący sposób:
A->Liczba B B->Operator A|@gdzie A, B to obiekty, a @ to słowo puste, oznaczające koniec znaków. Parser jest bardzo prosty, nie bierze pod uwagę priorytetów działań, ma zubożoną obsługę błędów (w zasadzie niedokończoną, ale to z rozmysłem, aby móc dać Wam możliwość lepszego zapoznania się z kodem uzupełniając taką obsługę).
Ponieważ kod z założenia nie ma być przeznaczony do modułowej rozbudowy, toteż główną jego część umieściłem w jednym pliku kacparser.c. Interface przeznaczony dla użytkownika jest prosty:
- funckja parsująca, zwracająca obiekt, którego później będziemy używać
struct TKacParser *doPreParse(const char *buf);
- funkcja wypisująca jak został zinterpretowany wprowadzony ciąg znaków
void doPrintInfo(FILE *afout, struct TKacParser *aobj);
- funkcja obliczająca wartość wprowadzonego działania
double doParserEvalue(struct TKacParser *aobj);
- funkcja zwalniająca zasoby wzięte dla tego by parsować kod
void FreeParserObject(struct TKacParser *aobj);
- jako liczba zmiennoprzecinkowa,
- jako liczba całkowita,
- jako stała PI,
- bądź jako stała E.
Program obsługujemy w następujący sposób:
nazwa_programu działanie_do_wykonania
Czasami - w zależności od konsoli, może być konieczność umieszczenia argumentu w cudzysłowie.
I w sumie na tym skończyłbym ten artykuł i ten cykl.

Jeśli będziecie mieli jakieś pytania, to proszę o kontakt mailowy, albo skorzystajcie ze strony z formularzem kontaktowym. Gdy będą to ciekawe pytania, które uznam, że warto odpowiedź zamieścić na stronie, to tak uczynię. Zapraszam do czytania innych moich artykułów o programowaniu, zarówno na tej stronie, jak i w innych miejscach.
Pozdrawiam
Kaczuś
parser język C C programowanie obiektowe