Pamiętnik Parsera MATLABa cz.1

Na studiach student przechodzi przez wiele przedmiotów, potrzebnych, nudnych, głupich oraz pasjonujących. Tym ostatnim był przedmiot dotyczący tworzenia kompilatorów, gdzie człowiek uzbrojony w narzędzia takie jak Lex oraz Bizon tworzy swój język kompilujący do quasi-asemblera.

Dlatego przy wybieraniu tematu pracy magisterskiej miałem jeden wymóg pozwólcie mi parsować „coś”, a będę przeszczęśliwy.
Promotor zaproponował, że parsowanie kodu wykorzystywanego przez Matlab do tworzenia diagramów będzie dobrym zalążkiem do pracy.

Matlab to program wykorzystywany do obliczeń naukowych i inżynierskich oraz do tworzenia symulacji komputerowych. Ten program jest często wykorzystywany na naszej uczelni do obliczeń macierzowych, równań, przetwarzania obrazu, oraz symulacji układów różniczkowych.

Matlab w swojej dokumentacji nie posiada spisanego dokumentu, który opisywałby gramatykę i semantykę. Jedyne, co pozostaje to tworzenie swojej gramatyki w oparciu o metodę prób i błędów.Sądzę że wykorzystanie testów jednostkowych może posłużyć, jako system szybkiego ostrzegania, gdy tworzy się gramatykę „na czuja”.

Pipeline

Działanie aplikacji/systemu będzie w założeniu wyglądać następująco:

pipeline

Kod Matlaba dostarczony na wejście będzie parsowany poprzez wykorzystaniu biblioteki ANTLR 4. Zadaniem parsera będzie dostarczenie drzewa programu, który będzie pośrednikiem pomiędzy dostarczonym kodem a wynikiem.

Wyjście będzie sporządzone na podstawie wspomnianego drzewa.

Najbardziej „kontrowersyjnym” elementem tej układanki jest tworzenie własnego drzewa INode tree zamiast wykorzystać możliwości ANTLR, który potrafi zwrócić drzewo wyprowadzeń (parse tree), które teoretycznie mogłoby zastąpić własne rozwianie. Myślę, że poświecenie wydajności oraz częściowej utraty informacji jest warte, aby uzyskać coś bardziej uniwersalnego i czegoś, czym można lepiej zarządzać podczas pisania kodu.

Technologie i narzędzia

Visual Studio oraz C# to moja broń, której nie zawaham się użyć wobec każdego napotkanego problemu. Nie inaczej będzie i tym razem. Wspomniana biblioteka ANTLR, posiada swoje korzenie z języka Java na szczęście dla mnie ANTLR został przeportowany do C#.

Na prawdę warto kupić książkę „The Definite ANTLR 4 Reference”. Informacji o wykorzystaniu tej biblioteki jest zadziwiająco mało, a najlepszą poradą, jaką znalazłem było: „Kup tę książkę.”

Dalej…

W kolejnych odcinkach będzie o wszystkich przygodach, które mnie dotknęły przy tworzeniu tego oprogramowania.