본문 바로가기

공부/프로그래밍언어론

프로그래밍 언어 구현 기법

기계어와 무관한 고급 언어로 작성된 프로그램을 실제 기계에서 작동시키려면
번역기가 있어야한다.

프로그래밍 언어를 구현하는 기법으로는 번역 기법(translation)과 인터프리터
기법(interpretation)이 있다.

프로그램의 입장에서는 컴퓨터를 내가 개발한 프로그램을 저장하여 실행할 수
있는 알고리즘과 자료의 총괄 집합으로 본다.

 

이론적으로 고급 언어를 기계언어로 하는 하드웨어를 구성할 수 있지만 속도,
적응성, 비용 증가의 이유로 저급 수준의 언어를 기계 언어로 하는 컴퓨터를

제공한다.

 

번역 기법

번역 기법은 주어진 고급 프로그래밍 언어로 작성된 프로그램을 실제 주어진
컴퓨터의 기계어로 번역하여 동등한 의미의 기계어 프로그램을 만들어 실행시키는
방법이다. 

 - 번역기의 종류

  • 컴파일러(compiler)
    • 원시 언어 :고급 언어
    • 목적 언어 : 실제 기계 언어에 가까운 저급 언어
    • 저급 언어에는 준기계어 형태 또는 어셈블리 언어
  • 어셈블러(assembler)
    • 원시 언어 : 어셈블리 언어
    • 목적 언어 : 준기계어 형태
  • 링키지 에디터(linkage editor)
    • 여러 개의 프로그램(재배치 형태 기계어)을 묶음 로드 모듈 생성
    • 로드 모듈 : 어느 정도 실행 가능한 하나의 기계어 프로그램
  • 로더(loader)
    • 기계어 프로그램(로드 모듈)을 실제 실행 가능한 기계어로 번역해서 주기억
      장치에 적재
  • 프리프로세서(preprocessor)
    • 원시 언어와 목적 언어가 모두 고급 언어인 번역기
    • 고급 언어 프로그램을 다른 고급 언어로 번역 후, 출력된 고급 언어를 이미
      구현된 방법으로 실행시킬 때 사용
    • 고급 언어에 대한 언어 확장하여 구현 시 유용 (C++, concurrent C)

인터프리터 기법

고급 언어 기계를 다른 기계에서 소프트웨어로 시뮬레이션하는 방법

이 인터프리터는 고급 언어로 된 프로그램을 자료로 읽어들여서 기계어 수행과
동일한 알고리즘으로 프로그램의 각 문장을 디코딩하고 실행시킴으로써 고급
프로그래밍 언어를 시뮬레이션하는 것이다.

 

 - 번역기 종류와 인터프리터

인터프리터 기법과 번역 기법의 비교

  • 인터프리터: 직접 입력 프로그램을 실행하는 것
  • 번역기: 입력 프로그램과 동일한 의미의 목적 언어 프로그램 생성
  • 손수 번역 기법: 입력(원시) 언어가 어셈블리 언어(저급 언어)처럼 기계어에 가까운
    언어일 때 주로 사용
  • 순수 시뮬레이션 기법는 운영체제의 작업 제어 언어나 APL과 같은 대화용 언어를
    제외하면 거의 사용되지 않음
  • 번역 효율적인 부분(반복 수행부, 수식 계산 등) 존재
  • 원시 코드의 simulation이 효율적인 부분(I/O routin 등) 존재
  • 순수 번역 기법이나 순수 시뮬레이션 기법은 실제로 거의 존재하지 않음
  • 이 둘의 차이는 언어 자체에 있는 것이 아니라 그 언어를 구현시키는 방법에 있다.

번역 기법의 장단점

  • 실행 시간 효율성 제공(한번 디코딩으로 반복 실행)
    한 번 번역한 코드를 다시 실행시키고자 할 때 다시 번역할 필요가 없다.
  • 번역된 프로그램이 큰 기억 장치를 요구(I/O routin 등)

인터프리터 기법의 장단점

  • 번역 기법과 장단점이 반대임
    고급 언어를 적당한 중간코드까지만 번역해서 곧바로 실행시킨다.
  • 사용자 적응성(flexibility) 제공

하이브리드 기법

  • 프로그램을 실행시키기 쉬운 형태로 번역한 후, 그 번역된 형태의 프로그램을
    디코드하여 시뮬레이션으로 실행
  • 현 대부분의 인터프리터 언어가 이 방법을 따름
    중간 형태 코드가 저급이면 번역 기법으로 간주되기도 함

컴파일러 언어

  • Fortran, Algol, PL/I, Pascal, Cobol, C, Ada
  • 컴파일러 방법의 장점
    • 기계어로 번역된 것을 하드웨어 인터프리터가 디코드하여 실행
       → 빠른 프로그램 실행(효율성)

인터프리터 언어

  • Lisp, Snobol 4, APL, Prolog
  • 구현 방법
    • 번역기가 중간언어를 생성 후, 중간언어로 작성된 프로그램을 소프트웨어
      인터프리터로 실행
      → 하이브리드 방법
    • 컴파일러 방법보다 실행 시간이 비효율적이나 사용자 적응성 제공