{"id":32909,"date":"2025-10-27T08:31:31","date_gmt":"2025-10-27T05:31:31","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/"},"modified":"2025-10-27T08:31:31","modified_gmt":"2025-10-27T05:31:31","slug":"derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/","title":{"rendered":"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.<\/p>\n<div class=\"responsive-container\">\n<p>Her g\u00fcn yazd\u0131\u011f\u0131m\u0131z kodlarda, de\u011fi\u015fkenler adeta birer bilgi kutusu gibidir. Say\u0131lar\u0131, metinleri, nesneleri ve daha bir\u00e7ok farkl\u0131 veri t\u00fcr\u00fcn\u00fc i\u00e7lerinde bar\u0131nd\u0131r\u0131rlar. Peki, siz bir de\u011fi\u015fken tan\u0131mlad\u0131\u011f\u0131n\u0131zda (\u00f6rne\u011fin, <code>int yas = 30;<\/code> gibi), bilgisayar\u0131n\u0131zdaki derleyici veya yorumlay\u0131c\u0131, bu &#8216;yas&#8217; de\u011fi\u015fkeninin ne oldu\u011funu, hangi t\u00fcrde oldu\u011funu ve en \u00f6nemlisi, bellekte nerede sakland\u0131\u011f\u0131n\u0131 nas\u0131l anlar? Bu sihirli s\u00fcreci y\u00f6neten temel yap\u0131, &#8220;Sembol Tablosu&#8221; olarak adland\u0131r\u0131l\u0131r. Bir programc\u0131 olarak, yazd\u0131\u011f\u0131m\u0131z kodun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak, sadece hatalar\u0131 ay\u0131klamakla kalmaz, ayn\u0131 zamanda daha verimli ve optimize edilmi\u015f uygulamalar geli\u015ftirmemize de olanak tan\u0131r. Derleyiciler, kodunuzu makine diline \u00e7evirirken, kar\u015f\u0131la\u015ft\u0131\u011f\u0131 her sembol (de\u011fi\u015fken, fonksiyon ad\u0131, s\u0131n\u0131f vb.) hakk\u0131nda detayl\u0131 bilgileri bu \u00f6zel tabloya kaydederler. Bu sayede, kodunuz derlenirken veya \u00e7al\u0131\u015f\u0131rken, herhangi bir sembole ihtiya\u00e7 duyuldu\u011funda, onunla ilgili t\u00fcm bilgilere an\u0131nda eri\u015febilirler. Sembol tablosu, asl\u0131nda derleme s\u00fcrecinin g\u00f6r\u00fcnmez kahramanlar\u0131ndan biridir. O olmasayd\u0131, derleyiciler hangi de\u011fi\u015fkenin hangi kapsamda oldu\u011funu, hangi t\u00fcrde veri tuttu\u011funu veya bellekte nerede yer ald\u0131\u011f\u0131n\u0131 bilemezdi. Bu da programlar\u0131n do\u011fru bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 imkans\u0131z k\u0131lard\u0131. Bu makalede, sembol tablosunun derinliklerine inecek, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, hangi bilgileri saklad\u0131\u011f\u0131n\u0131 ve derleme s\u00fcrecinin farkl\u0131 a\u015famalar\u0131nda ne gibi roller \u00fcstlendi\u011fini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Yeni ba\u015flayanlar i\u00e7in temel kavramlardan, deneyimli geli\u015ftiriciler i\u00e7in ileri d\u00fczey uygulama tekniklerine kadar geni\u015f bir yelpazeyi ele alaca\u011f\u0131z. Kodunuzun perde arkas\u0131nda nas\u0131l i\u015flendi\u011fini merak ediyorsan\u0131z, do\u011fru yerdesiniz.<\/p>\n<div class=\"uzman-ipucu\">\n    Uzman \u0130pucu: Sembol tablosunun mant\u0131\u011f\u0131n\u0131 anlamak, bellek y\u00f6netimi ve program optimizasyonu konular\u0131nda daha derin bir kavray\u0131\u015f geli\u015ftirmenizi sa\u011flar. Bu bilgi, \u00f6zellikle C\/C++ gibi d\u00fc\u015f\u00fck seviyeli dillerde hata ay\u0131klarken \u00e7ok i\u015finize yarayabilir.\n  <\/div>\n<\/div>\n<div class=\"responsive-container\">\n<h2>Temel Kavramlar: Sembol Tablosu Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>Sembol tablosu, en basit tabiriyle, derleyici veya yorumlay\u0131c\u0131n\u0131n program\u0131n\u0131zdaki t\u00fcm &#8220;semboller&#8221; hakk\u0131nda bilgi tuttu\u011fu bir veri yap\u0131s\u0131d\u0131r. Peki, bu &#8220;semboller&#8221; nelerdir? De\u011fi\u015fken adlar\u0131, fonksiyon adlar\u0131, s\u0131n\u0131f adlar\u0131, metot adlar\u0131 ve hatta sabitler gibi, program\u0131n\u0131zda benzersiz birer tan\u0131mlay\u0131c\u0131ya sahip olan her \u015fey birer sembold\u00fcr. Derleyici, bu sembolleri kodunuzda ilk kez g\u00f6rd\u00fc\u011f\u00fcnde, onlar\u0131 sembol tablosuna ekler ve bu sembolle ilgili \u00e7e\u015fitli nitelikleri (attribute) kaydeder. \u00d6rne\u011fin, bir de\u011fi\u015fken i\u00e7in t\u00fcr\u00fc (int, float, string), kapsam\u0131 (global mi, yerel mi), bellekteki adresi (veya ofseti), ve ba\u015flang\u0131\u00e7 de\u011feri gibi bilgiler sembol tablosunda yer alabilir. Bu bilgiler, derleyicinin kodu do\u011fru bir \u015fekilde anlamas\u0131, t\u00fcr uyumsuzluklar\u0131n\u0131 tespit etmesi ve nihayetinde makine koduna \u00e7evirmesi i\u00e7in hayati \u00f6neme sahiptir. Sembol tablosu, derleme s\u00fcrecinin farkl\u0131 a\u015famalar\u0131nda s\u00fcrekli olarak kullan\u0131l\u0131r. Lexical analizden sonra gelen s\u00f6zdizimsel ve anlamsal analiz a\u015famalar\u0131nda, sembol tablosu sayesinde derleyici, bir sembol\u00fcn ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131, do\u011fru yerde kullan\u0131l\u0131p kullan\u0131lmad\u0131\u011f\u0131n\u0131 ve uygun bir t\u00fcrde mi oldu\u011funu kontrol eder. Ayr\u0131ca, kod optimizasyonu ve kod \u00fcretimi s\u0131ras\u0131nda da sembol tablosundaki bellek adresi bilgileri kritik rol oynar. \u00d6rne\u011fin, bir de\u011fi\u015fkenin de\u011ferine eri\u015fmek istendi\u011finde, derleyici sembol tablosuna bakarak bu de\u011fi\u015fkenin bellekte nerede oldu\u011funu \u00f6\u011frenir ve o adrese giderek de\u011feri al\u0131r. Sembol tablosunun temel i\u015flevleri aras\u0131nda isim \u00e7\u00f6z\u00fcmleme (name resolution), kapsam y\u00f6netimi (scope management) ve t\u00fcr kontrol\u00fc (type checking) bulunur. \u0130sim \u00e7\u00f6z\u00fcmleme, derleyicinin bir isimle kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda, onunla ili\u015fkilendirilmi\u015f do\u011fru sembol\u00fc bulmas\u0131d\u0131r. Kapsam y\u00f6netimi, ayn\u0131 isme sahip birden fazla sembol oldu\u011funda (\u00f6rne\u011fin, farkl\u0131 fonksiyonlarda tan\u0131mlanm\u0131\u015f ayn\u0131 isimli yerel de\u011fi\u015fkenler), derleyicinin do\u011fru olan\u0131 ay\u0131rt etmesini sa\u011flar. T\u00fcr kontrol\u00fc ise, bir de\u011fi\u015fkene atanan de\u011ferin veya bir fonksiyona ge\u00e7irilen parametrenin beklenen t\u00fcrle uyumlu olup olmad\u0131\u011f\u0131n\u0131 kontrol etmektir. K\u0131sacas\u0131, sembol tablosu, bir program\u0131n i\u00e7 yap\u0131s\u0131n\u0131n, bile\u015fenlerinin ve ili\u015fkilerinin bir haritas\u0131d\u0131r ve derleyicinin bu haritay\u0131 kullanarak kodu hatas\u0131z ve verimli bir \u015fekilde i\u015flemesini sa\u011flar.<\/p>\n<p>Bir \u00f6rnekle somutla\u015ft\u0131ral\u0131m. Diyelim ki Python&#8217;da \u015f\u00f6yle bir kod yazd\u0131n\u0131z:<\/p>\n<p><code><\/p>\n<pre>\ndef topla(a, b):\n    sonuc = a + b\n    return sonuc\n\nx = 10\ny = 20\nz = topla(x, y)\nprint(z)\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu kodda, <code>topla<\/code>, <code>a<\/code>, <code>b<\/code>, <code>sonuc<\/code>, <code>x<\/code>, <code>y<\/code> ve <code>z<\/code> birer sembold\u00fcr. Derleyici veya yorumlay\u0131c\u0131 bu sembolleri i\u015flerken, sembol tablosuna a\u015fa\u011f\u0131daki gibi bilgiler ekleyebilir:<\/p>\n<ul>\n<li><code>topla<\/code>: Fonksiyon, global kapsam, giri\u015f parametreleri (a, b), d\u00f6n\u00fc\u015f t\u00fcr\u00fc (tamsay\u0131 olabilir).<\/li>\n<li><code>a<\/code>: De\u011fi\u015fken, <code>topla<\/code> fonksiyonunun yerel kapsam\u0131, tamsay\u0131 t\u00fcr\u00fc, bellekteki ofseti.<\/li>\n<li><code>b<\/code>: De\u011fi\u015fken, <code>topla<\/code> fonksiyonunun yerel kapsam\u0131, tamsay\u0131 t\u00fcr\u00fc, bellekteki ofseti.<\/li>\n<li><code>sonuc<\/code>: De\u011fi\u015fken, <code>topla<\/code> fonksiyonunun yerel kapsam\u0131, tamsay\u0131 t\u00fcr\u00fc, bellekteki ofseti.<\/li>\n<li><code>x<\/code>: De\u011fi\u015fken, global kapsam, tamsay\u0131 t\u00fcr\u00fc, bellekteki adresi.<\/li>\n<li><code>y<\/code>: De\u011fi\u015fken, global kapsam, tamsay\u0131 t\u00fcr\u00fc, bellekteki adresi.<\/li>\n<li><code>z<\/code>: De\u011fi\u015fken, global kapsam, tamsay\u0131 t\u00fcr\u00fc, bellekteki adresi.<\/li>\n<\/ul>\n<p>Bu tablodaki bilgiler sayesinde, derleyici <code>z = topla(x, y)<\/code> sat\u0131r\u0131n\u0131 g\u00f6rd\u00fc\u011f\u00fcnde, <code>topla<\/code>&#8216;n\u0131n bir fonksiyon oldu\u011funu, <code>x<\/code> ve <code>y<\/code>&#8216;nin tamsay\u0131 de\u011fi\u015fkenler oldu\u011funu ve <code>topla<\/code> fonksiyonunun da tamsay\u0131 bekledi\u011fini bilir. E\u011fer <code>topla<\/code>&#8216;ya bir metin de\u011fi\u015fkeni ge\u00e7irilmeye \u00e7al\u0131\u015f\u0131lsayd\u0131, sembol tablosundaki t\u00fcr bilgileri sayesinde derleyici bir t\u00fcr hatas\u0131 verebilirdi. \u0130\u015fte bu y\u00fczden sembol tablosu, programlama dillerinin i\u015fleyi\u015finde merkezi bir role sahiptir.<\/p>\n<\/div>\n<div class=\"responsive-container\">\n<h2>Derleme S\u00fcreci ve Sembol Tablosunun Rol\u00fc: Ad\u0131m Ad\u0131m \u0130nceleme<\/h2>\n<p>Derleme s\u00fcreci, bir program\u0131n kaynak kodunu makine diline \u00e7eviren karma\u015f\u0131k bir dizi ad\u0131mdan olu\u015fur. Her a\u015famada, sembol tablosu \u00f6nemli bir rol oynar, kodun do\u011fru bir \u015fekilde anla\u015f\u0131lmas\u0131n\u0131 ve d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesini sa\u011flar. Bu s\u00fcreci ad\u0131m ad\u0131m inceleyelim ve sembol tablosunun her bir noktada nas\u0131l devreye girdi\u011fini g\u00f6relim.<\/p>\n<ol>\n<li>\n<h3>Lexical Analiz (Tarama): Kelimelerin Tan\u0131nmas\u0131<\/h3>\n<p>Bu ilk a\u015famada, kaynak kod bir dizi &#8220;token&#8221; veya &#8220;belirte\u00e7&#8221;e ayr\u0131l\u0131r. Tokenlar, anahtar kelimeler (if, for, while), operat\u00f6rler (+, -, *), ayra\u00e7lar ({, }, ;), de\u011fi\u015fmezler (10, &#8220;hello&#8221;) ve tan\u0131mlay\u0131c\u0131lar (de\u011fi\u015fken adlar\u0131, fonksiyon adlar\u0131) gibi anlaml\u0131 birimlerdir. Lexical analiz\u00f6r, bir tan\u0131mlay\u0131c\u0131 (\u00f6rne\u011fin, <code>myVariable<\/code>) ile kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda, bu ismi sembol tablosuna potansiyel bir sembol olarak bildirebilir. Ancak bu a\u015famada, sembol hakk\u0131nda t\u00fcr veya kapsam gibi detayl\u0131 bilgiler hen\u00fcz bilinmez. Sadece isminin varl\u0131\u011f\u0131 kaydedilir.<\/p>\n<p><code><\/p>\n<pre>\n\/\/ C Kodu\nint sayi = 10;\n      <\/pre>\n<p><\/code><\/p>\n<p>Bu kodda &#8220;int&#8221;, &#8220;sayi&#8221;, &#8220;=&#8221;, &#8220;10&#8221; ve &#8220;;&#8221; ayr\u0131 tokenlard\u0131r. &#8220;sayi&#8221; token&#8217;\u0131 bir tan\u0131mlay\u0131c\u0131 olarak i\u015faretlenir ve sembol tablosuna eklenmek \u00fczere aday olur.<\/p>\n<\/li>\n<li>\n<h3>S\u00f6zdizimsel Analiz (Parsing): C\u00fcmle Yap\u0131s\u0131n\u0131n Kontrol\u00fc<\/h3>\n<p>Lexical analizden gelen token dizisi, dilin gramer kurallar\u0131na uygun bir yap\u0131ya sahip olup olmad\u0131\u011f\u0131 kontrol edilir. Bu a\u015famada bir ayr\u0131\u015ft\u0131rma a\u011fac\u0131 (Parse Tree) veya soyut s\u00f6zdizimi a\u011fac\u0131 (Abstract Syntax Tree &#8211; AST) olu\u015fturulur. S\u00f6zdizimsel analiz\u00f6r, sembolleri (de\u011fi\u015fken ve fonksiyon adlar\u0131 gibi) g\u00f6rmeye devam eder ve bu sembollerin dilin kurallar\u0131na g\u00f6re do\u011fru yerlerde kullan\u0131l\u0131p kullan\u0131lmad\u0131\u011f\u0131n\u0131 kontrol eder. \u00d6rne\u011fin, bir de\u011fi\u015fken tan\u0131m\u0131n\u0131n do\u011fru bir syntax&#8217;a sahip olup olmad\u0131\u011f\u0131na bakar. Bu a\u015famada sembol tablosuna yeni giri\u015fler eklenmeye ba\u015flan\u0131r ve sembollerin t\u00fcr\u00fc gibi temel \u00f6zellikler belirlenir.<\/p>\n<\/li>\n<li>\n<h3>Anlamsal Analiz: Anlam\u0131n ve Mant\u0131\u011f\u0131n Kontrol\u00fc<\/h3>\n<p>Bu, sembol tablosunun en kritik rollerinden birini oynad\u0131\u011f\u0131 a\u015famad\u0131r. Anlamsal analiz\u00f6r, program\u0131n anlaml\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Bu, t\u00fcr kontrol\u00fc (bir tamsay\u0131ya metin atand\u0131 m\u0131?), kapsam kontrol\u00fc (tan\u0131mlanmam\u0131\u015f bir de\u011fi\u015fkene eri\u015filmeye \u00e7al\u0131\u015f\u0131ld\u0131 m\u0131?) ve di\u011fer mant\u0131ksal tutarl\u0131l\u0131k kontrollerini i\u00e7erir. Sembol tablosu, bu kontrolleri ger\u00e7ekle\u015ftirmek i\u00e7in bir referans kayna\u011f\u0131 olarak kullan\u0131l\u0131r. \u00d6rne\u011fin:<\/p>\n<ul>\n<li>Bir de\u011fi\u015fken kullan\u0131ld\u0131\u011f\u0131nda, sembol tablosuna bak\u0131larak bu de\u011fi\u015fkenin daha \u00f6nce tan\u0131mlan\u0131p tan\u0131mlanmad\u0131\u011f\u0131 ve mevcut kapsamda eri\u015filebilir olup olmad\u0131\u011f\u0131 kontrol edilir.<\/li>\n<li>Bir ifade de\u011ferlendirilirken, sembol tablosundaki t\u00fcr bilgileri kullan\u0131larak t\u00fcm operasyonlar\u0131n t\u00fcr uyumlu olup olmad\u0131\u011f\u0131 denetlenir. (<code>int + string<\/code> gibi bir hatan\u0131n yakalanmas\u0131.)<\/li>\n<li>Fonksiyon \u00e7a\u011fr\u0131lar\u0131nda, sembol tablosundan fonksiyonun parametre say\u0131s\u0131 ve t\u00fcrleri al\u0131n\u0131r ve \u00e7a\u011fr\u0131da ge\u00e7irilen arg\u00fcmanlarla kar\u015f\u0131la\u015ft\u0131r\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Bu a\u015famada sembol tablosu, kapsamlar (scope) hakk\u0131nda da bilgi tutmaya ba\u015flar. \u0130\u00e7 i\u00e7e ge\u00e7mi\u015f kapsamlar i\u00e7in genellikle bir sembol tablosu y\u0131\u011f\u0131n\u0131 (stack of symbol tables) veya ba\u011flant\u0131l\u0131 listeler gibi yap\u0131lar kullan\u0131l\u0131r. Bir de\u011fi\u015fken arand\u0131\u011f\u0131nda, \u00f6nce mevcut kapsamdaki tabloda, bulunamazsa bir \u00fcst kapsamdaki tabloda aran\u0131r ve bu i\u015flem global kapsama kadar devam eder.<\/p>\n<\/li>\n<li>\n<h3>Ara Kod \u00dcretimi: Makineye Haz\u0131rl\u0131k<\/h3>\n<p>Anlamsal analizden sonra, kaynak kod genellikle \u00fc\u00e7 adresli kod (three-address code) veya P-kod gibi bir ara forma d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Bu ara kod, hedef makine kodundan ba\u011f\u0131ms\u0131zd\u0131r ancak y\u00fcksek seviyeli dil ile makine dili aras\u0131nda bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Sembol tablosu, bu a\u015famada da de\u011fi\u015fkenlerin bellek ofsetlerini veya ge\u00e7ici kay\u0131t birimlerini belirlemek i\u00e7in kullan\u0131l\u0131r. Art\u0131k derleyici, her bir sembol\u00fcn bellekte nerede yer alaca\u011f\u0131n\u0131 veya hangi register&#8217;da tutulaca\u011f\u0131n\u0131 belirlemek i\u00e7in daha somut ad\u0131mlar atmaya ba\u015flar.<\/p>\n<\/li>\n<li>\n<h3>Kod Optimizasyonu: Daha Verimli \u00c7al\u0131\u015fma<\/h3>\n<p>Ara kod \u00fczerinde \u00e7e\u015fitli optimizasyonlar uygulanarak, daha h\u0131zl\u0131 ve daha az bellek kullanan bir makine kodu \u00fcretilmeye \u00e7al\u0131\u015f\u0131l\u0131r. \u00d6rne\u011fin, \u00f6l\u00fc kod eliminasyonu (dead code elimination), d\u00f6ng\u00fc optimizasyonlar\u0131 ve kay\u0131t atamalar\u0131 gibi teknikler uygulan\u0131r. Sembol tablosu, bu optimizasyonlar s\u0131ras\u0131nda da sembollerin \u00f6zelliklerini (\u00f6rne\u011fin, bir de\u011fi\u015fkenin bir d\u00f6ng\u00fc i\u00e7inde s\u00fcrekli olarak kullan\u0131l\u0131p kullan\u0131lmad\u0131\u011f\u0131) takip etmek ve karar vermek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<\/li>\n<li>\n<h3>Hedef Kod \u00dcretimi: Son \u00c7eviri<\/h3>\n<p>Son a\u015famada, optimize edilmi\u015f ara kod, hedef makine (\u00f6rne\u011fin, x86 i\u015flemci) i\u00e7in \u00f6zel makine koduna d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Bu a\u015famada sembol tablosundaki bellek adresi bilgileri, her de\u011fi\u015fkenin veya fonksiyonun nihai bellek konumlar\u0131na kar\u015f\u0131l\u0131k gelen ger\u00e7ek makine komutlar\u0131n\u0131 olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Derleyici, sembol tablosuna bakarak <code>myVariable<\/code>&#8216;\u0131n bellekteki <code>0x1004<\/code> adresinde oldu\u011funu bilir ve bu adrese veri yazma veya okuma komutlar\u0131n\u0131 \u00fcretir. Sembol tablosu olmasayd\u0131, derleyici bu adland\u0131rmalar\u0131 asla bellekteki somut konumlara ba\u011flayamazd\u0131.<\/p>\n<\/ol>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, sembol tablosu, derleme s\u00fcrecinin her bir \u00f6nemli ad\u0131m\u0131nda merkezi bir veri yap\u0131s\u0131 olarak g\u00f6rev yapar. Kodun do\u011fru yorumlanmas\u0131ndan, potansiyel hatalar\u0131n tespit edilmesine ve nihayetinde verimli bir makine kodunun \u00fcretilmesine kadar t\u00fcm s\u00fcre\u00e7te derleyiciye rehberlik eder.<\/p>\n<\/div>\n<div class=\"responsive-container\">\n<h2>De\u011fi\u015fkenlerin Kapsam Y\u00f6netimi (Scope): Derleyici Ne Zaman Hangi De\u011fi\u015fkeni G\u00f6r\u00fcr?<\/h2>\n<p>Programlamada &#8220;kapsam&#8221; (scope) kavram\u0131, bir de\u011fi\u015fkenin veya sembol\u00fcn program\u0131n hangi k\u0131s\u0131mlar\u0131ndan eri\u015filebilir oldu\u011funu belirler. Bir program\u0131n farkl\u0131 b\u00f6lgelerinde ayn\u0131 isme sahip de\u011fi\u015fkenler tan\u0131mlamak m\u00fcmk\u00fcnd\u00fcr ve derleyicinin bu durumlarda hangi de\u011fi\u015fkenin kastedildi\u011fini do\u011fru bir \u015fekilde ay\u0131rt etmesi gerekir. \u0130\u015fte burada sembol tablosu ve kapsam y\u00f6netimi devreye girer. Kapsam y\u00f6netimi, derleyicinin do\u011fru sembol tan\u0131m\u0131n\u0131 bulmas\u0131na ve isim \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nlemesine yard\u0131mc\u0131 olur.<\/p>\n<p>Farkl\u0131 kapsam t\u00fcrleri bulunmaktad\u0131r:<\/p>\n<ul>\n<li>\n      <strong>Global Kapsam (Global Scope):<\/strong> Program\u0131n herhangi bir yerinden eri\u015filebilen de\u011fi\u015fkenlerdir. Genellikle main fonksiyonunun d\u0131\u015f\u0131nda tan\u0131mlan\u0131rlar ve program\u0131n \u00f6mr\u00fc boyunca bellekte kal\u0131rlar.\n    <\/li>\n<li>\n      <strong>Yerel Kapsam (Local Scope):<\/strong> Bir fonksiyon veya kod blo\u011fu i\u00e7inde tan\u0131mlanan de\u011fi\u015fkenlerdir. Sadece tan\u0131mland\u0131klar\u0131 fonksiyon veya blok i\u00e7inde eri\u015filebilirler ve o fonksiyon veya blok sona erdi\u011finde bellekten kald\u0131r\u0131l\u0131rlar.\n    <\/li>\n<li>\n      <strong>Blok Kapsam\u0131 (Block Scope):<\/strong> \u00d6zellikle C++, Java, JavaScript (<code>let<\/code> ve <code>const<\/code> ile) gibi dillerde, <code>if<\/code>, <code>for<\/code>, <code>while<\/code> gibi yap\u0131larla tan\u0131mlanan s\u00fcsl\u00fc parantez <code>{}<\/code> bloklar\u0131 i\u00e7inde tan\u0131mlanan de\u011fi\u015fkenlerdir. Bu de\u011fi\u015fkenler sadece tan\u0131mland\u0131klar\u0131 blok i\u00e7inde ge\u00e7erlidir.\n    <\/li>\n<\/ul>\n<p>Derleyiciler, bu farkl\u0131 kapsamlar\u0131 y\u00f6netmek i\u00e7in genellikle bir &#8220;sembol tablosu y\u0131\u011f\u0131n\u0131&#8221; (stack of symbol tables) veya ba\u011flant\u0131l\u0131 sembol tablolar\u0131 kullan\u0131r. Ana program ba\u015flad\u0131\u011f\u0131nda, global kapsam i\u00e7in bir ana sembol tablosu olu\u015fturulur. Her yeni bir fonksiyona veya bloka girildi\u011finde, o kapsam i\u00e7in yeni bir sembol tablosu olu\u015fturulur ve mevcut sembol tablosunun \u00fczerine y\u0131\u011f\u0131l\u0131r (veya \u00fcst kapsama i\u015faret eden bir ba\u011flant\u0131 ile ili\u015fkilendirilir). Bir de\u011fi\u015fken arand\u0131\u011f\u0131nda, derleyici \u00f6nce en \u00fcstteki (yani mevcut) sembol tablosuna bakar. E\u011fer de\u011fi\u015fken orada bulunamazsa, bir alt kapsama (\u00fcst kapsam tablosuna) ge\u00e7er ve bu i\u015flem de\u011fi\u015fken bulunana veya global kapsama ula\u015f\u0131lana kadar devam eder. E\u011fer global kapsamda da bulunamazsa, derleyici bir &#8220;tan\u0131mlanmam\u0131\u015f de\u011fi\u015fken&#8221; hatas\u0131 verir.<\/p>\n<p>Bir \u00f6rnekle inceleyelim:<\/p>\n<p><code><\/p>\n<pre>\n\/\/ C Kodu\nint globalDegisken = 100; \/\/ Global Kapsam\n\nvoid fonksiyonBir() {\n    int yerelDegisken = 50; \/\/ fonksiyonBir Yerel Kapsam\n    printf(\"FonksiyonBir'den Global Degisken: %d\\n\", globalDegisken);\n    printf(\"FonksiyonBir'den Yerel Degisken: %d\\n\", yerelDegisken);\n}\n\nvoid fonksiyonIki() {\n    int globalDegisken = 200; \/\/ Dikkat! fonksiyonIki'nin yerel kapsam\u0131nda yeni bir 'globalDegisken'\n    printf(\"FonksiyonIki'den Global Degisken (Yerel olan): %d\\n\", globalDegisken);\n    \/\/printf(\"FonksiyonIki'den Yerel Degisken: %d\\n\", yerelDegisken); \/\/ Hata: 'yerelDegisken' bu kapsamda yok\n}\n\nint main() {\n    int mainDegisken = 10; \/\/ main Yerel Kapsam\n    fonksiyonBir();\n    fonksiyonIki();\n    printf(\"Main'den Global Degisken: %d\\n\", globalDegisken);\n    printf(\"Main'den Main Degisken: %d\\n\", mainDegisken);\n\n    { \/\/ Yeni bir blok kapsam\u0131\n        int blokDegisken = 5;\n        printf(\"Bloktan Global Degisken: %d\\n\", globalDegisken);\n        printf(\"Bloktan Main Degisken: %d\\n\", mainDegisken);\n        printf(\"Bloktan Blok Degisken: %d\\n\", blokDegisken);\n    } \/\/ blokDegisken burada sona erer\n    \/\/ printf(\"Main'den Blok Degisken: %d\\n\", blokDegisken); \/\/ Hata: 'blokDegisken' bu kapsamda yok\n\n    return 0;\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte:<\/p>\n<ul>\n<li><code>globalDegisken<\/code>&#8216;in bir global tan\u0131m\u0131 vard\u0131r (de\u011fer 100).<\/li>\n<li><code>fonksiyonBir<\/code> \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, yeni bir yerel sembol tablosu olu\u015fturulur. Bu tabloda <code>yerelDegisken<\/code> (de\u011fer 50) bulunur. <code>globalDegisken<\/code>&#8216;i ararken, \u00f6nce kendi yerel tablosuna bakar, bulamay\u0131nca global tabloya ge\u00e7er ve 100 de\u011ferini bulur.<\/li>\n<li><code>fonksiyonIki<\/code> \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, yine yeni bir yerel sembol tablosu olu\u015fturulur. Ancak bu kez, <code>globalDegisken<\/code> ad\u0131nda yerel bir de\u011fi\u015fken tan\u0131mlan\u0131r (de\u011fer 200). Bu, globaldeki <code>globalDegisken<\/code>&#8216;i &#8220;g\u00f6lgeleme&#8221; (shadowing) olarak adland\u0131r\u0131l\u0131r. <code>fonksiyonIki<\/code> i\u00e7inden <code>globalDegisken<\/code>&#8216;e eri\u015filmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda, \u00f6nce kendi yerel tablosuna bak\u0131l\u0131r ve 200 de\u011ferine sahip yerel de\u011fi\u015fken bulunur. Globaldeki 100 de\u011feri bu kapsamda g\u00f6r\u00fcnmez olur.<\/li>\n<li><code>main<\/code> fonksiyonu i\u00e7indeki blok kapsam\u0131 da benzer \u015fekilde \u00e7al\u0131\u015f\u0131r. <code>blokDegisken<\/code> sadece o s\u00fcsl\u00fc parantezler aras\u0131nda ge\u00e7erlidir.<\/li>\n<\/ul>\n<p>Derleyicinin sembol tablosu mekanizmas\u0131, bu karma\u015f\u0131k kapsam kurallar\u0131n\u0131 etkin bir \u015fekilde y\u00f6neterek, program\u0131n tutarl\u0131 ve \u00f6ng\u00f6r\u00fclebilir bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Her sembol\u00fcn kendi kapsam\u0131yla e\u015fle\u015ftirilmesi, hatal\u0131 bellek eri\u015fimlerini ve mant\u0131k hatalar\u0131n\u0131 \u00f6nler, b\u00f6ylece daha g\u00fcvenli ve sa\u011flam kodlar yazmam\u0131za yard\u0131mc\u0131 olur.<\/p>\n<\/div>\n<div class=\"responsive-container\">\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: Fonksiyon \u00c7a\u011fr\u0131lar\u0131 ve De\u011fi\u015fken Eri\u015fimi Nas\u0131l Y\u00f6netilir?<\/h2>\n<p>Fonksiyon \u00e7a\u011fr\u0131lar\u0131, bir program\u0131n en temel yap\u0131 ta\u015flar\u0131ndan biridir. Bir fonksiyon \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, parametreler nas\u0131l aktar\u0131l\u0131r, yerel de\u011fi\u015fkenler nerede depolan\u0131r ve kontrol \u00e7a\u011fr\u0131lan fonksiyona nas\u0131l ge\u00e7er? T\u00fcm bu s\u00fcre\u00e7, i\u015fletim sistemi ve derleyici i\u015fbirli\u011fiyle &#8220;aktivasyon kay\u0131tlar\u0131&#8221; (activation records) veya &#8220;y\u0131\u011f\u0131n \u00e7er\u00e7eveleri&#8221; (stack frames) ad\u0131 verilen yap\u0131lar arac\u0131l\u0131\u011f\u0131yla y\u00f6netilir. Sembol tablosu, bu s\u00fcre\u00e7te dolayl\u0131 yoldan ancak kritik bir role sahiptir.<\/p>\n<p>Bir fonksiyon \u00e7a\u011fr\u0131s\u0131 ger\u00e7ekle\u015fti\u011finde, \u00e7a\u011fr\u0131lan fonksiyonun ihtiyac\u0131 olan bilgileri i\u00e7eren bir aktivasyon kayd\u0131, program\u0131n y\u0131\u011f\u0131n belle\u011fine (stack) itilir. Bu aktivasyon kayd\u0131 genellikle \u015funlar\u0131 i\u00e7erir:<\/p>\n<ul>\n<li>\n      <strong>D\u00f6n\u00fc\u015f Adresi:<\/strong> Fonksiyon bittikten sonra kontrol\u00fcn ana programa hangi noktadan d\u00f6nece\u011fini g\u00f6steren bellek adresi.\n    <\/li>\n<li>\n      <strong>Fonksiyon Parametreleri:<\/strong> \u00c7a\u011fr\u0131 s\u0131ras\u0131nda fonksiyona ge\u00e7irilen arg\u00fcmanlar\u0131n de\u011ferleri.\n    <\/li>\n<li>\n      <strong>Yerel De\u011fi\u015fkenler:<\/strong> Fonksiyon i\u00e7inde tan\u0131mlanan de\u011fi\u015fkenler i\u00e7in ayr\u0131lan bellek alan\u0131.\n    <\/li>\n<li>\n      <strong>Kaydedilmi\u015f Kay\u0131t Birimi De\u011ferleri:<\/strong> Fonksiyonun, \u00e7a\u011fr\u0131lmadan \u00f6nce i\u015flemci kay\u0131t birimlerinde (register) saklanan ve fonksiyonun sonunda geri y\u00fcklenmesi gereken de\u011ferler.\n    <\/li>\n<li>\n      <strong>Dinamik Ba\u011flant\u0131 (Dynamic Link):<\/strong> \u00c7a\u011f\u0131ran fonksiyonun aktivasyon kayd\u0131n\u0131n ba\u015flang\u0131\u00e7 adresini g\u00f6steren bir i\u015faret\u00e7i.\n    <\/li>\n<li>\n      <strong>Statik Ba\u011flant\u0131 (Static Link):<\/strong> \u0130\u00e7 i\u00e7e ge\u00e7mi\u015f fonksiyonlar durumunda, lexical olarak enclosing (kapsayan) fonksiyonun aktivasyon kayd\u0131na i\u015faret eden bir i\u015faret\u00e7i (daha az yayg\u0131n, ancak kapal\u0131 fonksiyonlar\u0131n eri\u015fimi i\u00e7in \u00f6nemli).\n    <\/li>\n<\/ul>\n<p>Sembol tablosu, derleme zaman\u0131nda her bir sembol\u00fcn (de\u011fi\u015fken, parametre) bellekte ne kadar yer kaplad\u0131\u011f\u0131n\u0131 ve kendi aktivasyon kayd\u0131 i\u00e7indeki ofsetini (ba\u015flang\u0131\u00e7 adresine g\u00f6re g\u00f6reli konumu) belirler. Bu ofset bilgileri, \u00e7al\u0131\u015fma zaman\u0131nda de\u011fi\u015fkenlere do\u011fru bir \u015fekilde eri\u015fmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir fonksiyon i\u00e7indeki <code>yerelDegisken<\/code>&#8216;e eri\u015fildi\u011finde, derleyici taraf\u0131ndan \u00fcretilen makine kodu, mevcut y\u0131\u011f\u0131n \u00e7er\u00e7evesinin ba\u015flang\u0131\u00e7 adresini (y\u0131\u011f\u0131n i\u015faret\u00e7isi &#8211; stack pointer) al\u0131r ve bu de\u011fi\u015fkenin sembol tablosunda belirtilen ofsetini ekleyerek ger\u00e7ek bellek adresini hesaplar.<\/p>\n<p>Bir C dilindeki basit bir \u00f6rnekle bu s\u00fcreci daha iyi anlayal\u0131m:<\/p>\n<p><code><\/p>\n<pre>\n\/\/ C Kodu\n#include <stdio.h>\n\nint carp(int a, int b) {\n    int sonuc; \/\/ yerelDegisken\n    sonuc = a * b;\n    return sonuc;\n}\n\nint main() {\n    int x = 5; \/\/ main'in yerelDegiskeni\n    int y = 10;\n    int c = carp(x, y); \/\/ carp fonksiyonu \u00e7a\u011fr\u0131l\u0131yor\n    printf(\"Carpim: %d\\n\", c);\n    return 0;\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu senaryoda:<\/p>\n<ol>\n<li>\n      <code>main<\/code> fonksiyonu ba\u015flad\u0131\u011f\u0131nda, <code>main<\/code> i\u00e7in bir aktivasyon kayd\u0131 y\u0131\u011f\u0131na itilir. <code>x<\/code>, <code>y<\/code> ve <code>c<\/code> de\u011fi\u015fkenleri bu kay\u0131tta yerel de\u011fi\u015fkenler olarak bellekte yerlerini al\u0131r. Sembol tablosu, bu de\u011fi\u015fkenlerin <code>main<\/code>&#8216;in y\u0131\u011f\u0131n \u00e7er\u00e7evesi i\u00e7indeki ofsetlerini (\u00f6rne\u011fin, <code>x<\/code> i\u00e7in SP+0, <code>y<\/code> i\u00e7in SP+4 gibi) tutar.\n    <\/li>\n<li>\n      <code>carp(x, y)<\/code> \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda:<\/p>\n<ul>\n<li><code>x<\/code> ve <code>y<\/code>&#8216;nin de\u011ferleri (5 ve 10), <code>carp<\/code> fonksiyonunun aktivasyon kayd\u0131na parametre olarak kopyalan\u0131r.<\/li>\n<li><code>carp<\/code> i\u00e7in yeni bir aktivasyon kayd\u0131 y\u0131\u011f\u0131na itilir. Bu kay\u0131t, <code>a<\/code>, <code>b<\/code> parametreleri ve <code>sonuc<\/code> yerel de\u011fi\u015fkeni i\u00e7in bellek alan\u0131 i\u00e7erir. Sembol tablosu, <code>a<\/code>&#8216;n\u0131n ilk parametre, <code>b<\/code>&#8216;nin ikinci parametre ve <code>sonuc<\/code>&#8216;un <code>carp<\/code>&#8216;\u0131n yerel de\u011fi\u015fkeni oldu\u011funu ve y\u0131\u011f\u0131n \u00e7er\u00e7evesi i\u00e7indeki ofsetlerini (\u00f6rne\u011fin, <code>a<\/code> i\u00e7in SP&#8217;+8, <code>b<\/code> i\u00e7in SP&#8217;+12, <code>sonuc<\/code> i\u00e7in SP&#8217;+0) tutar.<\/li>\n<li><code>carp<\/code> fonksiyonu \u00e7al\u0131\u015f\u0131r, <code>sonuc<\/code> de\u011fi\u015fkenine de\u011feri atar ve bu de\u011feri d\u00f6nd\u00fcr\u00fcr.<\/li>\n<\/ul>\n<\/li>\n<li>\n      <code>carp<\/code> fonksiyonu <code>return<\/code> etti\u011finde, aktivasyon kayd\u0131 y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r, bellek bo\u015falt\u0131l\u0131r ve kontrol <code>main<\/code> fonksiyonundaki d\u00f6n\u00fc\u015f adresine geri d\u00f6ner. <code>carp<\/code>&#8216;\u0131n d\u00f6nd\u00fcrd\u00fc\u011f\u00fc de\u011fer, <code>main<\/code>&#8216;deki <code>c<\/code> de\u011fi\u015fkenine atan\u0131r.\n    <\/li>\n<\/ol>\n<p>Sembol tablosunun rol\u00fc, derleme zaman\u0131nda bu ofsetleri ve t\u00fcr bilgilerini do\u011fru bir \u015fekilde kaydetmektir. \u00c7al\u0131\u015fma zaman\u0131nda ise, i\u015flemci ve i\u015fletim sistemi y\u0131\u011f\u0131n i\u015faret\u00e7isi ve temel i\u015faret\u00e7i (frame pointer) gibi kay\u0131t birimlerini kullanarak bu ofset bilgilerini ger\u00e7ek fiziksel bellek adreslerine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu sayede, ayn\u0131 isimde farkl\u0131 fonksiyonlarda yer alan de\u011fi\u015fkenler birbirine kar\u0131\u015fmaz ve her fonksiyon kendi yerel bellek alan\u0131nda g\u00fcvenle \u00e7al\u0131\u015fabilir. Sembol tablosu, bellek d\u00fczeninin ve \u00e7al\u0131\u015fma zaman\u0131 davran\u0131\u015f\u0131n\u0131n temelini olu\u015fturan bu soyutlamay\u0131 somut bellek adreslerine ba\u011flayan k\u0131lavuzdur.<\/p>\n<\/div>\n<div class=\"responsive-container\">\n<h2>Sembol Tablosu Uygulama Teknikleri: Veri Yap\u0131lar\u0131 ve Optimizasyonlar<\/h2>\n<p>Sembol tablosu, derleyicinin en s\u0131k eri\u015fti\u011fi veri yap\u0131lar\u0131ndan biridir. Bu nedenle, sembol tablosunun verimli bir \u015fekilde uygulanmas\u0131, derleyicinin genel performans\u0131 i\u00e7in kritik \u00f6neme sahiptir. Sembol tablosunu uygulamak i\u00e7in kullan\u0131labilecek \u00e7e\u015fitli veri yap\u0131lar\u0131 ve optimizasyon teknikleri bulunmaktad\u0131r. Her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 vard\u0131r.<\/p>\n<h3>Sembol Tablosu i\u00e7in Pop\u00fcler Veri Yap\u0131lar\u0131:<\/h3>\n<ol>\n<li>\n<h4>Hash Tablolar\u0131 (Hash Tables):<\/h4>\n<p>Hash tablolar\u0131, sembol tablosu uygulamalar\u0131nda en yayg\u0131n ve genellikle en verimli se\u00e7enektir. Bir sembol\u00fcn ad\u0131n\u0131 (string) bir say\u0131sal indekse d\u00f6n\u00fc\u015ft\u00fcren bir hash fonksiyonu kullan\u0131r. Bu indeks, sembol\u00fcn veri yap\u0131s\u0131 i\u00e7inde nerede sakland\u0131\u011f\u0131n\u0131 belirler. \u0130yi tasarlanm\u0131\u015f bir hash fonksiyonu ve uygun \u00e7arp\u0131\u015fma \u00e7\u00f6zme stratejileri ile (\u00f6rne\u011fin, zincirleme veya a\u00e7\u0131k adresleme), arama, ekleme ve silme i\u015flemleri ortalama O(1) sabit zamanda ger\u00e7ekle\u015ftirilebilir. Bu, \u00f6zellikle binlerce veya on binlerce sembol i\u00e7eren b\u00fcy\u00fck programlar i\u00e7in kritik bir avantajd\u0131r.<\/p>\n<p>Avantajlar\u0131: Y\u00fcksek performans, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmelerinde.<\/p>\n<p>Dezavantajlar\u0131: Hash fonksiyonunun kalitesi performans\u0131 do\u011frudan etkiler, \u00e7arp\u0131\u015fma y\u00f6netimi karma\u015f\u0131k olabilir, bellek kullan\u0131m\u0131 k\u00f6t\u00fc hash fonksiyonlar\u0131 veya a\u015f\u0131r\u0131 doluluk durumunda verimsizle\u015febilir.<\/p>\n<\/li>\n<li>\n<h4>Ba\u011flant\u0131l\u0131 Listeler (Linked Lists):<\/h4>\n<p>Sembol tablosunu uygulamak i\u00e7in en basit yakla\u015f\u0131mlardan biridir. Her sembol, ad\u0131n\u0131, t\u00fcr\u00fcn\u00fc, kapsam\u0131n\u0131 ve di\u011fer niteliklerini i\u00e7eren bir d\u00fc\u011f\u00fcm olarak bir ba\u011flant\u0131l\u0131 listeye eklenir. Bir sembol arand\u0131\u011f\u0131nda, liste ba\u015f\u0131ndan sonuna kadar tek tek taran\u0131r. \u0130\u00e7 i\u00e7e ge\u00e7mi\u015f kapsamlar\u0131 y\u00f6netmek i\u00e7in, her kapsam\u0131n kendi ba\u011flant\u0131l\u0131 listesi olabilir ve bu listeler bir y\u0131\u011f\u0131n yap\u0131s\u0131nda tutulabilir.<\/p>\n<p>Avantajlar\u0131: Uygulamas\u0131 kolay, dinamik boyutland\u0131rma. K\u00fc\u00e7\u00fck programlar i\u00e7in yeterli olabilir.<\/p>\n<p>Dezavantajlar\u0131: Arama s\u00fcresi sembol say\u0131s\u0131 ile do\u011fru orant\u0131l\u0131d\u0131r (O(N)). B\u00fcy\u00fck programlar i\u00e7in \u00e7ok yava\u015f kal\u0131r.<\/p>\n<\/li>\n<li>\n<h4>\u0130kili Arama A\u011fa\u00e7lar\u0131 (Binary Search Trees &#8211; BST) \/ Dengeleli BST&#8217;ler (Balanced BSTs &#8211; AVL, Red-Black Trees):<\/h4>\n<p>Sembolleri alfabetik s\u0131raya g\u00f6re d\u00fczenleyerek depolarlar. Bu sayede arama, ekleme ve silme i\u015flemleri ortalama O(log N) s\u00fcrede ger\u00e7ekle\u015fir. Dengeleli a\u011fa\u00e7lar, a\u011fac\u0131n dengede kalmas\u0131n\u0131 sa\u011flayarak en k\u00f6t\u00fc durum performans\u0131n\u0131 da O(log N) olarak garanti eder.<\/p>\n<p>Avantajlar\u0131: S\u0131ral\u0131 arama (alfabetik olarak listeleme) m\u00fcmk\u00fcn, ba\u011flant\u0131l\u0131 listelere g\u00f6re daha iyi performans.<\/p>\n<p>Dezavantajlar\u0131: Hash tablolardan daha yava\u015f, uygulanmas\u0131 daha karma\u015f\u0131k (\u00f6zellikle dengelemeli a\u011fa\u00e7lar).<\/p>\n<\/li>\n<li>\n<h4>Arama A\u011fa\u00e7lar\u0131 (Tries veya Prefix Trees):<\/h4>\n<p>\u00d6zellikle sembol adlar\u0131n\u0131n prefix (\u00f6n ek) aramalar\u0131 gerekti\u011finde veya sembol adlar\u0131n\u0131n bir k\u0131sm\u0131 payla\u015f\u0131ld\u0131\u011f\u0131nda (\u00f6rne\u011fin, <code>variable1<\/code>, <code>variable2<\/code>), trieler etkili olabilir. Her d\u00fc\u011f\u00fcm bir karakteri temsil eder ve yollar sembol adlar\u0131n\u0131 olu\u015fturur. Arama s\u00fcresi, sembol ad\u0131n\u0131n uzunlu\u011funa ba\u011fl\u0131d\u0131r, sembol say\u0131s\u0131na de\u011fil (O(L) burada L, sembol ad\u0131n\u0131n uzunlu\u011fudur).<\/p>\n<p>Avantajlar\u0131: Prefix aramalar\u0131 \u00e7ok h\u0131zl\u0131, kelime tamamlama i\u00e7in ideal.<\/p>\n<p>Dezavantajlar\u0131: Bellek kullan\u0131m\u0131 y\u00fcksek olabilir, her karakter i\u00e7in ayr\u0131 d\u00fc\u011f\u00fcm gerekti\u011finden.<\/p>\n<\/li>\n<\/ol>\n<h3>Kapsam Y\u00f6netimi Optimizasyonlar\u0131:<\/h3>\n<p>\u00c7oklu kapsamlar\u0131 (scope) y\u00f6netmek i\u00e7in genellikle &#8220;scope y\u0131\u011f\u0131n\u0131&#8221; yakla\u015f\u0131m\u0131 kullan\u0131l\u0131r. Her yeni kapsam i\u00e7in (fonksiyon, blok) yeni bir sembol tablosu olu\u015fturulur ve y\u0131\u011f\u0131na eklenir. Bir sembol arand\u0131\u011f\u0131nda, arama en \u00fcstteki (mevcut) kapsam tablosundan ba\u015flar ve \u00fcst kapsamlara do\u011fru ilerler. Kapsam sona erdi\u011finde, ilgili sembol tablosu y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r.<\/p>\n<p><code><\/p>\n<pre>\n\/\/ Sembol tablosu y\u0131\u011f\u0131n\u0131 yap\u0131s\u0131 (pseudo-kod)\nclass SymbolTableStack {\n    List<HashTable> scopes; \/\/ Her kapsam i\u00e7in bir hash tablosu\n\n    void enterScope() {\n        scopes.add(new HashTable()); \/\/ Yeni kapsam i\u00e7in yeni tablo\n    }\n\n    void exitScope() {\n        scopes.removeLast(); \/\/ Kapsamdan \u00e7\u0131k\u0131\u015f\n    }\n\n    void insert(Symbol s) {\n        scopes.last().put(s.name, s); \/\/ Mevcut kapsama sembol ekle\n    }\n\n    Symbol lookup(String name) {\n        \/\/ En i\u00e7 kapsamdan ba\u015flayarak d\u0131\u015fa do\u011fru ara\n        for (int i = scopes.size() - 1; i >= 0; i--) {\n            Symbol s = scopes.get(i).get(name);\n            if (s != null) {\n                return s;\n            }\n        }\n        return null; \/\/ Bulunamad\u0131\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m, kapsam y\u00f6netimini hem mant\u0131ksal olarak do\u011fru hem de performans a\u00e7\u0131s\u0131ndan y\u00f6netilebilir k\u0131lar. Modern derleyiciler genellikle hash tablolar\u0131n\u0131 kapsam y\u0131\u011f\u0131n\u0131 ile birle\u015ftirerek, h\u0131zl\u0131 arama s\u00fcreleri ve esnek kapsam y\u00f6netimi sa\u011flarlar.<\/p>\n<\/div>\n<div class=\"responsive-container\">\n<h2>Modern Derleyicilerde Sembol Y\u00f6netimi: JIT ve Dinamik Diller<\/h2>\n<p>Geleneksel olarak, C veya C++ gibi dillerin derleyicileri, sembol tablosunu derleme zaman\u0131nda olu\u015fturur ve kullan\u0131r. T\u00fcm t\u00fcrler, kapsamlar ve bellek d\u00fczenleri derleme a\u015famas\u0131nda kesin olarak belirlenir. Ancak modern programlama d\u00fcnyas\u0131, Just-In-Time (JIT) derleyicileri ve dinamik olarak tiplendirilmi\u015f dillerle bu paradigmada \u00f6nemli de\u011fi\u015fiklikler getirmi\u015ftir. Bu dillerde sembol y\u00f6netimi, geleneksel yakla\u015f\u0131mlardan farkl\u0131, daha esnek ve \u00e7al\u0131\u015fma zaman\u0131na (runtime) odakl\u0131 bir yap\u0131ya b\u00fcr\u00fcn\u00fcr.<\/p>\n<h3>JIT Derleyiciler ve Sembol Y\u00f6netimi:<\/h3>\n<p>Java (JVM), C# (.NET CLR) ve JavaScript (V8 motoru gibi) gibi diller, genellikle bir ara dile (bytecode) derlenir ve bu ara kod, program \u00e7al\u0131\u015fma zaman\u0131nda (Just-In-Time) makine koduna \u00e7evrilir. JIT derleyiciler, kodun s\u0131k kullan\u0131lan k\u0131s\u0131mlar\u0131n\u0131 belirler ve bunlar\u0131 \u00e7al\u0131\u015fma an\u0131nda daha performansl\u0131 makine koduna \u00e7evirir. Bu s\u00fcre\u00e7te de sembol tablolar\u0131 kullan\u0131l\u0131r, ancak geleneksel derleyicilerdeki kadar statik de\u011fildir.<\/p>\n<ul>\n<li>\n      <strong>Bytecode Sembol Tablolar\u0131:<\/strong> \u0130lk derleme a\u015famas\u0131nda (\u00f6rne\u011fin, Java kaynak kodundan .class dosyas\u0131na derleme), bir sembol tablosu olu\u015fturulur ve bytecode i\u00e7inde saklan\u0131r. Bu tablo, s\u0131n\u0131f adlar\u0131n\u0131, metot adlar\u0131n\u0131, alan adlar\u0131n\u0131 ve bunlar\u0131n t\u00fcrlerini i\u00e7erir. Ancak bellek adresleri gibi bilgiler genellikle bu a\u015famada belirlenmez, \u00e7\u00fcnk\u00fc bunlar JIT derlemesi s\u0131ras\u0131nda veya \u00e7al\u0131\u015fma zaman\u0131nda dinamik olarak atan\u0131r.\n    <\/li>\n<li>\n      <strong>\u00c7al\u0131\u015fma Zaman\u0131 Sembol \u00c7\u00f6z\u00fcmlemesi:<\/strong> JIT derleyici, bytecode&#8217;u makine koduna \u00e7evirirken, bu bytecode sembol tablosunu kullanarak sembolleri \u00e7\u00f6zer. \u00d6rne\u011fin, bir metodun \u00e7a\u011fr\u0131lmas\u0131nda, JIT derleyici metodun adresini dinamik olarak bulur. Bu, \u00f6zellikle sanal metot \u00e7a\u011fr\u0131lar\u0131 (virtual method calls) i\u00e7in ge\u00e7erlidir; do\u011fru metodun \u00e7al\u0131\u015fma zaman\u0131nda polimorfik olarak belirlenmesi gerekir.\n    <\/li>\n<li>\n      <strong>Dinamik Kapsam ve JIT:<\/strong> Baz\u0131 JIT derleyicileri, daha da ileri giderek, kodun belirli bir \u00e7al\u0131\u015fma an\u0131ndaki davran\u0131\u015f\u0131na g\u00f6re optimizasyonlar yapar. \u00d6rne\u011fin, bir d\u00f6ng\u00fc i\u00e7indeki de\u011fi\u015fkenin tipinin her zaman ayn\u0131 kald\u0131\u011f\u0131n\u0131 fark ederse, o b\u00f6lgeyi daha h\u0131zl\u0131 \u00e7al\u0131\u015facak \u015fekilde optimize edebilir. Bu t\u00fcr &#8220;profil tabanl\u0131 optimizasyonlar&#8221; i\u00e7in, \u00e7al\u0131\u015fma zaman\u0131nda toplanan sembol bilgileri de kullan\u0131labilir.\n    <\/li>\n<\/ul>\n<h3>Dinamik Dillerde Sembol Y\u00f6netimi:<\/h3>\n<p>Python, Ruby, JavaScript gibi dinamik olarak tiplendirilmi\u015f dillerde de\u011fi\u015fkenlerin t\u00fcrleri derleme zaman\u0131nda de\u011fil, \u00e7al\u0131\u015fma zaman\u0131nda belirlenir. Bu, sembol tablolar\u0131n\u0131n do\u011fas\u0131n\u0131 k\u00f6kten de\u011fi\u015ftirir.<\/p>\n<ul>\n<li>\n      <strong>Runtime Sembol Tablolar\u0131:<\/strong> Bu dillerde, sembol tablolar\u0131 \u00e7al\u0131\u015fma zaman\u0131nda dinamik olarak g\u00fcncellenir ve kullan\u0131l\u0131r. Bir de\u011fi\u015fken tan\u0131mland\u0131\u011f\u0131nda veya de\u011feri de\u011fi\u015fti\u011finde, sembol tablosundaki ilgili giri\u015f g\u00fcncellenir.\n    <\/li>\n<li>\n      <strong>T\u00fcr Kontrol\u00fcn\u00fcn \u00c7al\u0131\u015fma Zaman\u0131na Kaymas\u0131:<\/strong> Geleneksel derleyiciler t\u00fcr hatalar\u0131n\u0131 derleme zaman\u0131nda yakalarken, dinamik dillerde bu kontroller \u00e7al\u0131\u015fma zaman\u0131nda yap\u0131l\u0131r. Bir de\u011fi\u015fkenin t\u00fcr\u00fcne ba\u011fl\u0131 bir i\u015flem yap\u0131lmak istendi\u011finde (\u00f6rne\u011fin, bir metot \u00e7a\u011fr\u0131s\u0131), yorumlay\u0131c\u0131 veya JIT derleyici o anki t\u00fcr\u00fc kontrol eder. Bu durum, sembol tablosunun her zaman en g\u00fcncel t\u00fcr bilgisini saklamas\u0131n\u0131 gerektirir.\n    <\/li>\n<li>\n      <strong>Dinamik Kapsam ve Kapan\u0131\u015flar (Closures):<\/strong> Dinamik diller genellikle kapan\u0131\u015flar\u0131 (closure) destekler. Kapan\u0131\u015flar, tan\u0131mland\u0131klar\u0131 ortamdaki de\u011fi\u015fkenlere referans tutabilen fonksiyonlard\u0131r, hatta bu ortamdan \u00e7\u0131k\u0131lm\u0131\u015f olsa bile. Sembol y\u00f6netimi, bu kapan\u0131\u015flar\u0131n d\u0131\u015f kapsamdaki de\u011fi\u015fkenlere do\u011fru bir \u015fekilde eri\u015fmesini sa\u011flayacak karma\u015f\u0131k mekanizmalar (\u00f6rne\u011fin, statik ba\u011flant\u0131lar veya kapsama zincirleri) i\u00e7ermelidir. Sembol tablolar\u0131 bu yap\u0131y\u0131 da destekleyecek \u015fekilde geni\u015fletilir.\n    <\/li>\n<li>\n      <strong>Nesne Tabanl\u0131 Sembol Y\u00f6netimi:<\/strong> Dinamik dillerde her \u015feyin bir nesne oldu\u011fu bir ortamda, nesnelerin kendi i\u00e7 sembol tablolar\u0131 (properties, metotlar) olabilir. Bir nesnenin bir \u00f6zelli\u011fine eri\u015fildi\u011finde, bu nesnenin i\u00e7 sembol tablosu aranarak ilgili \u00f6zellik veya metot bulunur.\n    <\/li>\n<\/ul>\n<p>\u00d6rne\u011fin, Python&#8217;da bir de\u011fi\u015fkeni tan\u0131mlad\u0131\u011f\u0131n\u0131zda, o de\u011fi\u015fkenin t\u00fcr\u00fc de\u011feri atanana kadar bilinmez. Sembol tablosu, de\u011fi\u015fkenin ad\u0131n\u0131 ve ba\u011fl\u0131 oldu\u011fu kapsam\u0131 bilir, ancak t\u00fcr bilgisi, de\u011fi\u015fkenin \u00e7al\u0131\u015fma zaman\u0131nda ald\u0131\u011f\u0131 de\u011fere g\u00f6re de\u011fi\u015fir. Bu, JIT ve dinamik dillerde sembol tablolar\u0131n\u0131n daha soyut, daha esnek ve \u00e7al\u0131\u015fma zaman\u0131na daha entegre bir yap\u0131ya sahip oldu\u011funu g\u00f6sterir.<\/p>\n<p>Mobil uyumlu HTML&#8217;den bahsetmi\u015ftik. Web teknolojileri de dinamik dillerin ve JIT&#8217;in etkile\u015fimine g\u00fczel bir \u00f6rnektir. Bir web sayfas\u0131n\u0131n HTML yap\u0131s\u0131, CSS ile farkl\u0131 ekran boyutlar\u0131na uyum sa\u011flayacak \u015fekilde tasarlanabilir. \u00d6rne\u011fin, bir blog yaz\u0131s\u0131n\u0131n bu ana kapsay\u0131c\u0131 div&#8217;i (<code>responsive-container<\/code>) gibi yap\u0131sal elemanlar, CSS media query&#8217;leri kullan\u0131larak farkl\u0131 geni\u015fliklerde farkl\u0131 \u015fekillerde g\u00f6r\u00fcnt\u00fclenebilir. Bu, asl\u0131nda bir t\u00fcr dinamik &#8220;layout&#8221; y\u00f6netiminin derleme (taray\u0131c\u0131 taraf\u0131ndan sayfa y\u00fcklenirken) ve \u00e7al\u0131\u015fma zaman\u0131 (kullan\u0131c\u0131n\u0131n penceresini yeniden boyutland\u0131rmas\u0131) kar\u0131\u015f\u0131m\u0131d\u0131r, t\u0131pk\u0131 JIT ve dinamik dillerin sembolleri ve kodu y\u00f6netme \u015fekli gibi bir esneklik sunar. HTML yap\u0131n\u0131z\u0131n bu esnekli\u011fi desteklemesi, t\u0131pk\u0131 derleyicinin esnek sembol tablosu yap\u0131s\u0131yla dinamik dilleri y\u00f6netmesi gibi temel bir \u00f6neme sahiptir.<\/p>\n<\/div>\n<div class=\"responsive-container\">\n<h2>Sonu\u00e7: Sembol Tablosu Olmadan Kodlamak M\u00fcmk\u00fcn m\u00fc?<\/h2>\n<p>Bu makale boyunca g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, sembol tablosu, modern programlama dillerinin ve derleyicilerinin temel ta\u015flar\u0131ndan biridir. Kodunuzdaki her bir de\u011fi\u015fkenin, fonksiyonun veya s\u0131n\u0131f\u0131n ad\u0131ndan, t\u00fcr\u00fcne, kapsam\u0131na ve bellekteki yerine kadar t\u00fcm kritik bilgiler bu gizemli yap\u0131da saklan\u0131r. O olmadan derleyici, yazd\u0131\u011f\u0131n\u0131z kodun ne anlama geldi\u011fini, hangi de\u011fi\u015fkenin nerede oldu\u011funu veya bir hatan\u0131n nerede yap\u0131ld\u0131\u011f\u0131n\u0131 bilemezdi. Sembol tablosu, program\u0131n mant\u0131ksal yap\u0131s\u0131n\u0131 fiziksel bellekteki kar\u015f\u0131l\u0131\u011f\u0131na ba\u011flayan bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Derleyicinin lexical analizden hedef kod \u00fcretimine kadar her a\u015famas\u0131nda aktif rol oynar, kapsam y\u00f6netimini m\u00fcmk\u00fcn k\u0131lar ve t\u00fcr g\u00fcvenli\u011fini sa\u011flar. JIT derleyicileri ve dinamik diller gibi modern yakla\u015f\u0131mlarda bile, sembol y\u00f6netimi, \u00e7al\u0131\u015fma zaman\u0131 dinamizmini destekleyecek \u015fekilde evrilerek varl\u0131\u011f\u0131n\u0131 s\u00fcrd\u00fcrmektedir. K\u0131sacas\u0131, evet, sembol tablosu olmadan modern bir programlama dili veya derleyici hayal etmek neredeyse imkans\u0131zd\u0131r. O, yazd\u0131\u011f\u0131m\u0131z kodun bilgisayar taraf\u0131ndan anla\u015f\u0131lmas\u0131n\u0131 sa\u011flayan temel bir soyutlama ve organizasyon arac\u0131d\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n<h4>Sembol tablosu sadece derleyicilerde mi kullan\u0131l\u0131r?<\/h4>\n<p>Hay\u0131r, yorumlay\u0131c\u0131lar (interpreter) da sembol tablolar\u0131n\u0131n benzer versiyonlar\u0131n\u0131 kullan\u0131r. Yorumlay\u0131c\u0131lar, kodu sat\u0131r sat\u0131r \u00e7al\u0131\u015ft\u0131r\u0131rken de\u011fi\u015fkenlerin ve fonksiyonlar\u0131n bilgilerini \u00e7al\u0131\u015fma zaman\u0131 sembol tablolar\u0131nda tutarlar. JIT derleyicileri ise hem derleme hem de \u00e7al\u0131\u015fma zaman\u0131nda sembol tablolar\u0131ndan faydalan\u0131r.<\/p>\n<\/li>\n<li>\n<h4>De\u011fi\u015fkenin t\u00fcr\u00fc sembol tablosunda saklan\u0131r m\u0131?<\/h4>\n<p>Evet, genellikle saklan\u0131r. C, C++ gibi statik tipli dillerde de\u011fi\u015fkenin t\u00fcr\u00fc derleme zaman\u0131nda belirlenir ve sembol tablosuna kaydedilir. Python, JavaScript gibi dinamik tipli dillerde ise de\u011fi\u015fkenin t\u00fcr\u00fc \u00e7al\u0131\u015fma zaman\u0131nda de\u011fi\u015febilir, bu nedenle sembol tablosu en g\u00fcncel t\u00fcr bilgisini (veya t\u00fcr\u00fc dinamik olarak belirleme mekanizmas\u0131n\u0131) i\u00e7erir.<\/p>\n<\/li>\n<li>\n<h4>Ayn\u0131 isimde iki de\u011fi\u015fken olabilir mi?<\/h4>\n<p>Farkl\u0131 kapsamlar i\u00e7inde ayn\u0131 isimde de\u011fi\u015fkenler olabilir. \u00d6rne\u011fin, bir global de\u011fi\u015fken ile bir fonksiyon i\u00e7indeki yerel de\u011fi\u015fken ayn\u0131 ada sahip olabilir. Sembol tablosu ve kapsam y\u00f6netimi sayesinde derleyici, hangi kapsamda hangi de\u011fi\u015fkenin kastedildi\u011fini do\u011fru bir \u015fekilde ay\u0131rt edebilir.<\/p>\n<\/li>\n<li>\n<h4>Sembol tablosu ne zaman temizlenir?<\/h4>\n<p>Genellikle bir kapsamdan \u00e7\u0131k\u0131ld\u0131\u011f\u0131nda (\u00f6rne\u011fin, bir fonksiyon veya kod blo\u011fu sona erdi\u011finde), o kapsama ait sembol tablosu veya sembol giri\u015fleri temizlenir veya eri\u015filemez hale gelir. Global kapsamdaki sembol tablosu ise program\u0131n sonuna kadar varl\u0131\u011f\u0131n\u0131 s\u00fcrd\u00fcr\u00fcr.<\/p>\n<\/li>\n<li>\n<h4>JIT derleyicileri sembol tablosu kullan\u0131r m\u0131?<\/h4>\n<p>Evet, JIT derleyicileri de sembol tablolar\u0131n\u0131 kullan\u0131r. Genellikle, kaynak koddan ara dile (bytecode) \u00e7evrilirken bir sembol tablosu olu\u015fturulur. JIT derleyici bu ara kodu makine koduna \u00e7evirirken, bu tablodaki bilgileri (metot adlar\u0131, alan adlar\u0131, t\u00fcrler) kullanarak dinamik olarak bellek adreslerini \u00e7\u00f6zer ve kodu optimize eder.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu,&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32909","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi<\/title>\n<meta name=\"description\" content=\"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi\" \/>\n<meta property=\"og:description\" content=\"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-27T05:31:31+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi\",\"datePublished\":\"2025-10-27T05:31:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\"},\"wordCount\":5203,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\",\"name\":\"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-27T05:31:31+00:00\",\"description\":\"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi","description":"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi","og_description":"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-27T05:31:31+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi","datePublished":"2025-10-27T05:31:31+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/"},"wordCount":5203,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/","name":"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-27T05:31:31+00:00","description":"Derleyiciler, kodunuzdaki de\u011fi\u015fkenleri verimli bir \u015fekilde bulmak i\u00e7in sembol tablolar\u0131n\u0131 kullan\u0131r. Bu rehber, yazd\u0131\u011f\u0131n\u0131z kodun de\u011fi\u015fkenlerinin nas\u0131l bulundu\u011funu, temel kavramlardan ileri optimizasyonlara kadar karma\u015f\u0131k s\u00fcre\u00e7leri anla\u015f\u0131l\u0131r k\u0131larak a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/derleyici-degiskenleri-nasil-bulur-sembol-tablosu-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Derleyici De\u011fi\u015fkenleri Nas\u0131l Bulur? Sembol Tablosu Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32909"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32909\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}