Tergantung implementasinya.
Sebagai contoh, kompiler C mungkin mempertahankan tabel simbol selama kompilasi. Ini adalah struktur data yang kaya yang memungkinkan mendorong dan meletupnya cakupan, karena setiap brace pembuka pernyataan majemuk {
berpotensi memperkenalkan ruang lingkup baru untuk variabel lokal baru. Selain menangani cakupan yang datang dan pergi, ia mencatat variabel yang dideklarasikan, dan untuk masing-masing menyertakan nama dan tipenya.
Struktur data tabel simbol ini juga mendukung pencarian informasi variabel berdasarkan nama, misalnya oleh pengenalnya, dan kompiler melakukan ini ketika ia mengikat informasi variabel yang dideklarasikan ke pengidentifikasi mentah yang dilihatnya di parse, jadi ini cukup awal saat kompilasi.
Pada titik tertentu, kompiler memberikan lokasi ke variabel. Mungkin tugas lokasi dicatat dalam struktur data tabel simbol yang sama. Compiler dapat melakukan penugasan lokasi secara langsung selama parsing, tetapi kemungkinan dapat melakukan pekerjaan yang lebih baik jika menunggu tidak hanya sampai setelah parsing, tetapi setelah optimasi umum.
Pada titik tertentu, untuk variabel lokal, kompiler menetapkan lokasi stack atau register CPU (bisa jadi lebih kompleks karena variabel sebenarnya dapat memiliki beberapa lokasi, seperti lokasi stack untuk beberapa bagian dari kode yang dihasilkan dan CPU daftar untuk bagian lain).
Akhirnya, kompiler menghasilkan kode aktual: instruksi mesin yang mereferensikan nilai-nilai variabel secara langsung oleh register CPU mereka atau lokasi stack yang ditentukan, sebagaimana diperlukan untuk mengeksekusi kode yang sedang dikompilasi. Setiap baris kode sumber mengkompilasi serangkaian instruksi kode mesinnya sendiri, sehingga instruksi yang dihasilkan tidak hanya mengkode operasi (menambah, mengurangi) tetapi juga lokasi variabel yang dirujuk.
Kode objek akhir yang keluar dari kompiler tidak lagi memiliki nama dan tipe variabel; hanya ada lokasi, lokasi tumpukan atau register CPU. Lebih lanjut tidak ada tabel lokasi, melainkan lokasi ini digunakan oleh setiap instruksi mesin mengetahui lokasi di mana nilai variabel disimpan. Tanpa melihat pengidentifikasi dalam kode runtime, setiap bit kode yang dihasilkan hanya mengetahui operasi yang harus dilakukan dan lokasi yang akan digunakan.
Ketika debugging diaktifkan selama kompilasi, kompiler akan menampilkan bentuk tabel simbol sehingga, misalnya, debuggers akan mengetahui nama-nama variabel di berbagai lokasi stack.
Beberapa bahasa lain memiliki kebutuhan untuk mencari pengidentifikasi secara dinamis saat runtime, jadi mungkin juga menyediakan beberapa bentuk tabel simbol untuk mendukung kebutuhan tersebut.
Penerjemah memiliki beragam pilihan. Mereka mungkin mempertahankan struktur data seperti tabel simbol untuk digunakan selama eksekusi (selain digunakan selama parsing), meskipun alih-alih menugaskan / melacak lokasi stack, cukup simpan nilai untuk variabel, yang terkait dengan entri variabel dalam tabel simbol struktur data.
Tabel simbol mungkin disimpan di heap daripada di stack (meskipun menggunakan stack untuk cakupan dan variabel tentu saja mungkin, dan lebih lanjut mungkin meniru stack di heap untuk mendapatkan keuntungan dari cache dengan mengemas nilai variabel dekat masing-masing). lain), jadi penerjemah mungkin menggunakan memori tumpukan untuk menyimpan nilai-nilai variabel sedangkan kompiler menggunakan lokasi tumpukan. Secara umum, juru bahasa juga tidak memiliki kebebasan untuk menggunakan register CPU sebagai penyimpanan untuk nilai-nilai variabel karena register CPU sebaliknya sibuk menjalankan garis-garis kode interpreter itu sendiri ...