Як написати інтерпретатор


 

Щоб створити інтерпретатор, треба написати парсер вихідного коду, цикл виконання байт-коду і величезну кількість кодів стандартної бібліотеки. Це не завжди весело і просто, якщо не скористатися інструментами, які будуть генерувати компілятор і парсер для вас. З ними написати інтерпретатор мови для знаючої людини буде простіше простого. Розглянемо на прикладі написання інтерпретатора з JIT на PyPy.



Інструкція

  1. Виберіть мову для написання. В даному випадку це brainfuck. Він дуже простий і складається зі стрічки цілих чисел, які ініціалізовані нулем, і 1 покажчика на поточну комірку в стрічці. У мові всього вісім команд: «>» — переміщення покажчика в наступну комірку, «
  2. Напишіть інтерпретатор на звичайному Пітоні. Лічильник команд буде зберігати покажчики на поточну інструкцію. Перший вираз витягне інструкцію, після кілька операторів визначать, як її виконати. Опустіть реалізацію операторів «[» і «]», оскільки вони повинні поміняти лічильник команд на положення такої ж дужки.
  3. Реалізуйте клас Tape, який зберігає покажчик на поточне число і стрічку цілих чисел. Лента за необхідності буде збільшуватися. Парсити вихідний код заздалегідь, щоб безліч коментарів не читалися по одному байту. Зробіть заодно словник для дужок, щоб при необхідності можна було знайти в ньому парні дужки.
  4. Виконайте def parse (program). Ця функція повертає рядки тільки з команд і словника парних дужок.
  5. З’єднайте все, що вийшло, і ви отримаєте робочий інтерпретатор brainfuck. Запустіть інтерпретатор на Пітоні і переконайтеся в його працездатності. Це лише одиничний випадок написання інтерпретатора з використанням самого простого мови. При бажанні писати можна практично на будь-якій мові, ознайомившись з його властивостями і призначенням.