В настоящее время я пишу компилятор и, похоже, столкнулся с некоторыми проблемами, заставляя его выводить код, который выполняется в приличные сроки.
Краткий обзор компилятора:
7Basic - это компилятор, целью которого является компиляция кода 7Basic непосредственно в машинный код для целевой архитектуры / платформы. В настоящее время 7Basic генерирует сборку x86 с учетом исходного файла.
Проблема в том, что код сборки, сгенерированный компилятором, медленный и неэффективный .
Например, этот код ( который компилируется до этот ассемблерный код) выполняется почти в 80,47 раз дольше, чем эквивалентный код на C .
Часть проблемы заключается в том, что компилятор генерирует код, подобный следующему :
push eax
push 5000000
pop ebx
pop eax
Вместо более логичного:
mov ebx,5000000
... который выполняет то же самое.
Мой вопрос: какие методы позволяют избежать такого рода проблем? Парсер в основном использует рекурсию для анализа выражений, поэтому сгенерированный код отражает это.