Basit İfade Ayrıştırıcısı
Salt Lua ile aritmetik ifadeler için özyinelemeli iniş ayrıştırıcısı oluşturun.
Basit İfade Ayrıştırıcısı, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Amaç: Aritmetik İfadeleri Ayrıştırma
Operatör önceliğine uyarak 3 + 4 * (2 - 1) gibi ifadeleri ayrıştırıp değerlendiren, yalnızca Lua ile yazılmış özyinelemeli iniş ayrıştırıcısı oluşturun.
Belirteçlere Ayırma
Öncelikle girişi sayılara, operatörlere ve parantezlere ayırın.
local function tokenize(expr)
local tokens = {}
for tok in expr:gmatch("[%d%.]+|[%+%-%*/%(%)%^]|%S") do
tokens[#tokens+1] = tok
end
return tokens
endGeliştirilmiş Belirteçlere Ayırma
gmatch kalıplarını kullanan daha dayanıklı bir belirteçleyici.
local function tokenize(expr)
local tokens = {}
for tok in expr:gmatch("%d+%.?%d*|[%+%-%*/%(%)%^]") do
tokens[#tokens+1] = tok
end
return tokens
endAyrıştırıcı Durumu
Ayrıştırıcı bir belirteç listesi ve konum taşır. peek ve consume yardımcı işlevleri belirteçler arasında ilerler.
local function newParser(tokens)
local pos = 1
local function peek() return tokens[pos] end
local function consume() pos = pos + 1; return tokens[pos-1] end
return {peek=peek, consume=consume}
endİfadeler için Dilbilgisi
Dilbilgisi önceliğe uyar:
- ifade = terim ((+ | -) terim)*
- terim = çarpan ((* | /) çarpan)*
- çarpan = sayı | (ifade) | -çarpan
Terimleri Ayrıştırma
Terimleri ayrıştırarak ve +/- işlemlerini soldan sağa katlayarak toplamsal ifadeleri ayrıştırın.
local parseExpr, parseTerm, parseFactor
parseExpr = function(p)
local val = parseTerm(p)
while p.peek() == "+" or p.peek() == "-" do
local op = p.consume()
local right = parseTerm(p)
if op == "+" then val = val + right
else val = val - right end
end
return val
endÇarpanları Ayrıştırma
Üs alma da dahil olmak üzere çarpımsal ifadeleri ayrıştırın.
parseTerm = function(p)
local val = parseFactor(p)
while p.peek() == "*" or p.peek() == "/" do
local op = p.consume()
local right = parseFactor(p)
if op == "*" then val = val * right
else val = val / right end
end
return val
endSayıları ve Parantezleri Ayrıştırma
Temel öğeleri ayrıştırın: sabitleri, parantez içindeki alt ifadeleri ve tekli olumsuzlamayı.
parseFactor = function(p)
local tok = p.peek()
if tok == "(" then
p.consume() -- (
local val = parseExpr(p)
p.consume() -- )
return val
elseif tok == "-" then
p.consume()
return -parseFactor(p)
else
return tonumber(p.consume())
end
endBirleştirme
Bir ifadeyi belirteçlere ayırın, ayrıştırın ve değerlendirin.
local function eval(expr)
local tokens = tokenize(expr)
local parser = newParser(tokens)
return parseExpr(parser)
end
print(eval("3 + 4 * 2")) -- 11
print(eval("(3 + 4) * 2")) -- 14
print(eval("2 ^ 10")) -- 1024 (if ^ is supported)Ayrıştırıcıyı Genişletme
Dilbilgisini genişletip parseFactor işlevine yeni durumlar ekleyerek değişkenler, işlevler, karşılaştırma operatörleri ve dize sabitleri ekleyin.
Hata Bildirimi
Belirteçleyicide satır ve sütun bilgilerini izleyin. Anlamlı hatalar oluşturun: "Expected ')' at position 7, got '+'".
Ayrıştırıcı Oluşturucuları
Karmaşık dilbilgileri için LPEG gibi ayrıştırıcı oluşturucuları kullanın (Ayrıştırma İfade Dilbilgileri). Büyük dilbilgilerinde LPEG, elle yazılmış özyinelemeli iniş yönteminden çok daha güçlü ve ifade edicidir.
Ayrıştırıcı Sorusu
Özyinelemeli iniş ayrıştırıcısı, operatör önceliğini uygulamak için ne kullanır?
Özet: Basit İfade Ayrıştırıcısı
Özyinelemeli iniş ayrıştırıcısı, her dilbilgisi kuralı için bir işlev kullanır ve çağrı hiyerarşisi aracılığıyla operatör önceliğini doğal olarak uygular. Önce belirteçlere ayırın, then ifade → terim → çarpan işlevlerini uygulayın. Tam bir ifade dili için değişkenler ve işlevlerle genişletin.
Sıkça Sorulan Sorular
“Basit İfade Ayrıştırıcısı” dersi ücretsiz mi?
Evet — “Basit İfade Ayrıştırıcısı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Basit İfade Ayrıştırıcısı” dersinde ne öğreneceğim?
Salt Lua ile aritmetik ifadeler için özyinelemeli iniş ayrıştırıcısı oluşturun. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Basit İfade Ayrıştırıcısı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua'da DSL Tasarım İlkeleri
- DSL Akıcılığı için Operatör Aşırı Yükleme
- Yapılandırma DSL'i Oluşturma
- Basit İfade Ayrıştırıcısı