pascal.js Интерпретатор, заметки

Как начать

Исходный код

См. здесь: https://github.com/it-for-free/pascal.js

Компилятор - заметки про теории

Компилятор переводит программу с исходного языка на объектный язык

Результатом работы компилятора являются:

  • Объектная программа -- программа на объектом языке
  • Листинг -- файл, где содержится исходная программа, номера строк, информация об ошибках и информация об объектной программе.
    На практике именно из листинга распечатывается фрагмент кода в сообщениях об ошибке (которые часто отображаются в консоли в разных системах разработки).

Далее рассмотрим из чего состоит компилятор (это конвеер, передающий результат работы от одного модуля к другому по цепочке):

  • Модуль ввода-вывода - подпрограмма, ответственной за разбиение текста исходной программы на символы (отдельные буквы) и за построение листинга.
  • Лексический анализатор (ЛА) - модуль, который на выходе дает отдельные слова (для формирования слова для каждого очередного символа вызывается модуль ввода-вывода), напр. ключевое слово var или скобка ( в арифметическом выражении, скажем:
    (2 + 5) * 3

    Итак: лексический анализатор разбирает программу на более крупные единицы (в сравнении с отдельными буквами модуля ввода-вывода), которые являются уже частью языка программирования, любой фрагмент, что уже может рассматриваться как минимальная логическая часть программы.

  • Синтаксический анализатор (СинА) - проверяет соответствие, того, что получено из ЛА, т.н. формальным правилам.
  • Семантический анализатор (СемА) - проверяет соответствие, того, что получено из ЛА, т.н. неформальным правилам.
  • Генератор -- получается от СинА/СемА проверенную программу и на её основе строит объектную программу,

Лексический анализатор

Лексический анализатор не просто разбивает на слова, а присваивает каждому слову специальный код, беря его из таблицы.
Код показывает что именно это за слово - литерал какого-то типа, имя переменной или напр. скобка в выражении. Сравнивать коды слов при выполнении быстрее чем, сами слова.