컴파일러의 입문 과정을 따라야하는 컴퓨터 과학 과목은 무엇입니까? [닫은]


10

저는 컴퓨터 과학 학부생이 아니며 웹 개발자 (java, python, AS3 등)로 전문가로 일하고 있습니다. 저는 지역 대학에서 한 학기당 1 코스를 수강합니다. 지난 학기에는 인공 지능 (논리, ​​문맥 자유 문법, CYK 파싱, 입문 NLP, 마르코프 체인, HMM 등)을 수강했습니다.

다음 학기 강의를 다루는 다음 학기의 컴파일러에서 입문 과정을 밟을 계획입니다.

어휘 분석, 구문 분석, 시맨틱 분석, 런타임 환경, 중간 표현, 코드 생성, 레지스터 할당, 명령어 선택 및 스케줄링, 로컬 및 글로벌 코드 최적화 소개, 데이터 흐름 분석

제 질문은이 과정을 수강하기 전에 알아야 할 컴퓨터 과학 과목이 있습니까? 그렇다면, 해당 과정을 기재 해 주시면 좋을 것입니다.


1
학교에 따라 다릅니다. 광산은 그렇게 힘들지 않았으므로 전제 조건은 기본 데이터 구조와 기본 알고리즘이었습니다. 불행히도 그들은 컴파일러를 옵션으로 만들었고 나는 겁을 먹었고 가져 가지 않았습니다.
Job

답변:


8

다음 주제에 대해 간단히 이해해야합니다.

  • 이산 수학 (세트, 관계, 나무, 그래프, 행렬, 수 이론)
  • 데이터 구조 (보다 적용 가능한 의미에서 트리, 목록, 스택, 대기열 및 문자열 작동 방식)
  • 기본 알고리즘 (핵심 개념, 정렬, 검색, Big-O 표기법 등)
  • 컴퓨터 아키텍처 (디지털 로직, 비트 연산, 마이크로 컴포넌트, 캐시, 메모리, 어셈블리 프로그래밍)
  • 기타 (일반 표현식, 문맥없는 언어, 유한 상태 / 푸시 다운 오토마타, 튜링 머신 및 계산 기능, 어휘 및 구문 분석 툴)

선택 사항이며 아마도 많은 도움이 될 것입니다.

  • 운영 체제 설계 (프로세스 관리, 커널 설계, 동기화, 스케줄링, 이벤트, 잠금, 스레드 및 스택 대 힙)

4

글쎄, 나는 내 자신의 컴파일러를 작성하는 데 약간의 노력을 기울였으며, 주요 전제 조건은 Data Structures 클래스에서 얻을 수있는 것들에 대한 확실한 이해라고 말하고 싶다. 특히 재귀, 트리 및 맵 / 해시 테이블을 이해하지 못하면 컴파일러 빌드를 배우는 데 매우 빨리 손실됩니다.


3

컴퓨터 아키텍처 (레지스터, 메모리, 특수 목적 레지스터 등)에 대한 기본 배경이 필요하며 이전에 일부 어셈블리 코드를 보았습니다. 이전에 어셈블리 코드를 작성하면 더 좋을 것이므로 기계 언어의 작동 방식에 대해 공정하게 이해해야합니다.

코스 수준에 따라 수퍼 스칼라 처리 등에 대해 약간 알고있을 것으로 예상됩니다.


1
문제의 컴파일러가 일종의 바이트 코드가 아닌 머신 코드를 생성한다고 가정하는 경우에만 해당됩니다.
메이슨 휠러

3

이것이 백악기 말기 (약 1988 년)에서 가져온 컴파일러 클래스와 같은 것이면 실제 전제 조건은 데이터 구조 (특히 트리 및 해시 테이블), 일부 어셈블리 언어 (생성 된 코드의 경우) 일 수 있습니다. 일부 컴퓨터 아키텍처와 정규 수업, 유한 오토마타, 튜링 머신 등과 같은 클래스는 컴파일러 과정 자체의 일부로 다루어 질 수 있지만 (FWIW, 광산은 그렇지 않았습니다). 또한 재귀를 이해해야합니다.


2

공식적인 모델과 언어에 대한 과정을 수강해야 할 수도 있습니다. 기본 Chompsky 계층 구조를 다루는 모든 것이 정상입니다 : 일반 언어 + 문맥 자유 언어. 파서는 깨끗하고 성능이 뛰어나고 정확하도록 파싱의 수학적 기초를 이해하는 것이 중요하기 때문입니다. 좋은 컴파일러 클래스는 종종 정규 표현식과 LALR / LL (k) 파서와 그 뒤에있는 이론을 다룰 것이라고 생각합니다.


0

그들이 코드 최적화에 관해 이야기하고 있기 때문에, 가능한 일부 어셈블리 언어 코딩이있을 것입니다. 따라서 최소한 그것에 대해 잘 알고있는 것이 좋습니다. 특정 코스가 어떻게 구성되어 있는지에 달려 있습니다. 그렇지 않으면, 내가 생각할 컴파일러 클래스를 소개하기 위해서는 강력한 프로그래밍 기술 세트 만 있으면 충분합니다. 매우 귀중한 수업 이 될 것 입니다.


0

귀하의 uni에 따라 다르지만 대부분 다음과 같은 전제 조건이 필요합니다.

=> 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.