Skip to content

Latest commit

 

History

History
33 lines (20 loc) · 2.28 KB

04-pair-functions-errors.md

File metadata and controls

33 lines (20 loc) · 2.28 KB

Чекпоинт 4 (парный). Вызов функций + обработка ошибок

Дедлайн - 1 апреля 16:59

Вызов функций

Мы создали систему типов - теперь необходимо организовать механизм вызовов функций.

Продумайте механизм Frame-а для функций:

  • Набор переменных на стеке - могут лежать либо примитивные типы, либо указатели на экземпляры классов.
  • Набор параметров
  • Возвращаемое значение (завести указатель на ячейку)
  • Указатель на участок памяти, где нужно будет вызвать ret инструкцию

Напомню, что методы являются публичными, а поля приватными.

Для вызова кода необходимо найти функцию main и вызвать ее.

В итоге, мы получим работающий интерпретатор (если в нем нет ошибок компиляции)

Продумайте логику Frame-а:

  • реализуйте класс InterpreterFrame, который хранит физически значения переменных
  • реализуйте класс TranslatorFrame, который позволит хранить сдвиги относительно frame pointer

Примеры этих классов можно найти здесь: https://github.com/akhtyamovpavel/CompilersCourse/tree/master/07-irtree-build/function-mechanisms

Обработка ошибок

Мы создали интепретатор! Теперь надо указывать участок в коде, где находятся ошибки компиляции + находить более одной ошибки компиляции.

Необходимо из каждого из построенных visitor-ов выделить как можно больше ошибок компиляции. Для этого используйте ссылку на yy::location, который хранится у нас в AST еще с первого чекпоинта.