Własny język programowania. Część 2: Parser + wyrażenia = kalkulator
11.07.2010 - Maciej Piróg
![]() ![]() Część 1. Część 2. Część 3. Część 4. W drugiej części cyklu dotyczącego interpretera prostego języka programowania zajmiemy się parsowaniem, czyli przekształcaniem napisów reprezentujących wyrażenia w drzewa wyrażeń. Ponieważ umiemy już obliczać wartości wyrażeń przedstawionych jako drzewa, powstanie kalkulator (czyli interpreter języka wyrażeń arytmetycznych). Część programu, która przekształca wyrażenia (a także inne napisy, jak na przykład kod programu) w drzewa wyrażeń (lub inne struktury danych np. reprezentujące strukturę programu), nazywa się parserem. Teraz napiszemy parser, który będzie budował drzewa wyrażeń opisane w poprzedniej części, co pozwoli nam zbudować prosty kalkulator -- użytkownik będzie wpisywał wyrażenie, które będzie parsowane, a potem zostanie obliczona jego wartość. Struktura wyrażeńBy napisać parser wspomożemy się następującą obserwacją na temat wyrażeń:
Przykładowo wyrażenie (1 + 1 * 1) to "suma" jednego składnika, a mianowicie (1 + 1 * 1), który ma jeden czynnik, mianowicie (1 + 1 * 1). Czynnik ten to "suma" 1 + 1 * 1 wzięta w nawias, która składa się z dwóch składników 1 i 1 * 1. Drugi składnik ma dwa czynniki: 1 oraz 1.
Struktura parseraParser będzie klasą, która przechowuje w swoich polach analizowany tekst i wskaźnik na aktualnie "oglądany" znak. Szereg metod będzie odpowiedzialnych za parsowanie danego "poziomu" wyrażenia: oddzielne metody będą odpowiedzialne za parsowanie "sum", składników, czynników, liczb i nazw zmiennych. Po wykonaniu swojego zadania, metoda zwraca odpowiednie wyrażenie i przesuwa wskaźnik na pierwszy znak po nim. Przykładowo, metoda do parsowania składnika będzie używać metody do parsowania czynników w następujący sposób:
Ponieważ metoda parsująca ostatni czynnik ustawi wskaźnik na pierwszym znaku za ostatnim czynnikiem, w tym momencie mamy ustawiony wskaźnik na pierwszym znaku za całym składnikiem (bo ostatni znak ostatniego czynnika to ostatni znak całego składnika). Strukturę parsera opisuje następująca deklaracja:
Przyda się nam także wyjątek, który zgłosimy, jeśli parsowanie się nie powiedzie, gdy tekst zadany do analizy nie jest prawidłowym wyrażeniem:
(1 ocena) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com