{"id":33983,"date":"2025-11-09T16:01:21","date_gmt":"2025-11-09T13:01:21","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/"},"modified":"2025-11-09T16:01:21","modified_gmt":"2025-11-09T13:01:21","slug":"terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/","title":{"rendered":"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<p>Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.<\/p>\n<p>G\u00fcndelik i\u015f ak\u0131\u015flar\u0131m\u0131zda s\u0131k\u00e7a ba\u015fvurdu\u011fumuz terminal hesap makineleri, genellikle basit aritmetik i\u015flemlerle s\u0131n\u0131rl\u0131d\u0131r. Toplama, \u00e7\u0131karma, \u00e7arpma ve b\u00f6lme gibi temel fonksiyonlar elbette \u00f6nemlidir; ancak \u00e7o\u011fu zaman yetersiz kal\u0131r. Ger\u00e7ek d\u00fcnyadaki problem \u00e7\u00f6zme senaryolar\u0131, sadece say\u0131larla de\u011fil, ayn\u0131 zamanda mant\u0131ksal ko\u015fullarla, de\u011fi\u015fkenlerle ve karma\u015f\u0131k ifade zincirleriyle de u\u011fra\u015fmay\u0131 gerektirir. &#8220;E\u011fer bir \u00fcr\u00fcn\u00fcn sto\u011fu belirli bir seviyenin alt\u0131ndaysa VE talep y\u00fcksekse, sipari\u015f ver&#8221; gibi kararlar\u0131 bir terminal hesap makinesine nas\u0131l emanet edebiliriz?<\/p>\n<p>\u0130\u015fte tam da bu noktada, Axion gibi &#8220;mant\u0131k i\u015fleten&#8221; bir terminal hesap makinesine ihtiya\u00e7 duyuyoruz. Axion, klasik say\u0131sal hesaplamalar\u0131n \u00f6tesine ge\u00e7erek, programlama dillerine \u00f6zg\u00fc mant\u0131ksal yap\u0131lar\u0131, de\u011fi\u015fken tan\u0131mlamalar\u0131n\u0131 ve hatta basit fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131 terminal ortam\u0131na ta\u015f\u0131may\u0131 hedefler. Bu sayede kullan\u0131c\u0131lar, sadece <code>2 + 2<\/code> gibi basit i\u015flemleri yapmakla kalmaz, ayn\u0131 zamanda <code>IF (x > 10 AND y < 5) THEN print(\"Ko\u015ful Sa\u011fland\u0131\") ELSE print(\"Ko\u015ful Sa\u011flanmad\u0131\")<\/code> gibi ifadeleri do\u011frudan komut sat\u0131r\u0131nda de\u011ferlendirebilirler. Bu, terminal deneyimini zenginle\u015ftiren ve \u00f6zellikle geli\u015ftiriciler, veri analistleri veya sistem y\u00f6neticileri i\u00e7in inan\u0131lmaz derecede pratik bir ara\u00e7 haline gelir. Peki, b\u00f6yle bir arac\u0131 nas\u0131l hayata ge\u00e7irebiliriz? Bu makale, Axion'\u0131n temel bile\u015fenlerini ad\u0131m ad\u0131m a\u00e7\u0131klayacak ve kendi mant\u0131k i\u015fleten hesap makinenizi in\u015fa etmeniz i\u00e7in gerekli t\u00fcm bilgileri sunacakt\u0131r. Haz\u0131rsan\u0131z, say\u0131lar\u0131n ve mant\u0131\u011f\u0131n d\u00fcnyas\u0131n\u0131 birle\u015ftiren bu heyecan verici yolculu\u011fa ba\u015flayal\u0131m.<\/p>\n<h2>Axion Nedir ve Geleneksel Hesap Makinelerinden Fark\u0131 Nelerdir?<\/h2>\n<p>Axion, ad\u0131n\u0131 \"aksiyom\" kelimesinden alarak, temel prensiplere dayal\u0131 ve mant\u0131k odakl\u0131 bir yakla\u015f\u0131mla tasarlanm\u0131\u015f bir terminal hesap makinesi projesidir. Geleneksel terminal hesap makineleri genellikle tek seferlik, do\u011frudan yorumlanan matematiksel ifadeler \u00fczerinde \u00e7al\u0131\u015f\u0131rken, Axion \u00e7ok daha fazlas\u0131n\u0131 vaat eder. Axion'\u0131 anlamak i\u00e7in, bir programlama dilinin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131n temel prensiplerine bakmam\u0131z gerekir: Lexer, Parser, Soyut S\u00f6zdizimi A\u011fac\u0131 (AST) ve Yorumlay\u0131c\u0131 (Interpreter). Axion, bu bile\u015fenleri kullanarak, yaln\u0131zca aritmetik i\u015flemleri de\u011fil, ayn\u0131 zamanda ko\u015fullu ifadeler, mant\u0131ksal operat\u00f6rler, de\u011fi\u015fken atamalar\u0131 ve hatta kullan\u0131c\u0131 tan\u0131ml\u0131 fonksiyonlar gibi daha geli\u015fmi\u015f yap\u0131lar\u0131 da i\u015fleyebilir.<\/p>\n<p>Peki, geleneksel bir hesap makinesi ile Axion aras\u0131ndaki temel farklar nelerdir? \u0130\u015fte bir kar\u015f\u0131la\u015ft\u0131rma:<\/p>\n<table border=\"1\">\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Geleneksel Terminal Hesap Makinesi<\/th>\n<th>Axion (Mant\u0131k \u0130\u015fleten Hesap Makinesi)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0130\u015flem Tipi<\/td>\n<td>Temel aritmetik (toplama, \u00e7\u0131karma, \u00e7arpma, b\u00f6lme, mod alma)<\/td>\n<td>Aritmetik i\u015flemler, mant\u0131ksal operat\u00f6rler (AND, OR, NOT), kar\u015f\u0131la\u015ft\u0131rma operat\u00f6rleri (>, <, ==), ko\u015fullu ifadeler (IF\/THEN\/ELSE), de\u011fi\u015fken atama, basit fonksiyon \u00e7a\u011fr\u0131lar\u0131.<\/td>\n<\/tr>\n<tr>\n<td>\u0130fade Karma\u015f\u0131kl\u0131\u011f\u0131<\/td>\n<td>Basit tek sat\u0131rl\u0131k ifadeler (\u00f6r: <code>5 * (3 + 2)<\/code>)<\/td>\n<td>\u00c7ok sat\u0131rl\u0131, i\u00e7 i\u00e7e ge\u00e7mi\u015f, mant\u0131ksal ak\u0131\u015f\u0131 olan karma\u015f\u0131k ifadeler.<\/td>\n<\/tr>\n<tr>\n<td>Bellek\/De\u011fi\u015fken Deste\u011fi<\/td>\n<td>Genellikle s\u0131n\u0131rl\u0131 veya hi\u00e7 yok (bazen \"ans\" gibi son sonu\u00e7 de\u011fi\u015fkenleri)<\/td>\n<td>Kullan\u0131c\u0131 tan\u0131ml\u0131 de\u011fi\u015fkenler, kapsam y\u00f6netimi.<\/td>\n<\/tr>\n<tr>\n<td>Programatik Ak\u0131\u015f Kontrol\u00fc<\/td>\n<td>Yok<\/td>\n<td>IF\/THEN\/ELSE gibi ko\u015fullu dallanma.<\/td>\n<\/tr>\n<tr>\n<td>Uygulama Alan\u0131<\/td>\n<td>H\u0131zl\u0131 matematiksel hesaplamalar<\/td>\n<td>H\u0131zl\u0131 kararlar, basit otomasyon betikleri, veri ko\u015fullar\u0131n\u0131 test etme, karma\u015f\u0131k form\u00fcllerin an\u0131nda de\u011ferlendirilmesi.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu kar\u015f\u0131la\u015ft\u0131rma da g\u00f6sterdi\u011fi \u00fczere, Axion sadece bir say\u0131 i\u015flemcisi olmaktan \u00e7ok, mini bir programlama ortam\u0131 i\u015flevi g\u00f6r\u00fcr. Bu, kullan\u0131c\u0131lar\u0131n daha \u00f6nce programlama dili yazmak zorunda kalacaklar\u0131 bir\u00e7ok senaryoyu do\u011frudan terminalde, h\u0131zl\u0131 ve etkili bir \u015fekilde \u00e7\u00f6zmelerini sa\u011flar. Bu yetenek, Axion'\u0131 \u00f6zellikle geli\u015ftirme, test etme veya sistem y\u00f6netimi gibi alanlarda paha bi\u00e7ilmez bir ara\u00e7 haline getirir. \u015eimdi, Axion'\u0131n bu geli\u015fmi\u015f yeteneklerini nas\u0131l kazand\u0131\u011f\u0131na, yani kalbinde yatan temel bile\u015fenlere daha yak\u0131ndan bakal\u0131m.<\/p>\n<h3>Axion'\u0131n Kalbi: Lexer ve Parser Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Herhangi bir programlama dili veya Axion gibi mant\u0131k i\u015fleten bir ara\u00e7, kullan\u0131c\u0131n\u0131n girdi\u011fi metin tabanl\u0131 komutlar\u0131 anlayabilmek i\u00e7in iki temel ad\u0131mdan ge\u00e7er: tokenla\u015ft\u0131rma (lexing) ve ayr\u0131\u015ft\u0131rma (parsing). Bu iki ad\u0131m, girilen karma\u015f\u0131k ifadelerin bilgisayar taraf\u0131ndan i\u015flenebilir bir yap\u0131ya d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesini sa\u011flar. Bu s\u00fcreci, bir insan dilini anlamaya benzetebiliriz: \u00f6nce kelimeleri tan\u0131r\u0131z (lexer), sonra bu kelimelerin c\u00fcmle i\u00e7indeki gramer kurallar\u0131na g\u00f6re anlaml\u0131 bir yap\u0131 olu\u015fturup olu\u015fturmad\u0131\u011f\u0131na bakar\u0131z (parser).<\/p>\n<h3>Tokenla\u015ft\u0131rma Sanat\u0131: Lexer Nedir ve Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Lexer, di\u011fer ad\u0131yla \"taray\u0131c\u0131\" veya \"tokenla\u015ft\u0131r\u0131c\u0131\", Axion'a girdi olarak verilen ham metni (\u00f6rne\u011fin, <code>IF (x > 10) THEN y = 5 ELSE y = 0<\/code>) al\u0131p, bunu anlaml\u0131 par\u00e7ac\u0131klara, yani \"token\"lara ay\u0131r\u0131r. Her bir token, dilin en k\u00fc\u00e7\u00fck anlaml\u0131 birimidir. \u00d6rne\u011fin, <code>IF<\/code> bir anahtar kelime token'\u0131, <code>x<\/code> bir tan\u0131mlay\u0131c\u0131 token'\u0131, <code>><\/code> bir operat\u00f6r token'\u0131, <code>10<\/code> bir say\u0131 token'\u0131, <code>=<\/code> bir atama operat\u00f6r\u00fc token'\u0131 ve <code>;<\/code> bir ifade sonland\u0131rma token'\u0131 olabilir. Lexer'\u0131n g\u00f6revi, bo\u015fluklar\u0131 ve yorum sat\u0131rlar\u0131n\u0131 (e\u011fer varsa) g\u00f6z ard\u0131 ederek, bu token'lar\u0131 do\u011fru tip ve de\u011ferle belirlemektir. Bu i\u015flem genellikle d\u00fczenli ifadeler (regular expressions) veya durum makineleri (state machines) kullan\u0131larak yap\u0131l\u0131r.<\/p>\n<p>Bir Lexer olu\u015ftururken dikkat etmemiz gereken baz\u0131 temel token tipleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Anahtar Kelimeler:<\/strong> <code>IF<\/code>, <code>THEN<\/code>, <code>ELSE<\/code>, <code>AND<\/code>, <code>OR<\/code>, <code>NOT<\/code> gibi dile \u00f6zg\u00fc kelimeler.<\/li>\n<li><strong>Tan\u0131mlay\u0131c\u0131lar:<\/strong> De\u011fi\u015fken isimleri (<code>x<\/code>, <code>sayi<\/code>, <code>urun_kodu<\/code>).<\/li>\n<li><strong>Literaller:<\/strong> Say\u0131lar (<code>10<\/code>, <code>3.14<\/code>), metinler (<code>\"Merhaba\"<\/code>), boolean de\u011ferler (<code>TRUE<\/code>, <code>FALSE<\/code>).<\/li>\n<li><strong>Operat\u00f6rler:<\/strong> Aritmetik (<code>+<\/code>, <code>-<\/code>, <code>*<\/code>, <code>\/<\/code>), kar\u015f\u0131la\u015ft\u0131rma (<code>><\/code>, <code><<\/code>, <code>==<\/code>, <code>!=<\/code>), atama (<code>=<\/code>).<\/li>\n<li><strong>Ayra\u00e7lar:<\/strong> Parantezler (<code>(<\/code>, <code>)<\/code>), k\u00fcme parantezleri (<code>{<\/code>, <code>}<\/code>), virg\u00fcller (<code>,<\/code>).<\/li>\n<\/ul>\n<p>Basit bir Python (veya JavaScript) benzeri Lexer \u00f6rne\u011fi \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code>\nclass Token:\n    def __init__(self, type, value=None):\n        self.type = type\n        self.value = value\n\n    def __repr__(self):\n        return f\"Token({self.type}, {self.value})\"\n\nclass Lexer:\n    def __init__(self, text):\n        self.text = text\n        self.pos = 0\n        self.current_char = self.text[self.pos] if self.text else None\n\n    def advance(self):\n        self.pos += 1\n        self.current_char = self.text[self.pos] if self.pos < len(self.text) else None\n\n    def skip_whitespace(self):\n        while self.current_char is not None and self.current_char.isspace():\n            self.advance()\n\n    def integer(self):\n        result = ''\n        while self.current_char is not None and self.current_char.isdigit():\n            result += self.current_char\n            self.advance()\n        return int(result)\n\n    def _id(self): # Tan\u0131mlay\u0131c\u0131lar ve Anahtar Kelimeler\n        result = ''\n        while self.current_char is not None and (self.current_char.isalnum() or self.current_char == '_'):\n            result += self.current_char\n            self.advance()\n        KEYWORDS = {'IF': 'IF', 'THEN': 'THEN', 'ELSE': 'ELSE', 'AND': 'AND', 'OR': 'OR', 'NOT': 'NOT'}\n        token_type = KEYWORDS.get(result.upper(), 'ID')\n        return Token(token_type, result)\n\n    def get_next_token(self):\n        while self.current_char is not None:\n            if self.current_char.isspace():\n                self.skip_whitespace()\n                continue\n            if self.current_char.isdigit():\n                return Token('NUMBER', self.integer())\n            if self.current_char.isalpha() or self.current_char == '_':\n                return self._id()\n            if self.current_char == '+': return Token('PLUS', self.current_char)\n            if self.current_char == '-': return Token('MINUS', self.current_char)\n            # ... di\u011fer operat\u00f6rler ve ayra\u00e7lar\n            self.advance() # Son olarak karakteri atlayal\u0131m\n            return Token('EOF', None) # End of File\n\n# Kullan\u0131m \u00f6rne\u011fi:\n# lexer = Lexer(\"IF (sayi > 10) THEN sonuc = 5\")\n# tokens = []\n# while True:\n#     token = lexer.get_next_token()\n#     if token.type == 'EOF':\n#         break\n#     tokens.append(token)\n# print(tokens)\n    <\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Lexer olu\u015ftururken hata y\u00f6netimini ba\u015flang\u0131\u00e7tan itibaren d\u00fc\u015f\u00fcn\u00fcn. Tan\u0131nmayan bir karakterle kar\u015f\u0131la\u015f\u0131ld\u0131\u011f\u0131nda anlaml\u0131 bir hata mesaj\u0131 d\u00f6nd\u00fcrmek, geli\u015ftirme s\u00fcrecinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r. Bu, kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan da kritik \u00f6neme sahiptir.<\/div>\n<h3>S\u00f6zdizimini Anlamak: Parser ve Soyut S\u00f6zdizimi A\u011fac\u0131 (AST) \u0130n\u015fas\u0131<\/h3>\n<p>Lexer'dan gelen token dizisi, dilbilgisi kurallar\u0131na g\u00f6re anlaml\u0131 bir yap\u0131 olu\u015fturmak i\u00e7in Parser'a (ayr\u0131\u015ft\u0131r\u0131c\u0131ya) g\u00f6nderilir. Parser'\u0131n ana g\u00f6revi, token dizisini al\u0131p bir Soyut S\u00f6zdizimi A\u011fac\u0131 (AST - Abstract Syntax Tree) olu\u015fturmakt\u0131r. AST, kodun hiyerar\u015fik ve anlamsal yap\u0131s\u0131n\u0131 temsil eden bir veri yap\u0131s\u0131d\u0131r. Bu a\u011fa\u00e7, ifadenin nas\u0131l yorumlanaca\u011f\u0131n\u0131 ve hangi s\u0131rayla i\u015flenece\u011fini a\u00e7\u0131k\u00e7a g\u00f6sterir. \u00d6rne\u011fin, <code>2 + 3 * 4<\/code> gibi bir ifade, \u00e7arpma i\u015fleminin toplama i\u015fleminden \u00f6nce yap\u0131lmas\u0131 gerekti\u011fini g\u00f6steren bir AST'ye d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/p>\n<p>Parser olu\u015ftururken genellikle Recursive Descent (\u00d6zyinelemeli \u0130ni\u015f) veya Pratt Parser gibi teknikler kullan\u0131l\u0131r. Bu teknikler, operat\u00f6r \u00f6nceli\u011fi (\u00e7arpma ve b\u00f6lme toplama ve \u00e7\u0131karmadan \u00f6nce gelir) ve parantezlerin kullan\u0131m\u0131 gibi dilbilgisi kurallar\u0131n\u0131 uygulamak i\u00e7in \u00f6nemlidir. Her bir dilbilgisi kural\u0131 (\u00f6rne\u011fin, bir ifade, bir terim, bir fakt\u00f6r) i\u00e7in ayr\u0131 bir fonksiyon tan\u0131mlan\u0131r ve bu fonksiyonlar birbirlerini \u00e7a\u011f\u0131rarak AST'yi ad\u0131m ad\u0131m in\u015fa eder.<\/p>\n<p>\u00d6rne\u011fin, <code>IF (ko\u015ful) THEN ifade1 ELSE ifade2<\/code> gibi bir ifade i\u00e7in AST'nin k\u00f6k\u00fc bir \"IfStatement\" d\u00fc\u011f\u00fcm\u00fc olabilir. Bu d\u00fc\u011f\u00fcm\u00fcn \u00fc\u00e7 \u00e7ocu\u011fu olurdu: \"Condition\" d\u00fc\u011f\u00fcm\u00fc (i\u00e7inde <code>ko\u015ful<\/code> ifadesinin AST'si), \"ThenBranch\" d\u00fc\u011f\u00fcm\u00fc (i\u00e7inde <code>ifade1<\/code>'in AST'si) ve \"ElseBranch\" d\u00fc\u011f\u00fcm\u00fc (i\u00e7inde <code>ifade2<\/code>'nin AST'si). Bu yap\u0131, yorumlay\u0131c\u0131n\u0131n (interpreter) kodu ad\u0131m ad\u0131m takip etmesini ve do\u011fru mant\u0131\u011f\u0131 uygulamas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Basit bir parser iskeleti, tokenlar\u0131 t\u00fcketen ve AST d\u00fc\u011f\u00fcmleri \u00fcreten fonksiyonlardan olu\u015fur:<\/p>\n<pre><code>\nclass ASTNode:\n    pass\n\nclass NumberNode(ASTNode):\n    def __init__(self, token):\n        self.token = token\n        self.value = token.value\n\nclass BinaryOpNode(ASTNode):\n    def __init__(self, left, op, right):\n        self.left = left\n        self.op = op\n        self.right = right\n\nclass VarAssignNode(ASTNode):\n    def __init__(self, var_name, value):\n        self.var_name = var_name\n        self.value = value\n\nclass IfStatementNode(ASTNode):\n    def __init__(self, condition, then_branch, else_branch=None):\n        self.condition = condition\n        self.then_branch = then_branch\n        self.else_branch = else_branch\n\nclass Parser:\n    def __init__(self, lexer):\n        self.lexer = lexer\n        self.current_token = self.lexer.get_next_token()\n\n    def eat(self, token_type):\n        if self.current_token.type == token_type:\n            self.current_token = self.lexer.get_next_token()\n        else:\n            raise Exception(f\"S\u00f6zdizimi Hatas\u0131: Beklenmeyen token {self.current_token.type}\")\n\n    def factor(self): # Say\u0131lar veya parantezli ifadeler\n        token = self.current_token\n        if token.type == 'NUMBER':\n            self.eat('NUMBER')\n            return NumberNode(token)\n        elif token.type == 'LPAREN': # (\n            self.eat('LPAREN')\n            node = self.expr()\n            self.eat('RPAREN') # )\n            return node\n        elif token.type == 'ID': # De\u011fi\u015fken veya fonksiyon\n            name = token.value\n            self.eat('ID')\n            return VarNode(name) # Varsayal\u0131m basit\u00e7e bir de\u011fi\u015fken d\u00fc\u011f\u00fcm\u00fc d\u00f6nd\u00fcr\u00fcyoruz\n\n    def term(self): # \u00c7arpma \/ B\u00f6lme i\u015flemleri\n        node = self.factor()\n        while self.current_token.type in ('MUL', 'DIV'):\n            token = self.current_token\n            if token.type == 'MUL': self.eat('MUL')\n            elif token.type == 'DIV': self.eat('DIV')\n            node = BinaryOpNode(node, token, self.factor())\n        return node\n\n    def expr(self): # Toplama \/ \u00c7\u0131karma i\u015flemleri\n        node = self.term()\n        while self.current_token.type in ('PLUS', 'MINUS'):\n            token = self.current_token\n            if token.type == 'PLUS': self.eat('PLUS')\n            elif token.type == 'MINUS': self.eat('MINUS')\n            node = BinaryOpNode(node, token, self.term())\n        return node\n\n    def assignment(self): # De\u011fi\u015fken atamas\u0131 (\u00f6rn: x = 5)\n        var_node = self.current_token\n        self.eat('ID')\n        self.eat('ASSIGN') # '=' operat\u00f6r\u00fc i\u00e7in ASSIGN token'\u0131\n        value_node = self.expr()\n        return VarAssignNode(var_node.value, value_node)\n\n    def if_statement(self):\n        self.eat('IF')\n        self.eat('LPAREN')\n        condition = self.expr() # Ko\u015ful ifadesi (\u00f6rn: x > 10)\n        self.eat('RPAREN')\n        self.eat('THEN')\n        then_branch = self.expr() # THEN sonras\u0131 ifade\n        else_branch = None\n        if self.current_token.type == 'ELSE':\n            self.eat('ELSE')\n            else_branch = self.expr() # ELSE sonras\u0131 ifade\n        return IfStatementNode(condition, then_branch, else_branch)\n\n    def parse(self): # Ana parse fonksiyonu\n        # Burada ifadelere g\u00f6re uygun parse fonksiyonunu \u00e7a\u011f\u0131r\u0131r\u0131z.\n        # Basit\u00e7e bir ifade d\u00f6nd\u00fcrelim:\n        if self.current_token.type == 'IF':\n            return self.if_statement()\n        elif self.current_token.type == 'ID' and self.lexer.text[self.lexer.pos] == '=': # Bir sonraki karakter '=' ise atama\n            return self.assignment()\n        else:\n            return self.expr()\n    <\/pre>\n<p><\/code><\/p>\n<p>Lexer ve Parser, Axion'\u0131n beynini olu\u015fturur. Bu iki bile\u015fen sayesinde Axion, sadece karakter dizileri olarak g\u00f6rd\u00fc\u011f\u00fc girdiyi, \u00fczerinde mant\u0131ksal i\u015flemler yapabilece\u011fi anlaml\u0131 ve yap\u0131land\u0131r\u0131lm\u0131\u015f bir a\u011faca d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu a\u011fa\u00e7, bir sonraki a\u015fama olan Yorumlay\u0131c\u0131 taraf\u0131ndan i\u015flenerek ger\u00e7ek de\u011ferler ve sonu\u00e7lar \u00fcretilecektir. Bu yap\u0131y\u0131 anlamak, kendi mant\u0131k i\u015fleten hesap makinenizi in\u015fa etmenin temelini olu\u015fturur.<\/p>\n<h2>Mant\u0131\u011f\u0131 Hayata Ge\u00e7irme: Axion'da Bir Yorumlay\u0131c\u0131 (Interpreter) Nas\u0131l Yarat\u0131l\u0131r?<\/h2>\n<p>Lexer ve Parser, kullan\u0131c\u0131dan gelen girdiyi anlaml\u0131 tokenlara ve ard\u0131ndan bir Soyut S\u00f6zdizimi A\u011fac\u0131'na (AST) d\u00f6n\u00fc\u015ft\u00fcrd\u00fc. \u015eimdi s\u0131rada bu AST'yi \"\u00e7al\u0131\u015ft\u0131rma\", yani ifadenin mant\u0131\u011f\u0131n\u0131 de\u011ferlendirme ve bir sonu\u00e7 \u00fcretme zaman\u0131 var. Bu g\u00f6rev, Yorumlay\u0131c\u0131'ya (Interpreter) aittir. Yorumlay\u0131c\u0131, AST'nin d\u00fc\u011f\u00fcmleri aras\u0131nda dola\u015f\u0131r, her bir d\u00fc\u011f\u00fcm\u00fcn temsil etti\u011fi i\u015flemi ger\u00e7ekle\u015ftirir ve nihai bir de\u011fer veya etki (\u00f6rne\u011fin bir de\u011fi\u015fkenin de\u011ferini de\u011fi\u015ftirmek) \u00fcretir. Axion'\u0131n \"mant\u0131k i\u015fleten\" k\u0131sm\u0131 tam da burada devreye girer.<\/p>\n<p>Yorumlay\u0131c\u0131, AST'nin her bir d\u00fc\u011f\u00fcm tipini nas\u0131l i\u015fleyece\u011fini bilir. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>Say\u0131 D\u00fc\u011f\u00fcmleri (NumberNode):<\/strong> Sadece d\u00fc\u011f\u00fcmdeki say\u0131 de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><strong>\u0130kili \u0130\u015flem D\u00fc\u011f\u00fcmleri (BinaryOpNode):<\/strong> Sol ve sa\u011f \u00e7ocuk d\u00fc\u011f\u00fcmlerini \u00f6zyinelemeli olarak de\u011ferlendirir, ard\u0131ndan operat\u00f6re (<code>+<\/code>, <code>-<\/code>, <code>*<\/code>, <code>\/<\/code>, <code>><\/code>, <code><<\/code>, <code>==<\/code>, <code>AND<\/code>, <code>OR<\/code> vb.) g\u00f6re i\u015flemi yapar ve sonucu d\u00f6nd\u00fcr\u00fcr. Bu, operat\u00f6r \u00f6nceli\u011finin Parser taraf\u0131ndan zaten \u00e7\u00f6z\u00fclm\u00fc\u015f olmas\u0131n\u0131n avantaj\u0131d\u0131r.<\/li>\n<li><strong>De\u011fi\u015fken Atama D\u00fc\u011f\u00fcmleri (VarAssignNode):<\/strong> De\u011fi\u015fkenin ad\u0131n\u0131 al\u0131r, sa\u011f taraftaki ifadeyi de\u011ferlendirir ve bu de\u011feri bir \"sembol tablosu\" veya \"\u00e7evre\" ad\u0131 verilen bir bellek yap\u0131s\u0131nda saklar.<\/li>\n<li><strong>De\u011fi\u015fken D\u00fc\u011f\u00fcmleri (VarNode):<\/strong> Sembol tablosundan de\u011fi\u015fkenin ad\u0131n\u0131 arar ve de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><strong>Ko\u015fullu \u0130fade D\u00fc\u011f\u00fcmleri (IfStatementNode):<\/strong> Ko\u015ful ifadesi d\u00fc\u011f\u00fcm\u00fcn\u00fc de\u011ferlendirir. E\u011fer ko\u015ful <code>TRUE<\/code> ise, <code>THEN<\/code> dal\u0131n\u0131 de\u011ferlendirir; aksi takdirde (e\u011fer varsa) <code>ELSE<\/code> dal\u0131n\u0131 de\u011ferlendirir.<\/li>\n<\/ul>\n<p>Yorumlay\u0131c\u0131n\u0131n en kritik bile\u015fenlerinden biri, de\u011fi\u015fkenlerin de\u011ferlerini saklamak i\u00e7in kulland\u0131\u011f\u0131 bellektir. Buna genellikle \"\u00e7evre\" (environment) veya \"sembol tablosu\" denir. Bu yap\u0131, anahtar-de\u011fer \u00e7iftleri (de\u011fi\u015fken ad\u0131 - de\u011fi\u015fken de\u011feri) tutarak Axion'\u0131n ifadeler aras\u0131nda state (durum) korumas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code>\nclass Interpreter:\n    def __init__(self):\n        self.variables = {} # De\u011fi\u015fkenleri saklamak i\u00e7in basit bir s\u00f6zl\u00fck\n\n    def visit(self, node):\n        method_name = f'visit_{type(node).__name__}'\n        visitor = getattr(self, method_name, self.generic_visit)\n        return visitor(node)\n\n    def generic_visit(self, node):\n        raise Exception(f'Ziyaret metodu bulunamad\u0131: {type(node).__name__}')\n\n    def visit_NumberNode(self, node):\n        return node.value\n\n    def visit_BinaryOpNode(self, node):\n        left_val = self.visit(node.left)\n        right_val = self.visit(node.right)\n        \n        if node.op.type == 'PLUS': return left_val + right_val\n        if node.op.type == 'MINUS': return left_val - right_val\n        if node.op.type == 'MUL': return left_val * right_val\n        if node.op.type == 'DIV': return left_val \/ right_val\n        if node.op.type == 'GT': return left_val > right_val # >\n        if node.op.type == 'LT': return left_val < right_val # <\n        if node.op.type == 'EQ': return left_val == right_val # ==\n        if node.op.type == 'AND': return left_val and right_val\n        if node.op.type == 'OR': return left_val or right_val\n        \n        raise Exception(f\"Bilinmeyen operat\u00f6r: {node.op.type}\")\n\n    def visit_VarAssignNode(self, node):\n        var_name = node.var_name\n        value = self.visit(node.value)\n        self.variables[var_name] = value\n        return value # Atanan de\u011feri d\u00f6nd\u00fcr\n\n    def visit_VarNode(self, node):\n        var_name = node.name\n        if var_name in self.variables:\n            return self.variables[var_name]\n        raise Exception(f\"Tan\u0131mlanmam\u0131\u015f de\u011fi\u015fken: {var_name}\")\n\n    def visit_IfStatementNode(self, node):\n        condition_result = self.visit(node.condition)\n        if condition_result:\n            return self.visit(node.then_branch)\n        elif node.else_branch:\n            return self.visit(node.else_branch)\n        return None # ELSE dal\u0131 yoksa ve ko\u015ful false ise None d\u00f6nd\u00fcr\n    <\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Bellek y\u00f6netimi, yani de\u011fi\u015fkenlerin saklanmas\u0131 i\u00e7in sembol tablosu veya \u00e7evre kullanmak, dilinize kapsam (scope) eklemenizi sa\u011flar. Bu, fonksiyonlar veya bloklar i\u00e7inde tan\u0131mlanan de\u011fi\u015fkenlerin d\u0131\u015far\u0131dan eri\u015filememesi gibi daha geli\u015fmi\u015f \u00f6zellikler i\u00e7in temel olu\u015fturur.<\/div>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu 1: B\u00fct\u00e7e Denetleme Scripti<\/strong><\/p>\n<p>Diyelim ki, ayl\u0131k gelir ve giderlerinizi takip eden basit bir b\u00fct\u00e7e denetleme mekanizmas\u0131 kurmak istiyorsunuz. Axion ile bunu \u015f\u00f6yle ifade edebilirsiniz:<\/p>\n<pre><code>\ngelir = 5000;\ngider = 3000;\ntasarruf_hedefi = 1500;\nkalan = gelir - gider;\nIF (kalan > tasarruf_hedefi) THEN print(\"Harika! Tasarruf hedefine ula\u015f\u0131ld\u0131!\") ELSE print(\"Biraz daha dikkatli harcama yapmal\u0131s\u0131n.\");\n    <\/pre>\n<p><\/code><\/p>\n<p>Burada Axion yorumlay\u0131c\u0131s\u0131, \u00f6nce <code>gelir<\/code>, <code>gider<\/code> ve <code>tasarruf_hedefi<\/code> de\u011fi\u015fkenlerini sembol tablosuna kaydeder. Ard\u0131ndan <code>kalan<\/code> de\u011fi\u015fkenini hesaplar. Son olarak, <code>IF<\/code> ko\u015fulunu de\u011ferlendirir: <code>kalan > tasarruf_hedefi<\/code> (yani <code>2000 > 1500<\/code>) ifadesi <code>TRUE<\/code> d\u00f6nd\u00fcr\u00fcrse, \"Harika! Tasarruf hedefine ula\u015f\u0131ld\u0131!\" mesaj\u0131n\u0131 ekrana basar. Bu basit \u00f6rnek, Axion'\u0131n sadece say\u0131lar\u0131 i\u015flemekle kalmay\u0131p, bu say\u0131lar \u00fczerinden mant\u0131ksal kararlar alabilme yetene\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Bu, geleneksel bir hesap makinesinin yapamayaca\u011f\u0131 bir i\u015ftir.<\/p>\n<h2>Ad\u0131m Ad\u0131m Axion \u0130n\u015fas\u0131: Kendi Mant\u0131k Motorunuzu Kurmak \u0130\u00e7in Pratik Rehber<\/h2>\n<p>Kendi Axion benzeri mant\u0131k motorunuzu in\u015fa etmek, Lexer, Parser ve Interpreter a\u015famalar\u0131n\u0131 s\u0131rayla ele alarak ger\u00e7ekle\u015ftirilir. Bu s\u00fcre\u00e7te, se\u00e7ti\u011finiz programlama dili ve k\u00fct\u00fcphaneler \u00f6nemli rol oynar. Python veya JavaScript gibi y\u00fcksek seviyeli diller, string i\u015flemleri ve veri yap\u0131lar\u0131 konusunda sunduklar\u0131 kolayl\u0131klar nedeniyle bu t\u00fcr projeler i\u00e7in harika ba\u015flang\u0131\u00e7 noktalar\u0131d\u0131r.<\/p>\n<h3>Hangi Programlama Dilini Se\u00e7meliyim?<\/h3>\n<p>Genellikle bu t\u00fcr projeler i\u00e7in Python veya JavaScript tercih edilir:<\/p>\n<ul>\n<li><strong>Python:<\/strong> Temiz s\u00f6zdizimi, zengin string i\u015fleme fonksiyonlar\u0131 ve listeler\/s\u00f6zl\u00fckler gibi g\u00fc\u00e7l\u00fc veri yap\u0131lar\u0131 sayesinde Lexer ve Parser yazmak olduk\u00e7a kolayd\u0131r.<\/li>\n<li><strong>JavaScript:<\/strong> E\u011fer hedefiniz web tabanl\u0131 bir terminal hesap makinesi ise veya Node.js kullanarak backend'de \u00e7al\u0131\u015fmak istiyorsan\u0131z JavaScript do\u011fal bir se\u00e7imdir. Regex deste\u011fi de g\u00fc\u00e7l\u00fcd\u00fcr.<\/li>\n<\/ul>\n<p>Bu rehberde genel prensipleri a\u00e7\u0131klayaca\u011f\u0131m\u0131z i\u00e7in, kod \u00f6rneklerini Python benzeri bir s\u00f6zdizimiyle sunaca\u011f\u0131z, ancak mant\u0131k di\u011fer dillere de kolayca adapte edilebilir.<\/p>\n<h3>Gerekli K\u00fct\u00fcphaneler ve CLI Aray\u00fcz\u00fc<\/h3>\n<p>Axion'\u0131 s\u0131f\u0131rdan in\u015fa etti\u011fimiz i\u00e7in \u00f6zel bir k\u00fct\u00fcphaneye ihtiya\u00e7 duymay\u0131z. Ancak, komut sat\u0131r\u0131 aray\u00fcz\u00fc (CLI) i\u00e7in Python'da <code>input()<\/code>, JavaScript'te <code>readline<\/code> mod\u00fcl\u00fc gibi temel I\/O fonksiyonlar\u0131 yeterlidir. Kullan\u0131c\u0131dan s\u00fcrekli girdi alabilmek i\u00e7in basit bir d\u00f6ng\u00fc kurar\u0131z:<\/p>\n<pre><code>\n# Python CLI \u0130skeleti\ndef run_axion():\n    interpreter = Interpreter() # Yorumlay\u0131c\u0131 nesnesi\n    print(\"Axion Terminal Hesap Makinesi (\u00c7\u0131kmak i\u00e7in 'exit' yaz\u0131n)\")\n    while True:\n        try:\n            text = input(\">>> \")\n            if text.lower() == 'exit':\n                break\n            if not text.strip(): # Bo\u015f girdiyi atla\n                continue\n\n            lexer = Lexer(text)\n            parser = Parser(lexer)\n            tree = parser.parse()\n            \n            result = interpreter.visit(tree)\n            if result is not None: # Sadece bir de\u011fer d\u00f6nd\u00fc\u011f\u00fcnde yazd\u0131r\n                print(result)\n        except Exception as e:\n            print(f\"Hata: {e}\")\n\n# run_axion() # Uygulamay\u0131 ba\u015flatmak i\u00e7in bu sat\u0131r\u0131 \u00e7a\u011f\u0131r\u0131n\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu iskelet, kullan\u0131c\u0131dan girdi al\u0131r, lexer ve parser'a g\u00f6nderir, AST'yi olu\u015fturur ve yorumlay\u0131c\u0131 ile de\u011ferlendirir. Hata y\u00f6netimi de <code>try-except<\/code> blo\u011fu ile sa\u011flan\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m Uygulama<\/h3>\n<ol>\n<li><strong>Token S\u0131n\u0131flar\u0131 ve Lexer Olu\u015fturma:<\/strong>\n<ul>\n<li><code>Token<\/code> s\u0131n\u0131f\u0131: Tip (\u00f6rn. 'NUMBER', 'PLUS', 'IF') ve de\u011fer (\u00f6rn. 10, None, 'IF') i\u00e7ermeli.<\/li>\n<li><code>Lexer<\/code> s\u0131n\u0131f\u0131: Girdiyi karakter karakter okuyup token'lar\u0131 belirleyecek metotlar\u0131 i\u00e7ermeli (<code>skip_whitespace<\/code>, <code>integer<\/code>, <code>_id<\/code>, <code>get_next_token<\/code>).<\/li>\n<li>Temel operat\u00f6rleri, say\u0131lar\u0131, tan\u0131mlay\u0131c\u0131lar\u0131 ve anahtar kelimeleri tan\u0131d\u0131\u011f\u0131ndan emin olun.<\/li>\n<\/ul>\n<pre><code>\n# Lexer'dan \u00f6rnek bir b\u00f6l\u00fcm\ndef _id(self): # Tan\u0131mlay\u0131c\u0131lar ve Anahtar Kelimeler\n    result = ''\n    while self.current_char is not None and (self.current_char.isalnum() or self.current_char == '_'):\n        result += self.current_char\n        self.advance()\n    KEYWORDS = {'IF': 'IF', 'THEN': 'THEN', 'ELSE': 'ELSE', 'AND': 'AND', 'OR': 'OR', 'NOT': 'NOT', 'TRUE': True, 'FALSE': False}\n    token_type = KEYWORDS.get(result.upper(), 'ID')\n    return Token(token_type, KEYWORDS[result.upper()] if result.upper() in ['TRUE', 'FALSE'] else result) # Boolean de\u011ferleri de ele al\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li><strong>AST D\u00fc\u011f\u00fcmleri ve Parser Olu\u015fturma:<\/strong>\n<ul>\n<li>Farkl\u0131 ifade tipleri i\u00e7in (say\u0131, ikili i\u015flem, atama, if ifadesi) ayr\u0131 AST d\u00fc\u011f\u00fcm s\u0131n\u0131flar\u0131 tan\u0131mlay\u0131n.<\/li>\n<li><code>Parser<\/code> s\u0131n\u0131f\u0131: Lexer'dan tokenlar\u0131 al\u0131p, dilbilgisi kurallar\u0131na g\u00f6re bu d\u00fc\u011f\u00fcmleri birle\u015ftiren metotlar\u0131 i\u00e7ermeli (<code>factor<\/code>, <code>term<\/code>, <code>expr<\/code>, <code>assignment<\/code>, <code>if_statement<\/code>, <code>parse<\/code>).<\/li>\n<li>Operat\u00f6r \u00f6nceli\u011fini do\u011fru bir \u015fekilde uygulad\u0131\u011f\u0131ndan emin olun (\u00f6rn. <code>*<\/code> ve <code>\/<\/code>, <code>+<\/code> ve <code>-<\/code>'den \u00f6nce).<\/li>\n<\/ul>\n<pre><code>\n# Parser'dan \u00f6rnek bir b\u00f6l\u00fcm (ifade zincirlemesi)\ndef expr(self):\n    node = self.term()\n    while self.current_token.type in ('PLUS', 'MINUS', 'GT', 'LT', 'EQ', 'AND', 'OR'):\n        token = self.current_token\n        if token.type in ('PLUS', 'MINUS'): self.eat(token.type)\n        elif token.type in ('GT', 'LT', 'EQ'): self.eat(token.type) # Kar\u015f\u0131la\u015ft\u0131rma operat\u00f6rleri\n        elif token.type in ('AND', 'OR'): self.eat(token.type) # Mant\u0131ksal operat\u00f6rler\n        node = BinaryOpNode(node, token, self.term()) # Daha fazla operat\u00f6r i\u00e7in term yerine uygun parse fonksiyonu\n    return node\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li><strong>Yorumlay\u0131c\u0131 (Interpreter) Olu\u015fturma:<\/strong>\n<ul>\n<li><code>Interpreter<\/code> s\u0131n\u0131f\u0131: AST d\u00fc\u011f\u00fcmlerini ziyaret edip, her d\u00fc\u011f\u00fcm tipine \u00f6zg\u00fc i\u015flemi ger\u00e7ekle\u015ftiren metotlar\u0131 i\u00e7ermeli (<code>visit_NumberNode<\/code>, <code>visit_BinaryOpNode<\/code>, <code>visit_VarAssignNode<\/code>, <code>visit_IfStatementNode<\/code>).<\/li>\n<li>De\u011fi\u015fkenleri saklamak i\u00e7in bir s\u00f6zl\u00fck (<code>self.variables = {}<\/code>) kullan\u0131n.<\/li>\n<li>Mant\u0131ksal operat\u00f6rleri (<code>AND<\/code>, <code>OR<\/code>, <code>NOT<\/code>) ve kar\u015f\u0131la\u015ft\u0131rma operat\u00f6rlerini (<code>><\/code>, <code><<\/code>, <code>==<\/code>) do\u011fru bir \u015fekilde i\u015fledi\u011finden emin olun.<\/li>\n<\/ul>\n<pre><code>\n# Interpreter'dan \u00f6rnek bir b\u00f6l\u00fcm (ko\u015fullu ifade)\ndef visit_IfStatementNode(self, node):\n    condition_result = bool(self.visit(node.condition)) # Ko\u015fulu boolean'a \u00e7evir\n    if condition_result:\n        return self.visit(node.then_branch)\n    elif node.else_branch:\n        return self.visit(node.else_branch)\n    return None # ELSE dal\u0131 yoksa ve ko\u015ful false ise None d\u00f6nd\u00fcr\n            <\/pre>\n<p><\/code>\n        <\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131 takip ederek ve her bir b\u00f6l\u00fcm\u00fc dikkatlice test ederek kendi Axion'\u0131n\u0131z\u0131 olu\u015fturabilirsiniz. Unutmay\u0131n, bu t\u00fcr bir projede ad\u0131m ad\u0131m ilerlemek ve her bile\u015feni ayr\u0131 ayr\u0131 do\u011frulamak, hata ay\u0131klama s\u00fcrecini \u00e7ok daha kolay hale getirecektir. Bir sonraki b\u00f6l\u00fcmde, Axion'\u0131 daha da g\u00fc\u00e7lendirmek i\u00e7in ileri d\u00fczey \u00f6zelliklere ve performans ipu\u00e7lar\u0131na de\u011finece\u011fiz.<\/p>\n<h2>Axion'\u0131 Geli\u015ftirmek: \u0130leri D\u00fczey \u00d6zellikler ve Performans \u0130pu\u00e7lar\u0131<\/h2>\n<p>Axion'\u0131n temelini att\u0131ktan sonra, onu daha g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7 haline getirmek i\u00e7in bir\u00e7ok ileri d\u00fczey \u00f6zellik ekleyebilirsiniz. Bu geli\u015ftirmeler, Axion'\u0131n sadece basit mant\u0131k ifadelerini de\u011fil, ayn\u0131 zamanda daha karma\u015f\u0131k programlama yap\u0131lar\u0131n\u0131 da i\u015fleyebilmesini sa\u011flar.<\/p>\n<h3>Fonksiyon Tan\u0131mlamalar\u0131 ve \u00c7a\u011fr\u0131lar\u0131<\/h3>\n<p>Kullan\u0131c\u0131lar\u0131n kendi fonksiyonlar\u0131n\u0131 (\u00f6rn. <code>FUNC kare(x) { RETURN x * x; }<\/code>) tan\u0131mlay\u0131p \u00e7a\u011f\u0131rabilmesi, Axion'\u0131n g\u00fcc\u00fcn\u00fc katlar. Bu \u00f6zellik i\u00e7in Lexer'a <code>FUNC<\/code> ve <code>RETURN<\/code> anahtar kelimeleri eklemeli, Parser'a fonksiyon tan\u0131mlama ve \u00e7a\u011fr\u0131lar\u0131n\u0131 i\u015fleyecek yeni d\u00fc\u011f\u00fcmler (<code>FunctionDefinitionNode<\/code>, <code>FunctionCallNode<\/code>) eklemeli ve Interpreter'\u0131 da bunlar\u0131 de\u011ferlendirecek \u015fekilde g\u00fcncellemelisiniz. \u00d6zellikle, fonksiyon \u00e7a\u011fr\u0131lar\u0131nda parametre ge\u00e7i\u015fi ve d\u00f6n\u00fc\u015f de\u011feri y\u00f6netimi \u00f6nemlidir.<\/p>\n<pre><code>\n# Fonksiyon tan\u0131mlama ve \u00e7a\u011f\u0131rma i\u00e7in basit bir \u00f6rnek (Pseudocode)\n# Lexer'da: 'FUNC', 'RETURN' tokenlar\u0131\n# Parser'da:\n#   FunctionDefinitionNode(name, params, body_nodes)\n#   FunctionCallNode(name, args)\n# Interpreter'da:\n#   def visit_FunctionDefinitionNode(self, node):\n#       self.functions[node.name] = {'params': node.params, 'body': node.body_nodes}\n#   def visit_FunctionCallNode(self, node):\n#       # Fonksiyonu bul, parametreleri ata, body'yi yeni bir kapsamda ziyaret et\n#       # return de\u011feri varsa onu d\u00f6nd\u00fcr\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu, kullan\u0131c\u0131lar\u0131n tekrarlayan mant\u0131k bloklar\u0131n\u0131 yeniden kullan\u0131labilir hale getirmesine olanak tan\u0131r.<\/p>\n<h3>Hata Y\u00f6netimi ve Anlaml\u0131 Hata Mesajlar\u0131<\/h3>\n<p>Sa\u011flam bir Axion i\u00e7in, kullan\u0131c\u0131 dostu hata mesajlar\u0131 vazge\u00e7ilmezdir. Lexer, Parser ve Interpreter'\u0131n her a\u015famas\u0131nda meydana gelebilecek hatalar\u0131 (tan\u0131nmayan karakter, s\u00f6zdizimi hatas\u0131, tan\u0131mlanmam\u0131\u015f de\u011fi\u015fken, tip uyumsuzlu\u011fu vb.) yakalay\u0131p, kullan\u0131c\u0131n\u0131n anlayabilece\u011fi bir dille bildirmelisiniz. Bu, genellikle hata konumunu (sat\u0131r\/s\u00fctun numaras\u0131) belirten \u00f6zel hata s\u0131n\u0131flar\u0131 olu\u015fturarak yap\u0131l\u0131r.<\/p>\n<pre><code>\n# Hata y\u00f6netimi \u00f6rne\u011fi (Python)\nclass AxionSyntaxError(Exception):\n    def __init__(self, message, line=None, col=None):\n        super().__init__(message)\n        self.line = line\n        self.col = col\n    def __str__(self):\n        if self.line and self.col:\n            return f\"S\u00f6zdizimi Hatas\u0131 ({self.line}:{self.col}): {self.args[0]}\"\n        return f\"S\u00f6zdizimi Hatas\u0131: {self.args[0]}\"\n\n# Parser'da hata f\u0131rlatma\n# if self.current_token.type != expected_type:\n#    raise AxionSyntaxError(f\"Beklenmeyen token. '{expected_type}' bekliyordum, '{self.current_token.type}' geldi.\", ...)\n    <\/pre>\n<p><\/code><\/p>\n<h3>Kullan\u0131c\u0131 Tan\u0131ml\u0131 De\u011fi\u015fkenler ve Kapsam Y\u00f6netimi<\/h3>\n<p>Mevcut basit de\u011fi\u015fken s\u00f6zl\u00fc\u011f\u00fcn\u00fc geli\u015ftirerek, i\u00e7 i\u00e7e kapsamlar\u0131 (nested scopes) destekleyen bir yap\u0131 kurabilirsiniz. Bu, bir fonksiyon i\u00e7inde tan\u0131mlanan de\u011fi\u015fkenin sadece o fonksiyona \u00f6zel olmas\u0131n\u0131 sa\u011flar. Her fonksiyon \u00e7a\u011fr\u0131s\u0131 veya blok, kendi yerel kapsam\u0131na sahip olur ve de\u011fi\u015fkenler bu kapsamlar aras\u0131nda do\u011fru bir \u015fekilde \u00e7\u00f6z\u00fcmlenir. Bu, genellikle bir \"\u00e7evre zinciri\" (chain of environments) ile ger\u00e7ekle\u015ftirilir.<\/p>\n<pre><code>\n<div class=\"expert-tip\">Uzman \u0130pucu: Kapsam Y\u00f6netimi i\u00e7in Sembol Tablosu Kullan\u0131m\u0131. Global de\u011fi\u015fkenler i\u00e7in ana bir sembol tablosu, her fonksiyon veya blok i\u00e7in ise bu tablonun bir alt tablosunu olu\u015fturmak, de\u011fi\u015fkenlerin do\u011fru kapsamda bulunmas\u0131n\u0131 sa\u011flar. Bu sayede \"shadowing\" (g\u00f6lgeleme) ve yerel de\u011fi\u015fkenlerin d\u0131\u015far\u0131ya s\u0131zmas\u0131n\u0131 engellersiniz.<\/div>\n    <\/pre>\n<p><\/code><\/p>\n<h3>Mod\u00fcler Yap\u0131land\u0131rma ve Eklenti Deste\u011fi<\/h3>\n<p>Axion'\u0131 daha esnek hale getirmek i\u00e7in, kullan\u0131c\u0131lar\u0131n \u00f6zel komutlar veya fonksiyonlar eklemesine olanak tan\u0131yan bir eklenti (plugin) sistemi d\u00fc\u015f\u00fcnebilirsiniz. Bu, Axion'\u0131n \u00e7ekirdek kodunu de\u011fi\u015ftirmeden yeni \u00f6zellikler eklemek i\u00e7in idealdir. \u00d6rne\u011fin, belirli bir API'den veri \u00e7eken bir fonksiyonu bir eklenti olarak ekleyebilirsiniz.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131: JIT Derlemesi veya \u00d6nbelle\u011fe Alma<\/h3>\n<p>Axion'\u0131 daha h\u0131zl\u0131 hale getirmek isterseniz, \u00f6zellikle \u00e7ok tekrarlayan veya karma\u015f\u0131k ifadeler i\u00e7in Just-In-Time (JIT) derlemesi veya AST'yi \u00f6nbelle\u011fe alma gibi teknikleri ara\u015ft\u0131rabilirsiniz. JIT derlemesi, AST'yi do\u011frudan makine koduna veya bir ara dile \u00e7evirerek yorumlama ad\u0131m\u0131n\u0131 ortadan kald\u0131r\u0131r. Ancak bu, olduk\u00e7a karma\u015f\u0131k bir konudur ve Axion'\u0131n ba\u015flang\u0131\u00e7 a\u015famalar\u0131nda genellikle gerekli de\u011fildir.<\/p>\n<pre><code>\n<div class=\"expert-tip\">Uzman \u0130pucu: JIT Derlemesi ile Performans\u0131 Nas\u0131l Art\u0131r\u0131l\u0131r? JIT derlemesi, yorumlama maliyetini ortadan kald\u0131rarak kodun do\u011frudan CPU \u00fczerinde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Python'da Numba gibi k\u00fct\u00fcphanelerle veya LLVM gibi platformlarla entegrasyon d\u00fc\u015f\u00fcnerek performans art\u0131\u015f\u0131 sa\u011flanabilir. Ancak ba\u015flang\u0131\u00e7 i\u00e7in basit AST yorumlamas\u0131 yeterlidir. E\u011fer performans\u0131 art\u0131rmak isterseniz, s\u0131k kullan\u0131lan ifadelerin AST'lerini \u00f6nbelle\u011fe almak veya basitle\u015ftirilmi\u015f bir bytecode'a derlemek daha pratik ilk ad\u0131mlar olabilir.<\/div>\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu ileri d\u00fczey \u00f6zellikler, Axion'\u0131 basit bir hesap makinesinden g\u00fc\u00e7l\u00fc, esnek ve hatta programlanabilir bir komut sat\u0131r\u0131 arac\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Her bir \u00f6zelli\u011fi eklerken, Lexer, Parser ve Interpreter katmanlar\u0131n\u0131 tutarl\u0131 bir \u015fekilde g\u00fcncellemek ve kapsaml\u0131 testler yapmak \u00f6nemlidir.<\/p>\n<h2>Vaka Analizi: Axion ile Karma\u015f\u0131k Bir Karar Mekanizmas\u0131 Nas\u0131l Modellenir?<\/h2>\n<p>Axion'\u0131n sadece basit hesaplamalar yapmaktan \u00f6te, ger\u00e7ek d\u00fcnyadaki karar mekanizmalar\u0131n\u0131 modelleyebilme yetene\u011fini daha iyi anlamak i\u00e7in bir vaka analizine odaklanal\u0131m. Bir envanter y\u00f6netim sisteminde otomatik sipari\u015f verme karar\u0131n\u0131 ele alal\u0131m. Bu t\u00fcr bir sistemde, \u00fcr\u00fcnlerin stok seviyeleri, ge\u00e7mi\u015f talep verileri ve belirli e\u015fikler g\u00f6z \u00f6n\u00fcnde bulundurularak otomatik sipari\u015fler olu\u015fturulmas\u0131 gerekebilir. Geleneksel bir terminal hesap makinesi bu karma\u015f\u0131k mant\u0131\u011f\u0131 asla i\u015fleyemezken, Axion bunu kolayca yapabilir.<\/p>\n<h3>Senaryo: Otomatik Sipari\u015f Verme Karar\u0131<\/h3>\n<p>Bir e-ticaret deposunda, belirli \u00fcr\u00fcnler i\u00e7in otomatik sipari\u015f tetikleyicileri olu\u015fturmak istiyoruz. Sipari\u015fin tetiklenmesi i\u00e7in iki ko\u015fulun ayn\u0131 anda sa\u011flanmas\u0131 gerekiyor:<\/p>\n<ol>\n<li>\u00dcr\u00fcn\u00fcn <strong>stok seviyesi<\/strong>, belirli bir <strong>minimum stok seviyesinin<\/strong> alt\u0131na d\u00fc\u015fm\u00fc\u015f olmal\u0131.<\/li>\n<li>Son 30 g\u00fcndeki <strong>ortalama talep tahmini<\/strong>, g\u00fcnl\u00fck <strong>ortalama talep seviyesinin<\/strong> \u00fczerinde olmal\u0131 (bu, talebin art\u0131\u015fta oldu\u011funu g\u00f6sterir).<\/li>\n<\/ol>\n<p>Axion ile bu karar mant\u0131\u011f\u0131n\u0131 a\u015fa\u011f\u0131daki gibi ifade edebiliriz:<\/p>\n<pre><code>\nstok_seviyesi = 45;\nmin_stok_seviyesi = 50;\ntalep_tahmini_son_30gun = 15;\nortalama_talep_gunluk = 10;\n\nIF (stok_seviyesi < min_stok_seviyesi AND talep_tahmini_son_30gun > ortalama_talep_gunluk) \nTHEN print(\"Otomatik sipari\u015f tetiklendi! Miktar: 100\") \nELSE print(\"Sipari\u015f i\u00e7in ko\u015fullar sa\u011flanmad\u0131, beklemede.\");\n    <\/pre>\n<p><\/code><\/p>\n<p>Axion'\u0131n yorumlay\u0131c\u0131s\u0131 bu ifadeyi ad\u0131m ad\u0131m nas\u0131l i\u015fler:<\/p>\n<ul>\n<li>\u00d6nce, <code>stok_seviyesi<\/code>, <code>min_stok_seviyesi<\/code>, <code>talep_tahmini_son_30gun<\/code> ve <code>ortalama_talep_gunluk<\/code> de\u011fi\u015fkenlerinin de\u011ferlerini kendi sembol tablosuna kaydeder.<\/li>\n<li>Ard\u0131ndan, <code>IF<\/code> ko\u015fuluna ula\u015f\u0131r. Ko\u015ful, iki alt ko\u015fuldan olu\u015fan bir <code>AND<\/code> operat\u00f6r\u00fc i\u00e7erir:\n<ul>\n<li>\u0130lk alt ko\u015ful: <code>stok_seviyesi < min_stok_seviyesi<\/code>. Bu durumda <code>45 < 50<\/code>, yani <code>TRUE<\/code>.<\/li>\n<li>\u0130kinci alt ko\u015ful: <code>talep_tahmini_son_30gun > ortalama_talep_gunluk<\/code>. Bu durumda <code>15 > 10<\/code>, yani <code>TRUE<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li><code>AND<\/code> operat\u00f6r\u00fc, her iki taraf\u0131 da <code>TRUE<\/code> oldu\u011fu i\u00e7in genel ko\u015fulu <code>TRUE<\/code> olarak de\u011ferlendirir.<\/li>\n<li>Ko\u015ful <code>TRUE<\/code> oldu\u011fu i\u00e7in, Axion <code>THEN<\/code> dal\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r ve <code>\"Otomatik sipari\u015f tetiklendi! Miktar: 100\"<\/code> mesaj\u0131n\u0131 \u00e7\u0131kt\u0131 olarak verir.<\/li>\n<\/ul>\n<p>Bu senaryo, Axion'\u0131n sadece aritmetik i\u015flemleri de\u011fil, ayn\u0131 zamanda birden fazla ko\u015fulu birle\u015ftirerek karma\u015f\u0131k i\u015f mant\u0131\u011f\u0131n\u0131 nas\u0131l ifade edebildi\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Bu sayede, sistem y\u00f6neticileri veya i\u015f analistleri, do\u011frudan terminalde basit betikler yazarak anl\u0131k kararlar alabilir veya sistem davran\u0131\u015flar\u0131n\u0131 test edebilirler.<\/p>\n<h3>Mobil Uyumlu HTML ve Terminal \u00c7\u0131kt\u0131s\u0131n\u0131 Web'de G\u00f6sterme<\/h3>\n<p>Axion bir terminal uygulamas\u0131 olsa da, \u00e7\u0131kt\u0131lar\u0131n\u0131n veya aray\u00fcz\u00fcn\u00fcn web ortam\u0131nda da mobil uyumlu bir \u015fekilde sunulmas\u0131 gerekebilir. \u00d6rne\u011fin, Axion'\u0131n bir web aray\u00fcz\u00fc varsa veya bir blog yaz\u0131s\u0131nda Axion \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6stermek istiyorsan\u0131z mobil uyumluluk \u00f6nemlidir. Temel CSS medya sorgular\u0131 ile bunu sa\u011flayabiliriz:<\/p>\n<pre><code class=\"language-css\">\n<style>\n  \/* Genel stiller *\/\n  body {\n    font-family: 'Courier New', monospace;\n    background-color: #1e1e1e;\n    color: #00ff00; \/* Neon ye\u015fili terminal yaz\u0131s\u0131 *\/\n    margin: 0;\n    padding: 15px;\n  }\n  .axion-output-container {\n    background-color: #000;\n    border: 1px solid #333;\n    padding: 10px;\n    border-radius: 5px;\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu *\/\n    white-space: pre-wrap; \/* Uzun sat\u0131rlar\u0131 otomatik sarar *\/\n  }\n  .axion-prompt {\n    color: #00ffff; \/* Mavi prompt *\/\n  }\n  .axion-error {\n    color: #ff0000; \/* K\u0131rm\u0131z\u0131 hata mesaj\u0131 *\/\n  }\n\n  \/* Mobil cihazlar i\u00e7in stil uyarlamas\u0131 *\/\n  @media (max-width: 768px) {\n    body {\n      font-size: 0.9em;\n      padding: 10px;\n    }\n    .axion-output-container {\n      margin: 5px 0;\n      padding: 8px;\n    }\n  }\n\n  @media (max-width: 480px) {\n    body {\n      font-size: 0.8em;\n      padding: 5px;\n    }\n    .axion-output-container {\n      border-radius: 3px;\n    }\n  }\n<\/style>\n\n<div class=\"axion-output-container\">\n  <p><span class=\"axion-prompt\">>><\/span> stok_seviyesi = 45;<\/p>\n  <p><span class=\"axion-prompt\">>><\/span> min_stok_seviyesi = 50;<\/p>\n  <p><span class=\"axion-prompt\">>><\/span> talep_tahmini_son_30gun = 15;<\/p>\n  <p><span class=\"axion-prompt\">>><\/span> ortalama_talep_gunluk = 10;<\/p>\n  <p><span class=\"axion-prompt\">>><\/span> IF (stok_seviyesi < min_stok_seviyesi AND talep_tahmini_son_30gun > ortalama_talep_gunluk) <\/p>\n  <p><span class=\"axion-prompt\">...><\/span> THEN print(&quot;Otomatik sipari\u015f tetiklendi! Miktar: 100&quot;) <\/p>\n  <p><span class=\"axion-prompt\">...><\/span> ELSE print(&quot;Sipari\u015f i\u00e7in ko\u015fullar sa\u011flanmad\u0131, beklemede.&quot;);<\/p>\n  <p>&quot;Otomatik sipari\u015f tetiklendi! Miktar: 100&quot;<\/p>\n<\/div>\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu CSS \u00f6rnekleri, Axion terminal \u00e7\u0131kt\u0131s\u0131n\u0131n farkl\u0131 ekran boyutlar\u0131nda nas\u0131l daha okunabilir hale getirilebilece\u011fini g\u00f6stermektedir. Bu, Axion gibi bir arac\u0131n sadece terminalde de\u011fil, ayn\u0131 zamanda \u00e7e\u015fitli platformlarda da etkili bir \u015fekilde kullan\u0131labilece\u011fi potansiyelini vurgular.<\/p>\n<h2>Sonu\u00e7: Axion ve Terminal Hesap Makinelerinin Gelece\u011fi<\/h2>\n<p>Bu makalede, geleneksel terminal hesap makinelerinin s\u0131n\u0131rl\u0131l\u0131klar\u0131n\u0131 a\u015farak, daha g\u00fc\u00e7l\u00fc ve \"mant\u0131k i\u015fleten\" bir ara\u00e7 olan Axion'\u0131 nas\u0131l in\u015fa edebilece\u011fimizi derinlemesine inceledik. Lexer, Parser ve Interpreter gibi temel bile\u015fenlerin ad\u0131m ad\u0131m nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, soyut s\u00f6zdizimi a\u011fac\u0131n\u0131n (AST) \u00f6nemini ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l uygulanabilece\u011fini g\u00f6rd\u00fck. Axion, sadece basit aritmetik i\u015flemlerle yetinmeyip, ko\u015fullu ifadeler, mant\u0131ksal operat\u00f6rler, de\u011fi\u015fken atamalar\u0131 ve hatta ileri d\u00fczeyde fonksiyon tan\u0131mlamalar\u0131 gibi programlama dili \u00f6zelliklerini terminal ortam\u0131na getirerek kullan\u0131c\u0131 deneyimini zenginle\u015ftirir. Bu sayede, geli\u015ftiriciler, analistler ve sistem y\u00f6neticileri gibi teknik kullan\u0131c\u0131lar, karma\u015f\u0131k karar mekanizmalar\u0131n\u0131 h\u0131zl\u0131 ve etkili bir \u015fekilde modelleyebilir, test edebilir ve uygulayabilirler.<\/p>\n<p>Axion gibi bir projenin in\u015fas\u0131, programlama dillerinin i\u00e7 i\u015fleyi\u015fini anlamak i\u00e7in harika bir \u00f6\u011frenme f\u0131rsat\u0131 sunar. Kendi Lexer'\u0131n\u0131z\u0131, Parser'\u0131n\u0131z\u0131 ve Interpreter'\u0131n\u0131z\u0131 yazmak, dil tasar\u0131m\u0131, s\u00f6zdizimi analizi ve semantik de\u011ferlendirme gibi temel bilgisayar bilimi kavramlar\u0131n\u0131 pratik bir \u015fekilde deneyimlemenizi sa\u011flar. Ayr\u0131ca, hata y\u00f6netimi, kapsam y\u00f6netimi ve performans optimizasyonu gibi ileri d\u00fczey konulara de\u011finerek, projenizi daha da sa\u011flam ve kullan\u0131\u015fl\u0131 hale getirme potansiyelini ke\u015ffettik. Terminal hesap makinelerinin gelece\u011fi, kesinlikle sadece say\u0131larla s\u0131n\u0131rl\u0131 kalmayacak; Axion gibi ara\u00e7lar, komut sat\u0131r\u0131 ortam\u0131n\u0131 daha ak\u0131ll\u0131, etkile\u015fimli ve programlanabilir bir alana d\u00f6n\u00fc\u015ft\u00fcrecektir. Kendi Axion projenizi ba\u015flatarak bu heyecan verici alana ilk ad\u0131m\u0131 at\u0131n ve yarat\u0131c\u0131l\u0131\u011f\u0131n\u0131z\u0131 konu\u015fturun!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt>Axion sadece terminalde mi \u00e7al\u0131\u015f\u0131r?<\/dt>\n<dd>Hay\u0131r, Axion'\u0131n temel mant\u0131k motoru (Lexer, Parser, Interpreter) herhangi bir ortamda \u00e7al\u0131\u015fabilir. Terminal, sadece varsay\u0131lan girdi\/\u00e7\u0131kt\u0131 aray\u00fcz\u00fcn\u00fc ifade eder. Web tabanl\u0131 bir aray\u00fczle veya masa\u00fcst\u00fc uygulamas\u0131 i\u00e7inde de kullan\u0131labilir. Hatta bir otomasyon beti\u011finin par\u00e7as\u0131 olarak bir sunucuda bile \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/dd>\n<dt>Hangi programlama dilleriyle Axion benzeri bir ara\u00e7 geli\u015ftirebilirim?<\/dt>\n<dd>Python ve JavaScript, string i\u015fleme kolayl\u0131klar\u0131 ve zengin veri yap\u0131lar\u0131 nedeniyle bu t\u00fcr projeler i\u00e7in pop\u00fcler ve uygun dillerdir. Ancak Java, C#, Go veya C++ gibi dillerde de benzer bir Lexer\/Parser\/Interpreter yap\u0131s\u0131 in\u015fa edilebilir; bu dillerde genellikle performans avantajlar\u0131 elde edilebilir.<\/dd>\n<dt>Axion'\u0131 bir web uygulamas\u0131na entegre etmek m\u00fcmk\u00fcn m\u00fc?<\/dt>\n<dd>Kesinlikle! Axion'\u0131n Lexer, Parser ve Interpreter'\u0131 bir JavaScript (Node.js veya taray\u0131c\u0131da) veya Python (Flask, Django gibi frameworklerle) backend'i \u00fczerinden web aray\u00fcz\u00fcne entegre edilebilir. Kullan\u0131c\u0131lar bir web formuna Axion kodu yazabilir, backend bunu i\u015fleyebilir ve sonucu web sayfas\u0131nda g\u00f6sterebilir. Mobil uyumlu CSS ile de bu \u00e7\u0131kt\u0131lar\u0131 mobil cihazlarda g\u00fczel g\u00f6r\u00fcnmesini sa\u011flayabilirsiniz.<\/dd>\n<dt>Performans kritik uygulamalar i\u00e7in uygun mudur?<\/dt>\n<dd>Axion'\u0131n bu makalede a\u00e7\u0131klanan basit yorumlay\u0131c\u0131 modeli, tipik bir terminal kullan\u0131m senaryosu i\u00e7in yeterince h\u0131zl\u0131d\u0131r. Ancak, \u00e7ok karma\u015f\u0131k veya a\u015f\u0131r\u0131 derecede s\u0131k \u00e7al\u0131\u015fmas\u0131 gereken performans kritik uygulamalar i\u00e7in JIT derlemesi veya bytecode derlemesi gibi daha geli\u015fmi\u015f teknikler gerekebilir. Bu t\u00fcr uygulamalar i\u00e7in genellikle \u00f6zel olarak optimize edilmi\u015f derleyiciler veya sanal makineler kullan\u0131l\u0131r.<\/dd>\n<dt>\u00d6\u011frenmek zor mu?<\/dt>\n<dd>Axion gibi bir mant\u0131k motoru in\u015fa etmek, Lexer, Parser ve Interpreter kavramlar\u0131n\u0131 anlamay\u0131 gerektirir. Bu kavramlar ilk ba\u015fta karma\u015f\u0131k gelebilir, ancak ad\u0131m ad\u0131m ilerleyerek ve her bir bile\u015feni ayr\u0131 ayr\u0131 uygulayarak kolayca \u00f6\u011frenilebilir. Bu, bilgisayar bilimi ve programlama dilleri \u00fczerine bilginizi derinle\u015ftirmek i\u00e7in \u00e7ok de\u011ferli bir projedir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz?&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-33983","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>Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?<\/title>\n<meta name=\"description\" content=\"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.\" \/>\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\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-09T13:01:21+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=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?\",\"datePublished\":\"2025-11-09T13:01:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\"},\"wordCount\":546,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\",\"name\":\"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-09T13:01:21+00:00\",\"description\":\"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?\"}]},{\"@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":"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?","description":"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.","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\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?","og_description":"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.","og_url":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-09T13:01:21+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?","datePublished":"2025-11-09T13:01:21+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/"},"wordCount":546,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/","url":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/","name":"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-09T13:01:21+00:00","description":"Terminalde sadece aritmetik i\u015flemler yapan de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k mant\u0131ksal ifadeleri \u00e7\u00f6zebilen g\u00fc\u00e7l\u00fc bir hesap makinesi mi ar\u0131yorsunuz? Axion ile bu g\u00fc\u00e7l\u00fc arac\u0131 s\u0131f\u0131rdan nas\u0131l in\u015fa edece\u011finizi \u00f6\u011frenin! Bu makale, ad\u0131m ad\u0131m rehberlik ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla sizi bu heyecan verici projeye davet ediyor. Geleneksel hesap makinelerinin s\u0131n\u0131rlar\u0131n\u0131 a\u015farak, daha ak\u0131ll\u0131 ve etkile\u015fimli bir deneyim ya\u015famak i\u00e7in okumaya devam edin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/terminalde-mantik-isleten-hesap-makinesi-axion-nasil-yapilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Terminalde Mant\u0131k \u0130\u015fleten Hesap Makinesi Axion Nas\u0131l Yap\u0131l\u0131r?"}]},{"@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\/33983","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=33983"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33983\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}