Skip to main content

Яка основна ідея патерну Interpreter?

Основна ідея патерну Interpreter (Інтерпретатор) - описати граматику простої мови (або формату даних) і реалізувати інтерпретатор, який може виконувати вирази цієї мови, перетворюючи їх на дії програми.


1. Суть

Патерн дозволяє створювати міні-мови усередині програми - набір правил, виразів і операцій, які можна читати, парсити і виконувати.

Кожне правило граматики представлене класом, що реалізує загальний інтерфейс interpret(Context). Об'єднуючи ці класи, можна будувати дерева виразів, які інтерпретуються (виконуються) динамічно.

Простіше кажучи: Interpreter перетворює текст або символічні вирази на виконуване дерево.


2. Коли використовується

  • Коли потрібно обробляти вирази за заданими правилами (формули, фільтри, скрипти, умови).
  • Коли граматика невелика і стабільна.
  • Коли потрібно дозволити користувачу задати команди або логіку у вигляді тексту.

3. Структура

  • AbstractExpression - загальний інтерфейс з методом interpret(Context).
  • TerminalExpression - елементарний вираз (число, змінна).
  • NonTerminalExpression - складений вираз (операції, комбінації).
  • Context - зберігає дані, необхідні для інтерпретації (змінні, оточення).
  • Client - будує дерево виразів і запускає інтерпретацію.

4. Приклад (Java)

Інтерпретатор простих математичних виразів:

java
interface Expression { int interpret(); } class NumberExpression implements Expression { private int number; public NumberExpression(int number) { this.number = number; } public int interpret() { return number; } } class AddExpression implements Expression { private Expression left, right; public AddExpression(Expression left, Expression right) { this.left = left; this.right = right; } public int interpret() { return left.interpret() + right.interpret(); } }

Використання:

java
Expression expr = new AddExpression( new NumberExpression(5), new AddExpression(new NumberExpression(2), new NumberExpression(3)) ); System.out.println(expr.interpret()); // 10

5. Переваги

  • Дозволяє створювати власні мови і правила, не переписуючи код.
  • Легко додавати нові типи виразів (нові класи).
  • Код виразів стає структурованим і розширюваним.

6. Недоліки

  • Швидко зростає кількість класів при складній граматиці.
  • Підходить лише для простих мов (інакше краще використовувати парсери, ANTLR тощо).

Висновок

Патерн Interpreter дозволяє програмі розуміти і виконувати вирази, написані "міні-мовою", описуючи кожне правило граматики окремим класом і створюючи виконуване дерево виразів.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.