[Compiler] 1. Compiler Overview

이상윤·2024년 4월 24일

컴파일러

목록 보기
1/7

High-level vs Low-level Language

Machine Language(0&1) -> Assembly -> Higher-level Language 순으로 인간 친화적이며 개발이 쉽다.
Higher-level language 중에서도 C-C++-Java-Python 등의 순서로 더 higher level이다.
Higher-level language일수록 개발이 쉽지만, 컴퓨터와는 친화적이지 않고, 즉시 실행할 수 없다.
따라서 high-level language를 lower level로 바꿔주는 Language Translation이 필요하다.

Language Processors의 주요 역할


1. Language Translation
: 소스코드를 semantically-equivalent target code로 전환한다. (Assembly / machine language)
2. Error detection
: Translation 과정에서, 소스코드의 에러를 감지하고 보고한다.

Compiler vs Interpreter

ComplierInterpreter
전체 소스 프로그램을 translate함하나의 statement만 translate함
프로그램 실행 전에 한번만 translate함statement 실행 한번 당 한번 Translate함
소스 프로그램과 equivalent한 target program을 생성함statement와 equivalent한 Target code를 생성함
C, C++ 등Javascript 등
Runtime 실행시간이 더 빠름이식성, 유연성이 높음
디버깅, 개발이 용이함

Hybrid complier


Java나 Python같은 언어에서는 빠른 execution time을 위한 compliation과 높은 이식성을 위한 interpretation을 모두 사용한다.

좋은 Complier의 조건

  1. Correctness
    : 필수 조건이다. Source Program과 Target program이 의미 및 논리적으로 동치여야 한다.
  2. Performance improvement
    : 성능 개선이 있는게 당연히 좋다
  3. Reasonable compilation time
    : 컴파일에 시간이 너무 오래 걸리면, 컴파일러가 아닌건 아니지만 좋은 컴파일러는 아닐 것이다.

현대적인 Complier의 구조

  1. Analysis part
    a. Lexical Analyzer (Scanner)
    문자들의 연속된 입력을 의미있는 시퀀스로 나누고, 토큰들의 집합을 생성한다.
    b. Syntax Analyzer (Parser)
    토큰들의 문법적 구조를 나타내는 트리 형태의 중간 표현을 생성한다.
    c. Semantic analyzer
    타입 체킹 등, 언어 정의와 소스 프로그램이 의미론적인 일관성(정확성)을 가지는지 확인한다.

  2. Synthesis part
    d. Intermediate code generator
    작성하기 쉬우며 타겟 기계언어로의 translate가 편한 중간 코드를 작성한다.
    e. Code optimizer <Optional>
    d에서 작성한 중간 코드를 더 빠르거나 더 짧은 (즉, 더 나은 타겟 코드가 생성 될것이라 예상되는) 중간 코드로 개선한다.
    f. Code generator
    중간 코드를 타겟 언어로 변환한다.

0개의 댓글