Снова всем привет. В прошлом посту я писал о том что пишу компилятор C (на Python).
Вчера я добавил функции, вот пример программы вычисления факториала с функциями:
void fac(n) {
int f = 1;
while (n > 1) {
f = f * n;
n = n - 1;
}
}
void main() {
fac(5);
}
Что можно заметить нового и чего нету:
Функция main стала обязательной
Не обрабатывается тип данных у аргументов (не везде)
Все переменные и параметры - глобальные
Оператора return не существует
Функции объявляются только с помощью void
Вот как компилятор создаёт функции:
Добавляет в словарь self.funcs данные о функции
Когда видит вызов функции то компилирует код функции но перед компиляцией создаёт переменные со значениями аргументов
Получается мы не заставляем виртуальную машину работать с функциями ВООБЩЕ.
Но и в этом есть свой минус: return сделать будет невозможно.
Самым сложным это сделать нормальный парсер для этого чуда.
Из-за этого я испортил код парсера. Главное работает 😅.
Всем пока.