Mata pelajaran ilmu komputer mana yang diperlukan untuk mengikuti kursus pengantar dalam kompiler? [Tutup]

10

Saya bukan sarjana ilmu komputer dan bekerja sebagai pengembang web (java, python, AS3 dll.) Sebagai profesional. Saya mengambil 1 program per semester di universitas lokal saya. Saya telah mengambil Artificial Intelligence (terdiri dari logika, tata bahasa bebas konteks, penguraian CYK, NLP pengantar, rantai markov, HMM dll) semester lalu.

Saya berencana untuk mengambil kursus pengantar dalam kompiler di semester mendatang yang mencakup silabus berikut:

Analisis Leksikal, Analisis Sintaks, Analisis Semantik, Lingkungan Run-Time, Representasi Menengah, Pembuatan Kode, Alokasi Daftar, Pemilihan dan Penjadwalan Instruksi, Pengantar Optimalisasi Kode Lokal dan Global, Analisis Aliran Data

Pertanyaan saya adalah, apakah ada mata pelajaran ilmu komputer yang harus saya ketahui sebelum mengambil kursus ini? Jika ya, alangkah baiknya jika Anda bisa mendaftar kursus-kursus tersebut.

stressed_geek
sumber
1
Tergantung sekolahmu. Milik saya tidak begitu sulit, jadi prasyarat adalah struktur data dasar dan algoritma dasar - itu saja. Sayangnya mereka membuat kompiler opsional dan saya bingung dan tidak mengambilnya.
Pekerjaan

Jawaban:

8

Anda mungkin harus memiliki pemahaman sederhana tentang topik-topik berikut:

  • Matematika Diskrit (set, relasi, pohon, grafik, matriks, teori bilangan)
  • Struktur Data (dalam arti yang lebih terapan, bagaimana pohon, daftar, tumpukan, antrian, dan string bekerja)
  • Algoritma Dasar (konsep inti, pemilahan, pencarian, notasi Big-O, dll)
  • Arsitektur Komputer (logika digital, operasi bit, komponen mikro, cache, memori, pemrograman perakitan)
  • Lain-lain (ekspresi reguler, bahasa bebas konteks, finite state / pushdown automata, mesin Turing dan kemampuan komputasi, alat leksikal dan parsing)

Opsional, dan mungkin akan banyak membantu:

  • Desain Sistem Operasi (manajemen proses, desain kernel, sinkronisasi, penjadwalan, acara, kunci, utas, dan tumpukan vs tumpukan)
Pewpewarrows
sumber
4

Yah, saya telah melakukan sedikit pekerjaan dalam menulis kompiler saya sendiri, dan saya akan mengatakan prasyarat utama adalah pemahaman yang kuat tentang hal-hal yang akan Anda dapatkan di kelas Struktur Data. Khususnya, jika Anda tidak memahami rekursi, pohon, dan tabel peta / hash, Anda akan tersesat dengan sangat cepat mencoba belajar membangun kompiler.

Mason Wheeler
sumber
3

Anda akan memerlukan latar belakang dasar arsitektur komputer (register, memori, register tujuan khusus, dll) dan telah melihat beberapa kode assembly sebelumnya. Akan lebih baik jika Anda telah menulis beberapa kode assembly sebelumnya, sehingga Anda memiliki pemahaman yang adil tentang cara kerja bahasa mesin.

Tergantung pada tingkat kursus, mungkin Anda diharapkan tahu sedikit tentang pemrosesan superscalar dan sejenisnya.

Peter Smith
sumber
1
Ini hanya benar jika kita mengasumsikan bahwa kompiler yang dimaksud adalah menghasilkan kode mesin dan bukan semacam bytecode.
Mason Wheeler
3

Jika ini sama sekali seperti kelas kompiler yang saya ambil di akhir Cretaceous (sekitar 1988), satu-satunya prasyarat nyata adalah struktur data (pohon dan tabel hash khususnya), beberapa bahasa rakitan (untuk kode yang dihasilkan), mungkin beberapa arsitektur komputer, dan kelas apa pun yang akan mengajarkan hal-hal seperti ekspresi reguler, automata terbatas, mesin Turing, dll. meskipun itu mungkin dibahas sebagai bagian dari kursus kompiler itu sendiri (FWIW, milik saya tidak). Anda juga ingin memastikan Anda memahami rekursi.

John Bode
sumber
2

Anda mungkin perlu mengikuti kursus tentang model dan bahasa formal juga. Apa pun yang mencakup hierarki Chompsky dasar akan baik-baik saja: Bahasa Reguler + Bahasa Gratis Konteks. Ini karena penting untuk memahami dasar-dasar matematika parsing sehingga parser Anda bersih, performan, dan benar. Saya pikir bahwa kelas kompiler yang bagus akan sering mencakup Regresi Reguler dan parser LALR / LL (k) dan teori di belakangnya.

Mark Pauley
sumber
0

Karena mereka sedang berbicara tentang optimasi kode, mungkin ada beberapa kode langauge perakitan di sana. Jadi mungkin baik untuk memiliki pengetahuan yang lewat setidaknya. Itu akan tergantung pada bagaimana kursus khusus itu disusun. Kalau tidak, hanya memiliki seperangkat keterampilan pemrograman yang kuat harus cukup untuk intro ke kompiler kelas saya akan berpikir. Ini akan menjadi kelas yang sangat berharga.

GrandmasterB
sumber
0

Tergantung pada uni Anda, tetapi sebagian besar membutuhkan prasyarat ini:

=> 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
gila
sumber