AST modeli
- TypeScript kursu
- İleri seviye
- Ders 49/57
- 5 dk
Bir mini AST modelini discriminated union'larla tasarlarsın.
AST modeli
AST (Abstract Syntax Tree), bir programın yapısını temsil eden ağaçtır. discriminated union'larla her düğüm türü kind discriminant alanıyla modellenir; her tür kendi alanlarını taşır. Bu, derleyici yazarken tür güvenli dallanmayı sağlar.
type Node =
| { kind: "number"; value: number }
| { kind: "string"; value: string }
| { kind: "add"; left: Node; right: Node };Discriminant ile dallanma
kind discriminant alanı, switch ifadesiyle dallanmayı sağlar. Her case, ilgili düğümün kendi alanlarına daraltır; örneğin case "number" dalında node.value number olarak erişilir. Bu, derleme zamanında yanlış erişimi önler.
function label(n: Node): string {
switch (n.kind) {
case "number": return "number: " + n.value;
case "string": return "string: " + n.value;
case "add": return "add";
}
}Uygulama AST Node türünü tanımla
Node discriminated union türünü tanımla: "number" (value: number), "string" (value: string), "add" (left: Node, right: Node) üyeleri, kind discriminant alanıyla. kindOf(n: Node): string fonksiyonunu switch ile yaz: number için "n", string için "s", add için "a" döndür. console.log(kindOf({ kind: "number", value: 42 })) ile sonucu yazdır.
Başlangıç kodu
// Node discriminated union türünü tanımla (kind: number, string, add)
// kindOf(n: Node): string fonksiyonunu switch ile yaz
// kindOf ile number düğümlü bir örnek çağır ve yazdırÖrnek çözüm
type Node =
| { kind: "number"; value: number }
| { kind: "string"; value: string }
| { kind: "add"; left: Node; right: Node };
function kindOf(n: Node): string {
switch (n.kind) {
case "number":
return "n";
case "string":
return "s";
case "add":
return "a";
}
}
console.log(kindOf({ kind: "number", value: 42 }));Beklenen çıktı
n
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 AST düğümlerini discriminated union ile modellemenin avantajı nedir?
- Çalışma zamanı hızını artırır
- Düğüm sayısını azaltır
- Kodu daha kısa yapar
- Tür güvenli dallanma sağlar Doğru cevap
Açıklama: Discriminated union, her düğümün kind alanına göre switch ile güvenli daraltma yapılmasını sağlar; yanlış erişim derleme zamanında yakalanır.
2 AST düğüm discriminant
type Node =
| { kind: "number"; value: number }
| { kind: ____; value: string }
| { kind: "add"; left: Node; right: Node };
type Node =
| { kind: "number"; value: number }
| { kind: "string"; value: string }
| { kind: "add"; left: Node; right: Node };
Açıklama: Her düğümün discriminant değeri farklı olmalıdır; "string" düğümü "number"dan farklı değer kullanır.
3 AST modeli parçaları
| Kavram | Anlamı |
|---|---|
kind discriminant |
düğüm türünü belirtir |
Node union |
tüm düğüm türlerini birleştirir |
discriminated union |
tür güvenli dallanma |
value, left, right |
düğüme özgü alanlar |