Interpreter (ang. Interpreter) (wzorzec behawioralny) jest sposobem na zdefiniowanie oraz dokonanie oceny gramatyki języka interpretowanego. Wzorzec oparty jest o hierarchię wyrażeń (symboli terminalnych i nieterminalnych) i na podstawie struktury drzewa zbudowanych zasad przeprowadzana jest interpretacja wyrażenia wejściowego. W rezultacie otrzymywane jest wyrażenie wyjściowe, podejmowana jest akcja lub zmienia się stan obiektu.
Ograniczenia
W przypadku żłożonej gramatyki może powstać zbyt wiele klas (przynajmniej jedna dla każdej reguły). Takie gramatyki są trudne do zarządzania i utrzymania. Jako alternatywe należy rozważyć zastosowanie parsera.
Użycie
Wzorzec Interpreter wykorzystywany jest w celu interpretowania zdań zapisanych w pewnym języku o prostej gramatyce, które mogą przyjąć reprezentacje drzewa składniowego. Interpreter może być użyty w konwerterach notacji, przetwarzaniu języka naturalnego (wyrażenia regularne), automatach formalnych (kompilatory) czy też w logice (sprawdzanie poprawności reguł).
Implementacja
Klasy wyrażeń implementują interfejs Expression w taki sposób, aby móc zinterpretować wyrażenie wejściowe i przekstałcić je na odpowiednie wyrażenie wyjściowe. Implementacja powinna być odporna na błędny format wprowadzonego zapytania. Klasy wyrażeń mogą być symbolami terminalnymi i nieterminalnymi.
Poniższy listing przedstawia implementacje wzorca Interpreter dla koniukcji wyrażeń.
Klient tworzy reguły wykorzystując klasy wyrażeń. Następnie wprowadza dane dla których sprawdzane są reguły.
Przykład
Aplikacja GuessColor jest grą w której sprawdzane są umiejętności znajomości kolorów zapisanych heksadecymalnie. Gracz na wejściu otrzymuje informacje o kolorach w formacie szesnastkowym i przed upływem ustalonego czasu ma za zadanie odgadnąć ich reprezentacje w notacji RGB lub na odwrót (z zapisu RGB odgaduje format heksadecymalny). W celu dokonania tłumaczeń między formatami zastosowano wzorzec Interpreter.
Na podstawie wylosowanych kolorów, gracz próbuje zgadnąć ich zapis w formacie heksadecymalnym lub RGB.
Biblioteki
Przykładem realizacji wzorca Interpreter w standardowym pakiecie Java są wszystkie implementacje klasy Format jak np.: DateFormat, NumberFormat oraz klasa wyrażeń regularnych Pattern.