Pull to refresh

Снова всем привет. В прошлом посту я писал о том что пишу компилятор C (на Python).

Вчера я добавил функции, вот пример программы вычисления факториала с функциями:

void fac(n) {
  int f = 1;
  while (n > 1) {
    f = f * n;
    n = n - 1;
  }
}

void main() {
  fac(5);
}

Что можно заметить нового и чего нету:

  • Функция main стала обязательной

  • Не обрабатывается тип данных у аргументов (не везде)

  • Все переменные и параметры - глобальные

  • Оператора return не существует

  • Функции объявляются только с помощью void

Вот как компилятор создаёт функции:

  1. Добавляет в словарь self.funcs данные о функции

  2. Когда видит вызов функции то компилирует код функции но перед компиляцией создаёт переменные со значениями аргументов

Получается мы не заставляем виртуальную машину работать с функциями ВООБЩЕ.

Но и в этом есть свой минус: return сделать будет невозможно.

Самым сложным это сделать нормальный парсер для этого чуда.

Из-за этого я испортил код парсера. Главное работает 😅.

Всем пока.

Tags:
+2
Comments0

Articles