Pamiętnik parsera MATLABa cz.2

Pierwszy etap to przekształcenie kodu źródłowego do własnego drzewa.

Przygotowanie

Biblioteka ANTLR działa następująco:

  1.  Plik g4 przechowuje gramatykę języka, który chcesz parsować
  2. Jako jeden z stopni procesu kompilacji twojej solucji, na podstawie pliku g4 są tworzone klasy YourLanguageLexer, YourLanguageParser oraz YourLanugageBaseVisitor (można poprosić ANTLR o więcej lub mniej klas w zależności od potrzeb projektu). Klasy powstałe w wyniki produkcji ANLTR lądują w obj/Debug.
  3. Wygenerowane klasy razem z twoimi klasami razem są kompilowane do Assembly.

Cały proces można sobie ułatwić instalując rozszerzenie do Visual Studio Tools -> Extensions and Updates -> Online -> Szukać Antlr – > ANTLR Language Support.

Dostajemy w prezencie kolorowanie składni plików g4. Super.

Jeżeli korzystamy z ReSharpera, może się zdarzyć, że Visual Studio podkreśla poprawny kod i nie podpowiada nam parametrów w konstruktorach klas YourLangaugeParser i YourLanguageLexer. Jest to wynikiem, że do podpowiadania nie bierze pod uwagę plików w wygenerowanych przez ANTLR. Jest na to sposób, plugin do ReSharpera o nazwie External Code. Instalujemy przez ReSharper -> Extension Manager -> Online -> Szukać „External Code” -> External Code. Po instalacji przechodzimy do ReSharper -> Options -> Code Inspection – > External Code -> Add -> „obj/Debug”.

Wstęp do gramatyki

Trzeba odpowiedzieć sobie na pytanie jak program komputerowy jest z organizowany.

Gramatyka
Programem w MATLAB nazwiemy to każdy gramatycznie poprawny kod źródłowy. MATLAB nie posiada oznaczników początku i końca.

Blokiem nazwiemy ciąg instrukcji następujący jedna po drugiej.

Instrukcja to wykonywalna jednostka, która składa się wyrażeń. Wszystko, co powoduje jakąś akcję można nazwać instrukcją.

Wyrażenie to części składniowe instrukcji, np. (2+5), takie wyrażenie pozbawione kontekstu nie dostarcza nam żadnej informacji.

Program składa się z pojedynczego bloku, który posiada 0 lub więcej instrukcji, a każda instrukcja posiada 1 lub więcej wyrażeń.

Instrukcje mogą posiadać bloki w sobie np. If jest traktowany, jako instrukcja i posiada w sobie od 1 do dwóch bloków.

Wyrażenia mogą składać się z podwyrażeń na przykład wcześniej przykład (2+5) można rozpisać tak:

TwoPlusFive

Dalej…

W następnym odcinku zaczniemy parsować pierwszy kawek kodu. Obiecuje.