9/17 강의보고서를 쓰며...
* 컴파일러의 정의
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. 프로그램이 언어론 시간에는 그냥 각 단계와 단계별 하는 일만 알았었는데
앞으로 좀 더 깊게 알아갈듯!!!
중요한 컴파일러에 대해서 익숙한듯 익숙하지 않은 용어들과 공부할 것 같당 헤헿