Мотивація

Нехай задана деяка мова, інтерпретатор визначає уявлення граматики та інтерпретатора для роботи із заданою мовою.

Мотивація

Якщо специфічний вид завдання виникає досить часто, можливо варто представляти елементи завдання як речення простою мовою мовою. Потім можна визначити інтерпретатор, який вирішує завдання, інтерпретуючи ці речення мови.

Шаблон Інтерпретатор описує, як визначити граматику для простих мов, подавати пропозиції в мові, та інтерпретувати їх. У цьому прикладі шаблон описує, як визначити граматику для регулярних виразів, як уявити певний вираз, і як його інтерпретувати.

Припустимо, що наступна граматика визначає регулярні вирази:

Символ expression – початковий символ, а literal – термінальний символ, що визначає прості слова.

Шаблон інтерпретатора використовує клас, щоб представити кожне правило граматики. Символи праворуч боку правила – змінні, поля класу. Ця граматика представляється п'ятьма класами: абстрактний клас RegularExpression і його чотири підкласи LiteralExpression, AlternationExpression, SequenceExpression і RepetitionExpression. Останні три класи визначають змінні, що обробляють вирази.

Interpret

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

Interpret

Представляє регулярний вираз

Ми можемо створювати інтерпретатор для цих регулярних виразів, визначаючи операцією Interpret для кожного підкласу RegularExpression. Interpret використовує контекст як параметр, в якому інтерпретується вираз.Контекст містить рядок введення та інформацію про те, яка частина вже була оброблена. Кожен підклас RegularExpression визначає Interpret , щоб обробити наступну частину вхідного рядка, що базується на поточному контексті. Наприклад,

  • LiteralExpression перевірить, чи відповідає введення літералу, яке він визначає,
  • AlternationExpression перевірить, чи відповідає введення будь-якої зі своїх альтернатив,
  • RepetitionExpression перевірить, чи має введення множинні копії виродження, що повторюються,