Những môn khoa học máy tính nào được yêu cầu theo khóa học giới thiệu về trình biên dịch? [đóng cửa]


10

Tôi không phải là sinh viên khoa học máy tính và làm việc như một nhà phát triển web (java, python, AS3, v.v.) như một chuyên gia. Tôi học 1 khóa mỗi học kỳ tại trường đại học địa phương. Tôi đã học Trí tuệ nhân tạo (bao gồm logic, ngữ pháp không ngữ cảnh, phân tích cú pháp CYK, NLP giới thiệu, chuỗi markov, HMM, v.v.) vào học kỳ trước.

Tôi đang dự định tham gia một khóa học giới thiệu về trình biên dịch trong học kỳ sắp tới bao gồm các giáo trình sau:

Phân tích từ điển, Phân tích cú pháp, Phân tích ngữ nghĩa, Môi trường thời gian thực, Đại diện trung gian, Tạo mã, Phân bổ đăng ký, Chọn hướng dẫn và lập lịch, Giới thiệu về tối ưu hóa mã địa phương và toàn cầu, phân tích luồng dữ liệu

Câu hỏi của tôi là, có môn khoa học máy tính nào mà tôi nên biết trước khi tham gia khóa học này không? Nếu có, sẽ thật tuyệt nếu bạn có thể vui lòng liệt kê các khóa học đó.


1
Phụ thuộc vào trường học của bạn. Của tôi không khó lắm, vì vậy điều kiện tiên quyết là cấu trúc dữ liệu cơ bản và thuật toán cơ bản - chỉ vậy thôi. Thật không may, họ đã tạo ra các trình biên dịch tùy chọn và tôi đã bỏ qua và không lấy nó.
Công việc

Câu trả lời:


8

Có lẽ bạn nên hiểu đơn giản về các chủ đề sau:

  • Toán rời rạc (bộ, quan hệ, cây, đồ thị, ma trận, lý thuyết số)
  • Cấu trúc dữ liệu (theo nghĩa được áp dụng nhiều hơn, cách cây, danh sách, ngăn xếp, hàng đợi và chuỗi hoạt động)
  • Các thuật toán cơ bản (khái niệm cốt lõi, sắp xếp, tìm kiếm, ký hiệu Big-O, v.v.)
  • Kiến trúc máy tính (logic kỹ thuật số, hoạt động bit, vi thành phần, bộ nhớ cache, bộ nhớ, lập trình lắp ráp)
  • Linh tinh (biểu thức chính quy, ngôn ngữ không ngữ cảnh, tự động trạng thái hữu hạn / đẩy xuống, máy Turing và khả năng tính toán, công cụ từ vựng và phân tích cú pháp)

Tùy chọn, và có thể sẽ giúp rất nhiều:

  • Thiết kế hệ điều hành (quản lý quy trình, thiết kế kernel, đồng bộ hóa, lập lịch, sự kiện, khóa, luồng và stack vs heap)

4

Chà, tôi đã thực hiện một chút công việc bằng cách viết các trình biên dịch của riêng mình và tôi nói điều kiện tiên quyết chính là sự hiểu biết vững chắc về những thứ bạn sẽ nhận được trong một lớp Cấu trúc dữ liệu. Cụ thể, nếu bạn không hiểu đệ quy, cây và bảng / bảng băm, bạn sẽ bị mất rất nhanh khi cố gắng học cách xây dựng trình biên dịch.


3

Bạn sẽ cần một số nền tảng cơ bản về kiến ​​trúc máy tính (thanh ghi, bộ nhớ, thanh ghi mục đích đặc biệt, v.v.) và đã thấy một số mã lắp ráp trước đó. Sẽ tốt hơn nữa nếu bạn đã viết một số mã lắp ráp trước đó, vì vậy bạn có một sự hiểu biết công bằng về cách ngôn ngữ máy hoạt động.

Tùy thuộc vào mức độ của khóa học, có thể bạn sẽ biết một chút về quá trình xử lý siêu khối và tương tự.


1
Điều này chỉ đúng nếu chúng ta giả sử rằng trình biên dịch trong câu hỏi đang tạo mã máy chứ không phải một loại mã byte nào đó.
Mason Wheeler

3

Nếu đây là bất cứ thứ gì giống như lớp trình biên dịch mà tôi đã lấy lại trong kỷ Phấn trắng muộn (khoảng năm 1988), thì điều kiện tiên quyết thực sự duy nhất sẽ là cấu trúc dữ liệu (đặc biệt là cây và bảng băm), một số ngôn ngữ lắp ráp (cho mã được tạo), có thể một số kiến ​​trúc máy tính và bất kỳ lớp nào sẽ dạy những thứ như biểu thức chính quy, máy tự động hữu hạn, máy Turing, v.v. mặc dù chúng có thể được bao phủ như một phần của chính trình biên dịch (FWIW, của tôi thì không). Bạn cũng sẽ muốn đảm bảo rằng bạn hiểu đệ quy.


2

Có lẽ bạn sẽ cần phải tham gia một khóa học về các mô hình và ngôn ngữ chính thức. Bất cứ điều gì bao gồm hệ thống phân cấp cơ bản của Chompsky đều ổn: Ngôn ngữ thông thường + Ngôn ngữ tự do bối cảnh. Điều này là bởi vì điều quan trọng là phải hiểu các nền tảng toán học của phân tích cú pháp để trình phân tích cú pháp của bạn sạch sẽ, hiệu quả và chính xác. Tôi nghĩ rằng một lớp trình biên dịch tốt sẽ thường bao gồm cả trình phân tích cú pháp biểu thức chính quy và biểu thức LALR / LL (k) và lý thuyết đằng sau chúng.


0

Vì họ đang nói về tối ưu hóa mã, nên có thể sẽ có một số mã ngôn ngữ lắp ráp trong đó. Vì vậy, nó có thể là tốt để có một sự quen thuộc qua đó ít nhất. Nó phụ thuộc vào cách cấu trúc khóa học cụ thể đó. Mặt khác, chỉ cần có một bộ kỹ năng lập trình mạnh mẽ là đủ cho một phần giới thiệu cho lớp trình biên dịch tôi nghĩ. Nó sẽ là một lớp rất có giá trị.


0

Phụ thuộc vào uni của bạn nhưng hầu hết yêu cầu những điều kiện tiên quyết này:

=> 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.