- - природна граматика або БНФ вихідної мови;
- - засоби розробки.
Як написати транслятор
Прочитавши: 4017
Існує безліч мов програмування, що володіють своїми унікальними особливостями. Але для того, щоб програма, написана на будь-якому з них, заробила, потрібно провести її трансляцію. Іноді мови програмування розробляються для власних потреб (наприклад, підтримка автоматизації у великих додатках) і тоді виникає необхідність написати транслятор.
Вам знадобиться
Інструкція
Підготуйте дані для здійснення лексичного аналізу тексту мовою оригіналу. Складіть список всіх лексем мови. Розбийте їх на категорії (ключові слова, числові і рядкові літерали, ідентифікатори, пробільні символи, знаки пунктуації, і т.д.).
Реалізуйте модуль або програму лексичного розбору. На вході вона повинна отримувати «сирий» потік даних, а на виході формувати список елементів, що містять лексеми і ідентифікатори їх типів в тій послідовності, в якій вони зустрічаються у вихідному тексте.Программа лексичного розбору може являти собою досить простий «однорівневий» сканер. Реалізація відновлення після помилок не має сенсу. Неприпустимі символи повинні оброблятися як помилки.
Підготуйте дані для здійснення синтаксичного аналізу. На основі природної граматики або БНФ вихідної мови складіть його LL1 граматику. На основі граматики даного типу складіть схему синтаксичного розбору в термінах категорій допустимих лексем і семантичних конструкцій мови.
Реалізуйте модуль або програму синтаксичного аналізу. На вході вона повинна отримувати список лексем, підготовлений на етапі лексичного розбору. Розробіть рекурсивні алгоритми перевірки синтаксису, використовуючи створену на третьому кроці схему. При необхідності реалізуйте механізми відновлення після ошібок.Добавьте в алгоритми синтаксичного аналізу функціонал побудови дерева обчислення функцій, методів класів. При правильній структурі алгоритмів розбору даний функціонал може бути впроваджений без особливих проблем. Це дозволить уникнути необхідності його реалізації у вигляді окремого модуля. Створені структури даних повинні містити списки інструкцій у вигляді «плоских» послідовностей (арифметичні вирази, розгорнуті в Постфіксний форму, придатну для обчислення на стековой машині, цикли, перетворені в комбінації послідовностей обчислювальних інструкцій і умовних або безумовних переходів, і т.д.).
Створіть модуль оптимізації, якщо це необхідно. Він повинен обробляти і перетворювати структури даних, підготовлені на попередньому кроці. Алгоритми та методи оптимізації вельми різноманітні.
Розробіть генератор коду. Обробляючи структури, підготовлені на четвертому чи п'ятому кроках, він повинен просто перетворювати послідовності абстрактних інструкцій у команди для виконання на конкретній платформі.
Створіть програму зв'язування (линкер), якщо це необхідно. Вона повинна виробляти формування результуючого виконуваного модуля, здійснюючи вибір розташування сегментів коду, обчислення адрес міток і т.д.