공학/컴파일러

9/17 강의보고서를 쓰며...

둥둥잇 2014. 9. 17. 01:56

* 컴파일러의 정의

A compiler is a computer program which translates other programs written in a particular high-level programming language into executable code for a specific target computer

고급 언어로 쓰여진 프로그램을 어떤 특정한 컴퓨터에서 직접 실행 가능한 형태의 프로그램으로 번역해주는 컴퓨터 프로그램


* 번역기

- 정의 : 한 프로그래밍 언어로 작성된 프로그램<소스 언어>을 입력받아 그와 같은 의미를 갖는 다른 프로그래밍 언어로 된 프로그램<목적 언어>을 출력해주는 시스템 프로그램

- 번역기 종류

  - 어셈블러  : 어셈블리어를 기계어로

  - 인터프리터 : 중간 언어를 받아 목적 언어로 번역하지 않고 직접 실행!!

  - 컴파일러


* 컴파일러의 5단계

========상단부==========> 언어 종속

1. 어휘 분석 단계 lexical

- 스캐너에 의해 일련의 토큰 생성

- 토큰 : 문법적으로 의미를 갖는 최소의 단위. 프로그램은 토큰의 열로 구성

- 토큰 관련 개념

   일반 형태 : 프로그래머가 프로그래밍할 때 사용한 명칭과 상수

   특수 형태 : 언어 정의 시, 언어 설계자가 결정하는 지정어, 연산자 기호, 구분자 등

   토큰 번호 : 토큰들의 효율적인 처리를 위해 고유의 내부번호를 정수 형태로 갖는 것

cf. 요즘엔 컴파일러 도구가 있기 때문에

     도구에 형식만 지정해 주면 토큰 생성 해줌


2. 구문 분석 단계 syntax

- 파서에 의해 구문 구조 즉, 트리 형식을 만듦

- 언어 분석 단계로부터 토큰을 받아 에러를 체크하고(문법을 확인하고) 구문 구조를 트리 형태로 만들어


3. 중간 코드 생성 단계 intermediate code

- 추상 구문 트리로부터 의미 검사 후 중간 코드 생성

- 관련 개념

   형 검사 : 각 연산자가 소스 언어의 정의에 맞는 피연산자를 가지는지

   형 변환 : 연산을 수행하기 전 정수를 실수로 바꾸어 주는 작업


========후단부==========> 기계 종속

4. 코드 최적화 단계 optimizer

- 코드를 보다 효율적으로 만들어 공간 및 시간 절약


5. 목적 코드 생성 단계

- 중간 코드로부터 목적 기계에 대한 코드 생성



cf. 크로스 컴파일러

소스 프로그램을 컴파일러가 실행되고 있는 기계에 대한 기계어가 아니라 다른 기종에 대한 기계어로 번역하는 컴파일러

=> 컴파일러가 있는 machine에 대한 것이 아니라 다른 machine에 대한 기계어로 번역





p.s. 프로그램이 언어론 시간에는 그냥 각 단계와 단계별 하는 일만 알았었는데

앞으로 좀 더 깊게 알아갈듯!!!

중요한 컴파일러에 대해서 익숙한듯 익숙하지 않은 용어들과 공부할 것 같당 헤헿