1 / 56

컴파일러

컴파일러. INDEX. 01 컴파일러. 02 C 프로그램 컴파일러. 03 단일 모듈 프로그램. 04 다중 모듈 프로그램. 01 컴파일러. 컴파일러. 프로그래밍언어 번역기 (Translator) 원시 프로그램을 입력으로 받아 의미적으로 동등하면서 직접 기계에서 실행될 수 있는 형태로 번역. Source program. Target program. 컴파일러. 좋은 (Good) 프로그래 밍 언어의 요건 명확한 언어 개념 문법적인 구조 (syntax, grammar)

afi
Download Presentation

컴파일러

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 컴파일러

  2. INDEX 01 컴파일러 02 C 프로그램 컴파일러 03 단일 모듈 프로그램 04 다중 모듈 프로그램

  3. 01 컴파일러

  4. 컴파일러 • 프로그래밍언어 번역기(Translator) • 원시 프로그램을 입력으로 받아 의미적으로 동등하면서 직접 기계에서 실행될 수 있는 형태로 번역 Source program Target program

  5. 컴파일러 • 좋은(Good) 프로그래밍 언어의 요건 • 명확한 언어 개념 • 문법적인 구조(syntax, grammar) • 의미(semantics) • 프로그래머의 생각을 자연스럽게 표현 • 호환성(이식성), 신뢰성, 모듈화, 효율성 • 언어의 확장성이 우수 • 좋은 프로그래밍 환경

  6. 컴파일러 • Ada • 구조화되고, 통계학적 형태를 가지고, 명령적이며, 객체 지향적인 고급 수준의 컴퓨터 프로그래밍 언어 • 1977년에서 1983년까지 수백 개의 프로그래밍 언어를 대신할 목적으로 CII 허니웰 벌의 진 이히비아가 주도한 팀에서 고안 • C나 C++의 몇 가지 작업이 같지만, Ada는 매우 강력한 유형 시스템의 언어

  7. 컴파일러 • Ada • Hello world

  8. 컴파일러 • C++ • C 언어에 객체지향 프로그래밍을 지원하기 위한 내용이 덧붙여진 것 • 현재 C와 C++가 명확한 구별 없이 혼재되어 사용되는 컴파일러가 대부분임

  9. 컴파일러 • JAVA • 썬 마이크로시스템즈의제임스고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이며, 썬 마이크로시스템즈에서 무료로 제공 • 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용되는 언어이며, 모바일 기기용 소프트웨어 개발에도 널리 사용중

  10. 컴파일러 • JAVA • Hello world

  11. 컴파일러 • 프로그래밍 언어 번역기 종류 • 컴파일러(Compiler) • 인터프리터(Interpreter) • 어셈블러(Assembler) • 전처리기(Preprocessor) • et cetera..

  12. 컴파일러 • 컴파일러(Compiler) 정의 • 고급 언어로 쓰여진 프로그램을 어떤 특정한 컴퓨터에서 직접 수행 가능한 형태의 프로그램으로 번역해 주는 시스템 프로그램 High-level Source Program Compiler Object Program (Assembly Language, Machine Language) • C compiler • test.c => C-complier => test.obj

  13. 컴파일러 • 크로스 컴파일러(Cross Compiler) 정의 • 원시 프로그램을 컴파일러가 수행되고 있는 기계에 대한 기계어로 번역하는 것이 아니라 다른 기종에 대한 기계어로 번역하는 컴파일러 • SPARC 컴퓨터에서 Intel 8060/80386 코드 생성 C 컴파일러 목적프로그램(SPARC) C 프로그램 C 크로스 컴파일러(intel) 목적프로그램(Intel) SPARC 컴퓨터

  14. 컴파일러 • 인터프리터(Interpreter) 정의 • 원시 프로그램을 입력으로 받아 목적 언어 또는 프로그램으로 변환하지 않고, 직접 실행해서 결과를 출력해주는 시스템 프로그램 • HTML 인터프리터, Bytecode인터프리터(Java) 입력 데이터 원시 프로그램 Interpreter 실행 결과

  15. 컴파일러 • 전처리기(Preprocessor) 정의 • 프로그래밍 언어에 유용한 기능들을 추가 • 언어 확장(Language eXtension) • 확장된 프로그램은 기본 언어에 대한 언어 번역기에 의해 번역 전처리기 번역기 확장된 원시 프로그램 원시 프로그램 목적 프로그램

  16. 컴파일러 • 전처리기(Preprocessor) • #include • #define • #if • #ifdef • #undef • #pragma • #line • #error

  17. 컴파일러 • 매크로(Macro) • 유사한 원시 코드를 매크로로 정의하고 필요할 때 마다 확장 • 프로그램의 생산성을 증가 • Ex. #define MAX 1000

  18. 컴파일러 • 컴파일러의 개략적인 구조 • 원시 프로그램 : Source Program • 목적 프로그램 : Target Program • 전단부: Front-end 하단부 : Back-end • 중간코드 : Intermediate Code (Ex.. 어셈블리어) 원시 프로그램 전단부 중간코드 후단부 목적 프로그램

  19. 컴파일러 • 전단부(Front-End) • 원시 프로그래밍 언어 종류에 의존적 • 원시 프로그램을 분석, 중간 코드 생성 • 원시 프로그램마다 전단부가 각각 존재 • 어휘 분석, 구문 분석, 의미 분석, 중간 코드 생성

  20. 컴파일러 • 후단부(Back-End) • 목적 기계(Target Machine)에 의존적 • 중간 코드를 특정 기계에 대한 목적 코드로 번역 • 목적 기계마다 각각의 후단부가 존재 • 목적 코드 생성, 코드 최적화 단계

  21. 02 C 프로그램 컴파일러

  22. C 프로그램 컴파일러 • 대부분의 유닉스 유틸리티와 상용 프로그램들은 C (또는 C++)로 작성되어 있음 • 일부 UNIX 시스템에는 C 컴파일러가 기본적으로 내장되어 있으며, C 언어를 알지 못하고서는 UNIX시스템을 깊이 있게 이해하기 어려움 • 최근에는 C 컴파일러를 UNIX와 별도로 판매하는 것이 일반적임 (cc) • 공개된 C 컴파일러로 gcc (GUN cc) 컴파일러가 널리 사용됨

  23. C 프로그램 컴파일러 • C 컴파일러 사용법 • cc [-options] C-file • gcc [-options] C-file

  24. C 프로그램 컴파일러 • 기본적인 사용법 • gcchello.c • hello.c를 컴파일하여object file인 hello.o를 생성 • 또한, 실행 가능한 파일(executable file)로서 a.out을 생성

  25. C 프로그램 컴파일러

  26. C 프로그램 컴파일러 • 주요 옵션(-c) • gcc –c hello.c • Object code(기계어 코드)만 생성하며, 실행 파일은 만들지 않음 • 상기 예의 경우, hello.c를 컴파일하여object code인 hello.o를 생성

  27. C 프로그램 컴파일러

  28. C 프로그램 컴파일러 • 주요 옵션(-o) • gcc –o hello hello.c • C 컴파일러는 실행 파일의 default 이름으로 a.out을 생성하며, 상기 –o 옵션을 사용하여 원하는 파일명으로 실행파일을 바꿀 수 있음 • 여러 C 파일(혹은 object file)을 묶어서 하나의 실행 파일을 생성할 수도 있음

  29. C 프로그램 컴파일러

  30. C 프로그램 컴파일러 • 주요 옵션(-g) • gcc –g hello hello.c • 디버거라는 프로그래밍을 하는데 있어서 매우 유용한 Tool로 개인적으로 반드시 숙지해야 함

  31. C 프로그램 컴파일러

  32. C 프로그램 컴파일러 • 주요 옵션(-s) • gcc –S hello.c • 어셈블리 언어(Assembly Language)로 컴파일 함 • 상기 예의 경우 hello.s의 어셈블리 파일이 생성됨

  33. C 프로그램 컴파일러

  34. C 프로그램 컴파일러

  35. C 프로그램 컴파일러 • 주요 옵션(-l) • gcc –o math_hellomath_hello.c -lm • 라이브러리(대개 /usr/lib 디렉토리에 존재)를 링크하기 위하여 사용함 • -lxyz는 libxyz.a를 링크하라는 의미임 (예를 들어, -lm은 libm.a의 링크를 의미함)

  36. C 프로그램 컴파일러

  37. 03 단일 모듈 프로그램

  38. 단일 모듈 프로그램 • 하나의 C 프로그램 파일로 프로그래밍 된 경우 • 매우 간단한 프로그램인 경우에 단일 모듈 프로그램이 유리함

  39. 단일 모듈 프로그램

  40. 단일 모듈 프로그램

  41. 04 다중 모듈 프로그램

  42. 다중 모듈 프로그램 • 여러 개의 C 프로그래밍 파일들로 프로그래밍된 경우 • 복잡하여 대단위 프로그램인 경우에 다중 모듈 프로그램을 사용함 (일반적으로, 모든 프로그램은 다중 모듈로 구성된다고 할 수 있음)

  43. 다중 모듈 프로그램 • 단일 모듈 프로그램의 문제점 • 코드의 재사용(reuse)이 어렵고, 여러 사람이 참여하는 프로그래밍이 불가능함 • 예를 들어, 앞서“main.c”프로그램을 작성하는데 있어서의 문제점은 다른 프로그램에서 “operation_plus”함수와 “operation_minus”함수를 사용할 수 없다는 점임 • 즉, 다른 프로그램에서 operation_plus함수를 사용하고자 할 경우, 이 부분을 자르고 붙여서 원하는 프로그램에 삽입하여 사용하여야 하는 어려움이 있음

  44. 다중 모듈 프로그램 • 함수의 재사용 • 앞의 예에서 “operation_plus”함수를 공유하는 방법은 “main”프로그램에서 해당 함수를 따로 분리하여 별도 파일로 작성한 후, 해당 파일을 컴파일한 후 원하는 프로그램에 링크하여 사용하는 것임 • 이러한 기법은 동시에 많은 프로그램들이 이 함수를 사용할 수 있게 하며, 이러한 특성을 가진 함수를 재사용(reusable) 함수라 함.

  45. 다중 모듈 프로그램 • operation_main.c의 소스 코드

  46. 다중 모듈 프로그램 • 재사용 함수의 준비 • 재사용할 수 있는 함수를 준비하기 위해서는 • 함수의 소스 코드를 포함하는 소스 코드 파일과 • 함수의 prototype을 포함하는 헤더 파일을 함께 작성해야 하며, 헤더 파일은 접미어“.h”를 갖도록 이름 지어야 한다.

  47. 다중 모듈 프로그램 • 재사용 함수의 준비 • 그 후에 cc(gcc)의 –c 옵션을 사용하여 소스 코드 모듈을 컴파일하여“.o” 형태의 object file을 생성한다. • object file은 실행 파일이 생성될 때 다른 object file과 결합이 가능하게 해주는 symblotable 정보와 함께 machine code를 포함한다.

  48. 다중 모듈 프로그램 • operation_plus.c와 operation_minus.c소스코드

  49. 다중 모듈 프로그램 • operation_plus.h와 operation_minus.h소스코드 • 헤더 파일에 포함되는 일반적인 내용 • 함수의 prototype (상기 파일이 예제에 해당함) • 상수에 대한 정의 (#define MY_PI 3.141592) • 전역 변수에 대한 정의 (extern intcommon_pi)

  50. 다중 모듈 프로그램 • 개별 파일을 각기 컴파일하고 링크하기 • 각 소스 코드 파일을 개별적으로 번역하기 위해서는 cc(gcc)의 –c 옵션을 사용 • gcc –c operation_main.c • 각 소스 코드 파일은 “.o”를 갖는 각기 다른 object file을 생성하게 됨 • 각각의 object file을 링크하여 실행 파일을 생성함

More Related