정리가 언제 끝날련지 모르겠지만, 23년도 1학기 컴파일러 과목 조교를 다시 맡을 예정이라 공부 겸 준비 겸, 그리고 과목 학생들이나 연구실 동료들에게 도움이 될까하여 책 쭉 훑으면서 정리해보려고 한다. 근데 내 생각에 3월 중순?안에는 절대 못끝낸다, 껄껄... 거의 필사에 가까운 수준이라 책을 보아도 무관하다.



고급 언어로 쓰여진 프로그램이 컴퓨터에서 실행되기 위해 해당 언어 번역기가 있어야 하는데, 컴파일러는 언어 번역기 중 하나로 고급 언어 프로그램을 입력으로 받아 의미적으로 동등하면서 직접 기계에서 실행될 수 있는 형태로 번역하는 작업을 한다.

컴파일러를 효과적으로 제작하기 위하여 기능적으로 독립적인 각 단계로 나누어 다중 패스 컴파일러로 구현하고 있고, 프로그래밍 언어의 다양화와 하드웨어 기술의 발달에 따라 많은 컴파일러가 필요하게 되어 컴파일러 자체를 자동화하려는 연구도 활발하다.


1.1 프로그래밍 언어

언어는 자연 발생적인 자연 언어와 필요에 의해 인위적으로 만든 인공 언어로 구분할 수 있는데, 인공 언어 중 하나가 컴퓨터 언어이며 이는 인간과 컴퓨터 사이를 연결해주는 역할을 한다. 컴퓨터 언어 중 어떤 일을 컴퓨터로 처리하기 위해서 일련의 과정을 기술할 때 사용되는 언어가 프로그래밍 언어이다.

  1. 프로그래밍 언어는 사용 목적에 따라 특수 목적 언어일반 범용 언어로 나눌 수 있다.

    1) 특수 목적 언어

    • 컴퓨터의 특정한 응용에 적합하도록 고안된 언어
      • 모의 실험용 언어인 CSMP, GPSS
      • DBMS에서 제공하는 질의 언어
    • 특정한 소프트웨어 시스템에서 제공하는 사용자 접속 언어

    2) 일반 범용 언어

    • 모든 컴퓨터 응용에 적합하도록 고안된 언어
    • 흔히 사용하고 있는 대부분의 프로그래밍 언어
  2. 프로그래밍 언어는 형태와 기능에 따라 저급 언어고급 언어로 나눌 수 있다.

    1) 저급 언어

    • 모든 컴퓨터 구조에 관한 지식을 요구하며 프로그래머의 생각을 자연스럽게 표현할 수 있는 언어 구조를 갖추고 있지 못함
    • 자기 자신에 대한 고유의 컴퓨터에서만 실행될 수 있음
    • 기계어
      • 0과 1의 조합으로 실행의 의미를 표현하는 언어
      • 복잡하고 어렵다는 단점이 있음
    • 어셈블리어
      • 기계어의 단점을 약간이나마 보완하기 위해 기호를 사용하여 프로그래밍을 할 수 있는 언어
      • 10110101과 같은 기계어를 ADD라는 명령 기호로 대치함으로써 기계어의 단점 완화

    2) 고급 언어

    • 특정한 컴퓨터 구조에 대한 지식이 없어도 프로그래머의 생각을 자연스럽게 표현할 수 있도록 저급 언어에서는 제공되지 않은 다양한 언어의 기능을 갖추고 있음
    • 자연 언어와 비슷한 형태로 설계되어 언어 번역기만 갖추면 모든 기종에서 수행될 수 있는 특징을 갖고 있음
    • 저급 언어에 비해 배우기가 쉽고 프로그래머의 생산성(productivity)을 높일 수 있을 뿐만 아니라 한 기종에서 다른 기종으로 프로그램을 쉽게 가져갈 수 있는 이식성(portability)이 우수함
    • 저급 언어보다 디버깅이 용이하며 기계 독립적이기 때문에 특정한 컴퓨터의 구조를 모르고도 프로그래밍을 할 수 있음

    2-1) 고급 언어의 종류 및 특징

    • 코볼 Cobol : COmmon Business Oriented Language, 1960년대 초에 코다실(CODASYL) 위원회에서 고안하여 발표한 언어, 주로 업무용으로 사용, 1968년과 1974년에 걸친 표준화 작업으로 표준 코볼(ANSI Cobol)이 제정되어 업무용으로는 표준 언어처럼 전산화 작업에 쓰이고 있으나 많은 약점이 존재하기 때문에 다른 대체 언어 사용 권장
    • 포트란 Fortran : FORmula TRANslation, 1950년대 말부터 1960년대 초에 걸쳐 J. Backus를 중심으로 개발한 과학 계산용 언어로 수학적인 식을 직접 컴퓨터 프로그램에 표현할 수 있도록 설계된 언어, 표준화 과정을 거쳐 1977 Fortran77이 발표되어 현재까지 널리 사용되고 있는 언어, (요사이)병렬 언어인 HPF High Performance Fortran이 발표되어 초고속 컴퓨팅에 새롭게 주목 받는 언어가 됨
    • 알골 Algol : ALGOrithmic Language, 1960년에 발표한 Algo160과 1968년에 수정 보완하여 IFIP의 WG2.1에서 발표한 Algo168이 있음, 수치 계산용 언어로 구문 구조를 형식 문법으로 표현한 최초의 언어이며 언어의 구조와 의미가 명료하고 특히 제어 구문 구조가 우수하여 이후 개발된 많은 프로그래밍 언어에 큰 영향을 줌
    • 파스칼 Pascal : 1970년대 초에 N. Wirth가 고안한 알골 기반 언어, 프로그래밍에 대한 근본적인 개념을 명확하고 자연스럽게, 체계적인 원리로 가르칠 수 있도록 프로그래밍 언어론적인 관점에서 설계된 언어, 다양한 자료형을 제공하여 자료구조ㅡ 알고리즘 설계 등 전산학적인 응용에 적합한 언어
    • C 언어 : B 언어를 기반으로 D. M. Ritchie가 1974년경에 고안하여 설치한 언어, 시스템 프로그래밍을 위한 효율적, 기본 운영체제인 UNIX가 널리 확산됨에 따라 모든 응용에 사용하게 됨, 1988년경에 이르러 표준 C(ANSI C)가 제정되어 현재 가장 많이 사용하는 언어가 됨, C++ 언어의 기본 언어로 사용되고 객체 지향 프로그래밍이 각광을 받기 시작하여 C 언어의 확고한 위치는 앞으로도 지속될 것으로 보임
    • 에이다 Ada : 1980년 미 국방성(DoD)에서 발표한 언어, 실시간 응용에 적합하도록 설계된 언어로 J. Inchbiah가 이끄는 그룹에서 제안한 언어를 최초의 프로그래머로 일컬어지는 August Ada의 이름을 땀, 개발 목적은 신뢰성(reliability), 단순성(simplicity), 모듈화(modularity), 효율성(efficiency) 등, 언어의 특징으로는 패키지(package), 포괄 구조(generic features), 분리 컴파일, 다중 처리(multi-tasking) 등
    • C++ 언어 : C 언어에 클래스 개념을 추가하여 객체 지향 프로그래밍이 가능하도록 1983년 경에 B. Stroustrup이 개발한 언어, 객체 지향 프로그래밍 언어의 특징인 클래스(class), 상속성(inheritance), 다형성(polymorphism) 등을 구비하고 있지만 순차 언어인 C 언어에 기반을 두고 있어 진정한 의미에서 객체 지향 프로그래밍 언어라고는 볼 수 없음, 객체지향 개념이 정립되어감에 따라 C 언어와 자리바꿈을 하고 있음
    • 자바 Java : 인터넷 및 분산 환경 시스템에서 효과적으로 응용 프로그램을 작성할 수 있도록 설계된 언어, 객체지향 패러다임의 특성과 다향한 개발 환경을 지원, 언어적인 측면에서 예외 처리와 스레드(thread)를 지원, 1996년 여름에 썬 마이크로시스템즈사의 James Gosling에 의해 발표되어 운영 체제 및 하드웨어 플랫폼에 독립적인 차세대 언어로써 각광받고 있음
    • C# C Sharp : 마이크로소프트사에서 2000년 중반에 발표한 범용 객체지향 언어로 .NET Framework에서 실행될 수 있는 응용프로그램을 효과적으로 작성할 수 있도록 설계, Jogn Gough를 중심으로 개발된 언어로 자바와 비슷한 개념과 언어 기능을 갖추고 있으나 실행은 JIT(Just In-Time Compilation) 방법을 사용하여 자바의 단점을 보완하려 함, 자바가 갖춘 대부분의 기능을 .NET 환경에서 효율적으로 구현하려는 의도로 간주할 수 있음, C# 언어에서 사용한 중간 언어는 MSIL(MicroSoft Intermediate Language)이고 실행 환경은 CLR(Common Language Runtime)

  • 인터넷 프로그램 : 웹 브라우저에서 실행될 수 있는 프로그램
  • 인터넷 프로그래밍 : 인터넷 프로그램을 작성하는 일
    • 서버사이드 언어 : PERL, PHP, ASP, JSP 등
    • 클라이언트사이드 언어 : HTML(Hyper Text Markup Language), DHTML, 자바스크립트, 자바 애플릿 등
  • 좋은 프로그래밍 언어의 요건
    1) 언어의 개념이 명료해야하며, 문법적인 구조(syntax)와 그에 따른 의미(semantic)가 일관성이 있으며 단순해야 한다.
    2) 프로그래머의 생각을 자연스럽게 표현할 수 있어야 한다.
    3) 프로그램의 호환성, 신뢰성, 모듈화, 효율성 등이 좋아야 한다.
    4) 언어의 확장성이 우수해야 한다.
    5) 좋은 프로그래밍 환경을 갖고 있어야 한다.

컴파일러 :

  • 고급 언어로 작성된 프로그램이 컴퓨터에서 실행되기 위해 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주는 프로그램
  • 고급 언어로 작성된 프로그램을 실행하는 데 있어 의미적으로 동등하며 실행될 수 있는 형태의 프로그램으로 바꾸어 실행

0개의 댓글