Tags: ,

Categories:

1 minute read

edx에서 컴파일러 강의 듣기

현재 진로를 컴파일러&정적 분석 쪽으로 진지하게 고민 중이라 시중에 나와있는 컴파일러 강의가 어떤게 있을까 찾아보았다. kocw 등에 있긴 하지만 수료증 등은 수여하지 않는 터라.. 찾아보니 OSSU라는게 있었다. Open Source Society University의 줄임말로, 학부 레벨의 지식을 얻을 수 있는 공개 강의가 어떤 것들이 있는지를 소개해준다. 그 중에 edx 주관 Compiler가 있어서, 고민하다가 신청했다.

신청 과정

Enroll 하면 강의를 공짜로 들을 수 있다. 다만 수료증은 결제를 해야 준다. 근데 가격이.. 대략 199$.. 학생이 낼만한 돈이 아닌 것 같다.. 다행이 재정 지원 서비스가 있는데, 나는 이를 신청해서 90% 할인 받고 강의를 들었다. 재정 지원 신청에 대해서는 이미 많은 글들이 있으니 생략한다.

난이도

음.. 어렵다. 이미 인터프리터를 만들어본 경험이 있음에도 과정이 전혀 쉽지가 않다.

강의 개요

스텐포드 대학교 강의이기 때문에 평범한 인강은 아니다. 강의도 난이도가 있지만, 과제 난이도가 꽤 괴랄한 편인 것 같다.

  1. lexical analysis
  2. parsing
    • Recursive Top-Down Parsing
    • LL Parsing
    • Bottom Parsing
    • SLR Parsing
  3. semantic analysis
  4. code generation
  5. optimization
  6. Java

간단하게는 대충 위와 같은 순서로 강의가 진행된다. 사실상 언어 하나가 만들어지는 모든 과정에 다 들어간다고 보면 될 것 같다. 교재는 가장 유명한 컴파일러 교재인 dragon book을 일부 사용하되, 딱히 없어도 된다고 한다.

강의를 들으면서 Cool언어를 만들게 된다. 이 Cool언어는 가볍게 객체지향 프로그래밍을 하고, 입출력을 할 수 있는 프로그래밍 언어이다.

과제는 총 4번 주어진다.

  1. lexing
    • flex
  2. parsing
    • bison
  3. semantic analysis
  4. code generation

이 글을 쓰고 있는 현재, 1과 2는 완료한 상태이다. 과제를 완료하기 위해서는 flexbison 등의 완전히 새로운 툴을 익혀야한다. 물론 처음부터 끝까지는 아니고, 토큰이나 에러메세지 출력 함수와 같은 것들은 미리 정의가 되어있다. 순수하게 렉싱과 파싱만 하면 되도록 되어있다.

툴에 대한 강의는 일체 없다보니, 처음부터 끝까지 스켈레톤 코드와 공식 문서에 의지해서 작성해야만 한다.

코드는 아래와 같다.

  1. lexing
  2. parsing

채점은 자동으로 이루어지는데, 주어진 pl 파일을 perl로 실행하기만 하면 된다. 다만 parsing 과제는 테스트 케이스가 하나 오류가 있는 듯하다. 납득이 안가는 상태로 1점 감점되고 제출했다.

강의가 진행되는대로 이 첫번째 글은 계속 수정될 예정이다.

Leave a comment