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.
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:
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.
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ę.”