Ayrıştırıcı Birleştirici Kavramları
Küçük ayrıştırıcıları daha büyük ayrıştırıcılarda birleştirin.
Ayrıştırıcı Birleştirici Kavramları, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 1. 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, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Ayrıştırıcı Nedir
Bir ayrıştırıcı, girdiyi (genellikle bir dizeyi) okur ve yapılandırılmış bir çıktı üretir veya başarısız olur. Aynı fikirleri tür sistemine taşımadan önce sezgi kazanmak için değer düzeyinden başlayacağız.
type Parser<T> = (input: string) => { value: T; rest: string } | null;
// Consumes part of the input, returns a value and the leftoverKüçük Bir Ayrıştırıcı
En basit ayrıştırıcı, değişmez bir önekle eşleşir. Girdi beklenen metinle başlıyorsa başarılı olur ve kalan dizeyi döndürür; aksi durumda null döndürür.
function literal(prefix: string): Parser<string> {
return input =>
input.startsWith(prefix)
? { value: prefix, rest: input.slice(prefix.length) }
: null;
}
console.log(literal("ab")("abc"));Birleştiriciler
Bir birleştirici, küçük ayrıştırıcıları alıp daha büyük ayrıştırıcılar oluşturur. Bu bileşimsel tarz, yaklaşımın neden ayrıştırıcı birleştiricileri olarak adlandırıldığını açıklar: karmaşık ayrıştırıcıları basit ve yeniden kullanılabilir parçalardan bir araya getirirsiniz.
// Small parsers: digit, letter, literal
// Combinators: sequence, choice, many
// Compose them into: number, identifier, expressionSıralama
Bir sıralama birleştiricisi önce bir ayrıştırıcıyı, ardından diğerini geriye kalanın üzerinde çalıştırır ve sonuçlarını eşleştirir. Sıralamanın başarılı olması için her ikisinin de başarılı olması gerekir.
function seq<A, B>(pa: Parser<A>, pb: Parser<B>): Parser<[A, B]> {
return input => {
const ra = pa(input);
if (!ra) return null;
const rb = pb(ra.rest);
if (!rb) return null;
return { value: [ra.value, rb.value], rest: rb.rest };
};
}Sıra Kullanımı
İki değişmezi birleştirerek bunları sırayla ayrıştırın. Sonuç, eşleşen iki parçayı ve kalan girdiyi içerir.
const ab = seq(literal("a"), literal("b"));
const r = ab("abc");
console.log(r); // { value: ["a","b"], rest: "c" }Seçim
Bir seçim birleştiricisi önce ilk ayrıştırıcıyı dener; başarısız olursa ikincisini dener. Bu, "bir digit veya bir harf" gibi seçenekleri ifade eder.
function alt<T>(p1: Parser<T>, p2: Parser<T>): Parser<T> {
return input => p1(input) ?? p2(input);
}Tekrarlama
Bir many birleştiricisi, başarısız olana kadar bir ayrıştırıcıyı tekrar tekrar uygular ve tüm sonuçları toplar. Bu yöntem listeleri, digit dizilerini veya boşlukları ayrıştırır.
function many<T>(p: Parser<T>): Parser<T[]> {
return input => {
const out: T[] = [];
let rest = input;
let r = p(rest);
while (r) { out.push(r.value); rest = r.rest; r = p(rest); }
return { value: out, rest };
};
}Sonuçları Eşleme
Bir map birleştiricisi, tükettiği girdiyi değiştirmeden ayrıştırıcı sonucunu dönüştürür; örneğin eşleşen digit karakterlerini sayıya çevirir.
function map<A, B>(p: Parser<A>, f: (a: A) => B): Parser<B> {
return input => {
const r = p(input);
return r ? { value: f(r.value), rest: r.rest } : null;
};
}Adım Adım Oluşturma
Bu birkaç birleştiriciyle (değişmez, sıralı, alternatif, tekrarlama, eşleme) gerçek dilbilgilerini ayrıştırabilirsiniz: sayıları, tanımlayıcıları ve hatta küçük ifade dillerini. Her katman, kendisinden alttaki katmanla birleşir.
const digit = alt(literal("0"), literal("1")); // toy digit
const digits = many(digit);
console.log(digits("0110x"));Değerlerden Türlere
En önemli çıkarım şudur: aynı bileşimsel yapı tür düzeyinde de çalışır. Bu düzeyde girdi
bir dize değişmezi türüdür ve ayrıştırıcılar, şablon değişmezi çıkarımını kullanan koşullu türlerdir. Sıradaki adımda bu düzeye geçeceğiz.
// Value level: (input: string) => { value, rest } | null
// Type level: conditional types over string literal typesTür Düzeyinde Ayrıştırma Neden Gerekli
Tür düzeyindeki ayrıştırıcılar, derleyicinin dize değişmezlerinin yapısını anlamasını sağlar: rota yolları, biçim dizeleri ve sorgu anahtarları. Burada geliştirdiğiniz birleştirici sezgisi, bu kursun geri kalanındaki tür düzeyi tekniklerine doğrudan karşılık gelir.
// Goal: parse "users/:id" into { id: string } at compile timeHızlı Kontrol
Ayrıştırıcı birleştiricileri konusundaki anlayışınızı sınayın.
Özet
Değer düzeyinde ayrıştırıcılar hakkında sezgi geliştirdiniz.
- Bir ayrıştırıcı girdiyi tüketir ve bir değer ile kalan girdiyi döndürür ya da başarısız olur.
- Birleştiriciler (sıralı, alternatif, tekrarlama, eşleme), küçük ayrıştırıcıları büyük ayrıştırıcılarda birleştirir.
- Aynı yapı tür düzeyinde de geçerlidir.
Sıradaki konu: tür sisteminde dizeleri bölmek.
Sıkça Sorulan Sorular
“Ayrıştırıcı Birleştirici Kavramları” dersi ücretsiz mi?
Evet — “Ayrıştırıcı Birleştirici Kavramları” 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 TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Ayrıştırıcı Birleştirici Kavramları” dersinde ne öğreneceğim?
Küçük ayrıştırıcıları daha büyük ayrıştırıcılarda birleştirin. TypeScript 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.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript 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 1. dersidir.
“Ayrıştırıcı Birleştirici Kavramları” 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 TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript 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
- Ayrıştırıcı Birleştirici Kavramları
- Tür Düzeyinde Dize Bölme
- Şablon Değişmezleriyle Ayrıştırma
- Mini Tür Düzeyi Rota Ayrıştırıcısı