개요

컴파일러의 개요에 대해 알아본다. 이 글은 내공 있는 프로그래머로 길러주는 컴파일러의 이해의 내용을 기반으로 함을 미리 밝힌다. 책 내용이 괜찮으니 관심있으신 분들은 사보는것을 추천한다.(필자는 이해관계자는 아님을 밝힌다.)

목차

컴파일러 강의 다른 포스팅은 아래의 링크를 참고하자.

학습목표

  • 컴파일러가 왜 필요한지 언어와 연관지어 이해
  • 컴파일러를 포함한 여러 번역기들 이해, 언어 처리 시스템 이해

컴파일러의 필요성

  • 언어란?
    • 의사전달을 하기 위한 도구
  • 언어의 종류
    • 자연언어 : 인간의 언어
    • 형식언어 : 프로그래밍 언어
  • 프로그래밍 언어
    • 어떤 문제를 풀기 위해 일련의 과정을 기술하는 언어
  • 프로그래밍 언어의 분류
    • 저급언어
    • 고급 언어

저급언어

  • 기계어
    • 0/1로 구성된 언어
    • 매우 어렵고 복잡하다는 단점
  • 어셈블리어
    • 기계어의 단점을 보완하기 위해 나옴
    • 0/1 대신 ADD, SUBT 등의 명령 기호로 기술
  • 어셈블러의 필요성
    • 어셈블러를 컴퓨터가 이해하는 기계어로 번역

번역기의 필요성

외국인의 언어를 통역할 수 있는 통역사가 필요한데 이게 컴파일러임

고급언어

  • 어셈블리어도 저급언어의 수준을 벗어나지 못해 인간 중심의 고급언어가 탄생함
  • 고급언어도 저급언어 처럼 기계어로 변환하는 번역기가 필요함

컴파일러가 필요한 이유(정리)

  • 인간의 문제를 해결하기 위해 컴퓨터를 사용함
  • 컴퓨터와 의사소통을 하기 위해 언어가 필요함
    • 인간이 기계어를 사용하여 문제를 표현하기란 어렵기 때문에 사람 중심 언어인 고급 언어를 사용
    • 인간이 사용하는 고급 언어는 컴퓨터가 이해하지 못함
    • 따라서 인간이 사용하는 고급 언어를 기계어로 변환해주는 번역기인 컴파일러가 필요함

번역기의 종류

  • 번역기란?
    • 입력 : 한 프로그래밍 언어로 작성된 프로그램
    • 출력 : 다른 프로그래밍 언어로 된 프로그램
  • 번역기의 종류와 기능

어셈블러

  • 어셈블리어로 작성된 소스를 기계어로 번역하는 번역기
  • 어셈블리 코드
    • 사람이 좀더 이해하기 쉽게 기호화 한 것
    • 예제

컴파일러

  • 고급언어로 작성된 소스의 번역기

프리프로세서(preprocessor, 전처리기)

  • C의 #include에 같은것에 해당함
  • 원시언어와 목적언어가 모두 고급언어

C 프리프로세서

  • 파일 포함 기능(#include)
  • 매크로 처리 기능
    • #define #definemax 45 => max 가 나타날 때마다 45 로 바꾸어 줌
  • 조건부 컴파일 기능
    • OS에 따라 조건을 다르게 하여 컴파일 할 때 사용

인터프리터

  • 번역과 동시에 실행
  • Python과 같은 대화형 언어로 구현할 때 사용
  • 번역과 실행을 같이 수행하기 때문에 특히 반복문일 때 실행시간이 많이 늘어남

크로스 컴파일러

  • 소스를 내 PC의 기계어가 아닌 다른 컴퓨터의 기계어로 번역
  • 컴퓨터에서 컴파일 해서 임베디드 시스템으로 다운로드해서 실행

바이트코드 컴파일러

  • 소스를 바이트 코드라 불리는 중간코드로 컴파일 한뒤 바이트 코드는 JVM에서 인터프리트 되어 실행
  • 혼합형 컴파일러(컴파일러 + 인터프리터)

언어처리

  • 문제에 대해 알고리즘을 작성해서 소스로부터 목적 프로그램을 생성
  • 이때 컴파일러 이외의 다른 번역기가 필요할 수도 있음

요약

  • 컴파일러의필요성
    • 인간은 문제를 풀기 위해 컴퓨터를 사용하며 컴퓨터와 의사소통을 하는 데 언어가 필요
    • 컴퓨터는 기계어를 사용하지만 인간은 사람중심 언어인 고급 언어를시용
    • 따라서 컴퓨터와 인간이 사용하는 언어를 기계어로 번역해주는 컴파일러가 필요
  • 프로그래밍언어
    • 절차 언어는 명령의 순차적 실행. 메모리를 표시히키 위한 변수 사용, 값을 저장하기 위한 치환문 사용 등의 특징을 지님
    • 프로그래밍 언어의 종류
    • 수치 계산용 언어: 포트란, 알골, 베이직
    • 사무 처리용 언어: 코볼
    • 인공지능 언어: 리스프, 프롤로그, 스노볼
    • 시스템 프로그래밍 언어 : C
    • 기타 언어 : APL, 파스칼, 에이다, 자바, 인터넷 프로그래밍 언에;펄. PHP. ASP, JSP, HTML, DHTML, 자바스크립트, 지싸애플릿)
    • 매개변수 전달 방법 : 참조 호출은 실매개변수의 주소를 대응되는 형식 매개변수로 넘겨주는 것이고, 값 호출은 실매개변수와는 별도로 형식 매개변수에 대한 메모리를 별도로 할당하는 방법 또한 이름호출은 형식 매개변수의 이름이 사용될 때마다그에 대응하는실매개변수자체가시용된 것처럼 매번 다시 계산하여 시행하는 방법
    • 블록구조 : 프로그램을 여러 단계의 블록으로 나누어 작성할수 있도록해주는 언어 구조
    • 재귀법 : 수학적 귀납법이라고도 하며, 자신을 정의할 때 자기 자신을 재참조하는방법
    • 객체지향프로그래밍 : 객체라는작은단위로 모든 처리를 기술하는프로그래밍 방법
  • 번역기의 종류
    • 번역기는하나의 프로그래밍 언어로작성된 프로그램을 그와 동등한 의미를 가진 다른 프로그래밍 언어로 된 프로그램으로 변환하는 프로그램
    • 번역기의 종류
    • 어셈블러: 어셈블리어로 작성된소스 프로그램을 그에 대응하는 기계어로 번역된목적 프로그램으로 변환해주는 번역기
    • 컴파일러: 고급 언어로 작성된 소스 프로그램을 그에 대응하는 어셈블리어나 기계어로 번역된 목적프로그램으로 변환 해주는 번역기
    • 프리프로세서: 소스 프로그램과목적 프로그램이 모두 고급 언어인 번역기
    • 인터프리터: 고급 언어를 입력으로 받아 번역과 동시에 실행한후 그 결과를 출력하는 번역기
    • 언어처리 시스템은 일반적인 문제를 해결하는 데 번역기를 시용하여 소스 프로그램부터 실행 결과까지 도출하는 과정을 말함