Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Яка основна ідея патерну Interpreter?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Основна ідея патерну **Interpreter (Інтерпретатор)** - **описати граматику простої мови** (або формату даних) і **реалізувати інтерпретатор**, який може **виконувати вирази цієї мови**, перетворюючи їх на дії програми. **Ключове:** інтерпретатор перетворює текст або символічні вирази на виконуване дерево.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняОсновна ідея патерну **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** дозволяє програмі **розуміти і виконувати вирази, написані "міні-мовою"**, описуючи кожне правило граматики окремим класом і створюючи **виконуване дерево виразів**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.