Derleyicilerin giriş dersini takip etmek için hangi bilgisayar bilimleri konuları gereklidir? [kapalı]


10

Bilgisayar bilimi mezunu değilim ve profesyonel olarak web geliştiricisi (java, python, AS3 vb.) Olarak çalışıyorum. Yerel üniversitemde her dönem 1 ders alıyorum. Geçen dönemde Yapay Zeka (mantık, bağlamsız gramer, CYK ayrıştırma, tanıtım NLP, markov zincirleri, HMM vb.) Aldım.

Önümüzdeki dönemde aşağıdaki ders programlarını kapsayan derleyicilerde bir tanıtım dersi almayı planlıyorum:

Sözcüksel Analiz, Sözdizimi Analizi, Anlambilimsel Analiz, Çalışma Zamanı Ortamı, Ara Temsiller, Kod Üretimi, Kayıt Tahsisi, Komut Seçimi ve Çizelgeleme, Yerel ve Global Kod Optimizasyonlarına Giriş, Veri Akışı Analizi

Sorum şu: Bu kursa başlamadan önce bilmem gereken herhangi bir bilgisayar bilimi konusu var mı? Evetse, bu kursları listeleyebilmeniz harika olur.


1
Okulunuza bağlıdır. Benimki o kadar da zor değildi, bu yüzden önkoşullar temel veri yapıları ve temel algoritmalardı - hepsi bu. Ne yazık ki derleyiciler isteğe bağlı yaptı ve ben wussed ve almadı.
Meslek

Yanıtlar:


8

Muhtemelen aşağıdaki konuları basitçe anlamalısınız:

  • Ayrık Matematik (kümeler, ilişkiler, ağaçlar, grafikler, matrisler, sayı teorisi)
  • Veri Yapıları (daha uygulamalı anlamda, ağaçların, listelerin, yığınların, kuyrukların ve dizelerin nasıl çalıştığı)
  • Temel Algoritmalar (temel kavramlar, sıralama, arama, Big-O notasyonu, vb.)
  • Bilgisayar Mimarisi (dijital mantık, bit işlemleri, mikro bileşenler, önbellek, bellek, montaj programlama)
  • Çeşitli (düzenli ifadeler, bağlamsız diller, sonlu durum / aşağı itme otomatları, Turing makineleri ve hesaplanabilirlik, sözcük ve ayrıştırma araçları)

İsteğe bağlı ve muhtemelen çok yardımcı olacaktır:

  • İşletim Sistemi Tasarımı (süreç yönetimi, çekirdek tasarımı, senkronizasyon, zamanlama, olaylar, kilitler, iş parçacıkları ve yığın yığınına)

4

Kendi derleyicilerimi yazmak için biraz iş yaptım ve asıl ön şartın Veri Yapıları sınıfında alacağınız şeylerin sağlam bir şekilde anlaşılması olduğunu söyleyebilirim. Özellikle, özyineleme, ağaçlar ve haritalar / karma tabloları anlamadıysanız, derleyici oluşturmayı öğrenmeye çalışırken çok çabuk kaybolursunuz.


3

Bilgisayar mimarisi (kayıtlar, bellek, özel amaçlı kayıtlar, vb.) Hakkında temel bilgilere ihtiyacınız olacak ve daha önce bazı montaj kodlarını göreceksiniz. Daha önce bazı montaj kodları yazdıysanız daha da iyi olurdu, bu nedenle makine dilinin nasıl çalıştığını iyi anlıyorsunuz.

Kursun seviyesine bağlı olarak, süperskalar işleme ve benzerleri hakkında biraz bilgi sahibi olmanız beklenebilir.


1
Bu sadece söz konusu derleyicinin bir tür bayt kodu değil, makine kodu ürettiğini varsayarsak doğrudur.
Mason Wheeler

3

Bu, Kretase'nin sonlarında (yaklaşık 1988) geri aldığım derleyiciler sınıfı gibi bir şeyse, tek gerçek önkoşul veri yapıları (özellikle ağaçlar ve karma tablolar), bazı montaj dili (üretilen kod için), muhtemelen bazı bilgisayar mimarisi ve sınıf ne olursa olsun düzenli ifadeler, sonlu otomata, Turing makineleri vb. Ayrıca özyinelemeyi anladığınızdan emin olmak istersiniz.


2

Muhtemelen resmi modeller ve diller hakkında da bir ders almanız gerekecektir. Temel Chompsky hiyerarşisini kapsayan her şey iyi olurdu: Düzenli Diller + Bağlamdan Bağımsız Diller. Çünkü ayrıştırıcının temiz, performanslı ve doğru olması için ayrıştırmanın matematiksel temellerini anlamak önemlidir. İyi bir derleyici sınıfının genellikle Düzenli İfadeleri ve LALR / LL (k) ayrıştırıcılarını ve bunların arkasındaki teoriyi kapsayacağını düşünüyorum.


0

Kod optimizasyonu hakkında konuştuklarından, orada bazı montaj dili kodlaması olabilir. Bu nedenle, en azından buna aşina olmak iyi olabilir. Belirli bir kursun nasıl yapılandırıldığına bağlı olacaktır. Aksi takdirde, sadece güçlü bir programlama becerisine sahip olmak, bir intro için derlediğim sınıf derleyicileri için yeterli olmalıdır. Bu bir olacak çok değerli sınıfı.


0

Uni'nize bağlıdır, ancak çoğu şu ön koşulları gerektirir:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.