CodeBlanks Logo Icon CodeBlanks

AST modeli

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

index.ts
// 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

index.ts
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

Soru
type Node =
  | { kind: "number"; value: number }
  | { kind: ____; value: string }
  | { kind: "add"; left: Node; right: Node };
Cevap
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

İleri seviye bölümündeki tüm dersler