Design ★ 3,412

compiler

atopile compiler'ın `.ato` dosyalarından TypeGraph'ları nasıl derlediğini ve bağladığını (ANTLR front-end → AST → TypeGraph → Linker → DeferredExecutor), temel değişmezlikleri ve test giriş noktalarını açıklar. Compiler pipeline, grammar, AST visitor'ları veya type resolution'ı değiştirirken kullanın.

cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile

Derleyici Modülü

Derleyici, .ato kaynaklarından bağlantılı, bağımsız bir TypeGraph oluşturur. Export/üretim yapıtları daha sonra derleme adımları/exporterler tarafından işlenir; derleyicinin görevi ayrıştırma + typegraph oluşturma + bağlantılamadır.

Şunlarla başlayın:

  • src/atopile/compiler/README.md (aşama özeti + örnek kullanım)
  • src/atopile/compiler/parser/README.md (ANTLR çıktısını yeniden oluşturma)

Hızlı Başlangıç

Tek bir .ato dosyasını bağlantılı bir TypeGraph'a derleyin (ve entrypoint'ini örnekleyin):

import faebryk.core.faebrykpy as fbrk
import faebryk.core.graph as graph
import faebryk.core.node as fabll
from atopile.compiler.build import Linker, StdlibRegistry, build_file
from atopile.compiler.deferred_executor import DeferredExecutor
from atopile.config import config

g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
stdlib = StdlibRegistry(tg)
linker = Linker(config, stdlib, tg)

result = build_file(g=g, tg=tg, import_path="app.ato", path="path/to/app.ato")
linker.link_imports(g=g, state=result.state)
DeferredExecutor(g=g, tg=tg, state=result.state, visitor=result.visitor).execute()

app_type = result.state.type_roots["ENTRYPOINT"]
app_root = tg.instantiate_node(type_node=app_type, attributes={})
app = fabll.Node.bind_instance(app_root)

İlgili Dosyalar

  • Core pipeline:
    • src/atopile/compiler/build.py (build_file, build_source, Linker, StdlibRegistry, aşama yardımcıları)
    • src/atopile/compiler/parse.py (ANTLR parse + error listener → UserSyntaxError)
    • src/atopile/compiler/antlr_visitor.py (ANTLR CST → kaynak bilgili internal AST graph)
    • src/atopile/compiler/ast_visitor.py (AST → TypeGraph "ön" oluşturma)
    • src/atopile/compiler/gentypegraph.py (typegraph oluşturma araçları + import refs)
    • src/atopile/compiler/deferred_executor.py (terminal aşama: inheritance/retypes/for-loops)
  • Parser frontend:
    • src/atopile/compiler/parser/ (AtoLexer.g4, AtoParser.g4, oluşturulan Python)

Bağımlılar (Çağrı Siteleri)

  • CLI (src/atopile/cli/build.py): Projeyi derlemek için derleyiciyi çağırır.
  • LSP (src/atopile/lsp/lsp_server.py): Doküman başına graphlar oluşturur ve tamamlama/hover için son başarılı sonucu tutar.

Nasıl Çalışılır / Geliştiriş / Test

Temel Kavramlar

  • ANTLR front-end: .ato dosyasını ANTLR parse tree'sine ayrıştırır; syntax hataları UserSyntaxError'e dönüştürülür.
  • AST graph: ANTLRVisitor ANTLR çıktısını internal AST node'larına dönüştürür (kaynak bilgili FabLL node'ları).
  • TypeGraph derleme: AST visitor bir ön TypeGraph yayınlar.
  • Bağlantılama: Linker importları çözer, inheritance sıralamasını yürütür, retypeleri uygular ve bağımsız bir derleme birimini hazırlar.
  • Deferred execution (terminal): DeferredExecutor.execute() çözülmüş türler gerektiren işlemleri çalıştırır (inheritance, retypes, for-loops).

Geliştirme İş Akışı

  1. Gramer değişiklikleri:
    • src/atopile/compiler/parser/AtoLexer.g4 / AtoParser.g4 düzenleyin
    • yeniden oluşturun (bkz. src/atopile/compiler/parser/README.md)
  2. Dil özellikleri:
    • CST → AST: src/atopile/compiler/antlr_visitor.py
    • AST → TypeGraph: src/atopile/compiler/ast_visitor.py / gentypegraph.py
  3. Bağlantılama/terminal davranışı:
    • src/atopile/compiler/build.py / src/atopile/compiler/deferred_executor.py

Test

  • Derleyici testleri: ato dev test --llm test/compiler -q
  • Linker davranışı: ato dev test --llm test/compiler/test_linker.py -q
  • Uçtan uca smoke: ato dev test --llm test/test_end_to_end.py -q

En İyi Uygulamalar

  • Hataları kaynağa bağlı tutun: mümkün olduğunda AST kaynak bilgisi ile DslRichException/UserException yükseltin.
  • Graph yaşam sürelerini izleyin: çoğu entrypoint açıkça (g, tg) kabul eder; uzun süren işlemlerde GraphView'i yok edin (LSP bunu yapar).

Benzer skill'ler

brainstorming Design

Herhangi bir yaratıcı çalışmaya başlamadan önce bunu mutlaka kullanın - feature oluştururken, component inşa ederken, functionality eklerken veya davranış değiştirirken. Kullanıcı niyetini, gereksinimleri ve tasarımı implementation öncesinde araştırır.

obra/superpowers ★ 235,495
finishing-a-development-branch Design

Uygulama tamamlandığında, tüm testler geçtiğinde ve çalışmanızı nasıl entegre edeceğinize karar vermeniz gerektiğinde kullanın - merge, PR veya cleanup seçeneklerini sunarak geliştirme sürecinin tamamlanmasını rehberlik eder.

obra/superpowers ★ 235,495
receiving-code-review Design

Kod incelemesi geri bildirimi alırken, önerileri uygulamadan önce kullanın; özellikle geri bildirim belirsiz veya teknik olarak şüpheli görünüyorsa - performatif anlaşmadan veya körü körüne uygulamadan ziyade teknik titizlik ve doğrulama gerekir.

obra/superpowers ★ 235,495
requesting-code-review Design

Görevleri tamamlarken, büyük özellikleri hayata geçirirken veya merge etmeden önce çalışmanın gereksinimleri karşıladığını doğrulamak için kullanın.

obra/superpowers ★ 235,495
using-git-worktrees Design

Yeni bir feature üzerinde çalışmaya başlarken veya implementasyon planını yürütmeden önce kullanın - native araçlar veya git worktree fallback aracılığıyla izole edilmiş bir workspace sağlar.

obra/superpowers ★ 235,495
using-superpowers Design

Herhangi bir konuşma başlatırken kullanın - skill'lerin nasıl bulunacağını ve kullanılacağını belirler, clarification soruları da dahil olmak üzere HERHANGİ bir yanıt vermeden önce skill invocation gerektirir.

obra/superpowers ★ 235,495
Daha fazla: Design →