Как реализовать вызовы функций в интерпретируемых языках программирования? - PullRequest
0 голосов
/ 17 апреля 2019

Я создаю интерпретированный язык программирования и хочу поддерживать вызовы функций.

Я попытался реализовать это следующим образом.Когда интерпретатор встречает объявление функции:

  • , отправьте его в среду.
  • вызов функции, получите объявление функции в среде и выполните его тело.

Я не решался использовать этот подход, потому что он не линейный и, похоже, использует слишком много ресурсов.

В скомпилированных языках программирования метки и goto используются для реализации функций вызова.Он линейный и хранит только ссылку на тело функции.

Например, этот код C будет генерировать этот код сборки:

код C:

int sum (int x, int y) {
    return x + y;
}

sum(2, 3);

код сборки:

sum:
    push ebp
    mov ebp, esp
    mov eax, [ebp + 8]
    mov edx, [ebp + 12]
    add eax, edx
    pop ebp
    ret

push 3
push 2
call sum
add esp, 8

Я хотел бы реализовать подход, который напоминает подход, используемый в скомпилированных языках программирования.

...