
Комментарии 5
Я не специалист в данном вопросе, но уже за сам тот факт, что автор делает сам, а не живет, как другие ойтитишники, по принципу: “Можно… А зачем?” - плюсую ему карму.
Проект интересный, но мне кажется в современных реалиях проще и эффективнее делать под LLVM IR.
Чтобы оптимизация кода была на нем, ну и поддержка многих архитектур.
Например, генерация сложения у меня выглядит примерно так:
Эм... Я, честно признаюсь, даже завис на некоторое время, пока не сообразил. Хотя вопрос, что там происходит в generate_node остался, но мне по-прежнему лень лезть на GitHub. Всем доброго утра :)
P.s. Статье плюсик, даже при невнимательном чтении ;)
generate_node - это лишь рекурсивный вызов, который проверяет тип вершины и вызывает соответствующую generate_***-функцию. Например, если left - это тоже сложение, то generate_node вызовет generate_addition. Если left - это integer literal, то вызовется функция, которая сделает output_asm("mov [rsp - 8], ", value).
Опыт написания компилятора вручную: Часть 2