[컴파일러개론] 개요

2025. 10. 25. 17:09·CS/컴파일러개론

개요

- 컴퓨터의 언어인 2진수를 사용하면, 모든 프로그램이 0과 1의 전쟁이므로 불편함

- 어셈블리를 사용하면 2진수를 사용하지 않고 기호로 표기할 수 있으나, CPU가 달라지면 코드를 다시 짜야하는 불편함이 존재

 

이러한 이유로 고급언어가 탄생했다. 고급언어는 0/1 신경쓰지 않고, 기계마다 다르지도 않고 영어와도 비슷하다. 단 이를 번역하는 프로그램이 조금 복잡한 일을 해야하는데, 이때 번역기를 '컴파일러'라고 한다. (꼭 기계어로만 번역되는 것은 아님)

 

 

 

컴파일러란?

그림 1. 컴파일러란?

한 언어로 쓰여진 프로그램(source program)을 읽어서 다른 언어로 된 의미가 같은 프로그램(target program)으로 번역해주는 프로그램을 말한다.

 

- 고급언어를 저급언어로 번역하면 Compiler

- 동일 언어로 옮기면 Rewritter

- 저급언어를 고급언어로 번역하면 Decompiler

 

 

 

컴파일러의 탄생

세계 최초의 컴파일러 제작자는 해군 제독이자 프로그래머인 그레이스 호퍼(Grace Hopper, 1906 ~ 1992)이다. 

 

1950년대는 FOTRAN,LISP,COBOL 등 고급 프로그래밍 언어가 나타나던 시기였고, 1952년 그레이스 호퍼는 자신이 개발한 UNIVAC용 프로그래밍 언어 A-0을 기계어로 번역하는 컴파일러를 개발했다. 당시 한 사람이 6개월 걸리는 미분 해석기 프로그래밍을 18분만에 해결하는 능력을 가졌다.

 

이후 1957년 IBM의 존 배커스가 최적화 기능이 탑재된 포트란 컴파일러를 개발했으며, 그 외 관련 주요 인물로는 C언어를 만든 데니스 리치, Unix의 창시자 켄 톰슨, C++의 창시자 비야네 스트롭스트룹, GCC의 제작자인 리처드 스톨만, Java를 개발한 제임스 고슬링, 그리고  C# 개발을 이끈 앤더스 헤일스버그 등이 있다.

 

 

 

컴파일러와 인터프리터의 차이 비유

라면 끓이는 것을 예시로 들자면, 컴파일러는 끓이는 방법을 다 읽고 외워서 라면을 끓이는 방식이다. 반면 인터프리터는 끓이는 방법을 한 줄씩 읽고 실행하는 방식이다.

 

 

 

컴파일러 기술의 응용

  1. 컴파일러 제작
  2. IDE 개발
  3. 버그 잡는 도구
  4. 품질 검사 도구
  5. 최적화, 병렬화
  6. 디컴파일러
  7. 바이너리 분석
  8. DL 컴파일러

등이 있다.

 

 

 

프로그램 처리 과정

그림 2. 프로그램 처리 과정

 

 

 

컴파일러의 각 단계

그림 3. 컴파일러의 각 단계

-  Lexical analysis(어휘분석)

source program을 읽어서 문법의 최소 단위인 토큰(token)을 생성하는 일이다.

토큰(token): 키워드, 연산자, 식별자, 상수

 

A := B + 3;
  • A,B (variable)
  • := (assignment symbol)
  • + (plus operator)
  • 3 (numeric)
  • ; (delimeter)

위 예시 식에서는 토큰 6개가 나온다.

 

 

-  Syntax analysis (구문분석)

토큰을 읽어 오류를 검사하고, 올바른 문자에 대한 구문 구조를 만든다. 주로 트리 형태로 만든다.

 

 

-  Semantic analysis (의미분석)

Type checking(형 검사), 각 연산자가 원시 언어의 정의에 맞는 피연산자를 가지는지 검사한다.

 

 

-  Intermediate code generation (중간 코드 생성)

구문 구조를 이용하여 코드 생성을 하거나, 문법 규칙에 의해 생성한다.

ex) position := initial + rate * 60

ex)
temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1   := temp3

 

 

-  Code optimization (코드 최적화)

코드 분석 후 시간, 공간 등을 최적화 한다. 선택적 단계이나, 공간적,시간적 효율화를 위해 필수적이다.

 

 

-  Code generation (코드 생성)

목적 코드를 생성한다. assemble language, machine code

'CS > 컴파일러개론' 카테고리의 다른 글

[컴파일러개론] syntax_derication (구문과 유도)  (0) 2025.11.09
[컴파일러개론] Lexical Analysis (어휘분석)  (0) 2025.11.08
'CS/컴파일러개론' 카테고리의 다른 글
  • [컴파일러개론] syntax_derication (구문과 유도)
  • [컴파일러개론] Lexical Analysis (어휘분석)
tteokbokki-master
tteokbokki-master
공부하며 알아가는 걸 조금씩 정리하고 있어요
  • tteokbokki-master
    용로그
    tteokbokki-master
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • 컴파일러개론
      • 프로그래밍 언어
        • HTML & CSS
        • JavaScript
        • React 기초
        • 파이썬 기초
        • TanStack-Query
        • C언어 기초
        • git
        • 리눅스
        • 코딩테스트 공부
      • 개발 지식
      • 언어학
        • 의미론
      • 회고 및 기록
      • 프로젝트
        • TodoList 만들기
        • 학수고대 프로젝트
      • 기타
        • [JS-0기] 한입 FE 챌린지
        • 서평
  • 인기 글

  • 글쓰기 / 관리
  • hELLO· Designed By정상우.v4.10.3
tteokbokki-master
[컴파일러개론] 개요
상단으로

티스토리툴바