Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

임동까스

컴파일러란? 본문

대략적인 IT

컴파일러란?

임동까스 2020. 10. 26. 10:30

컴파일러란?

- 인간이 만든 프로그램을 기계가 이해 하도록 기계어로 변환하는 변환기(프로그램)

- 소스코드 문법의 오류를 체크하고, 컴파일 과정을 수행한 후, 목적 파일을 반환을 한다.

 

기계어란?

- 기계가 이해하는 2진수로 작성된 언어

 

과정

- 소스코드 작성 -> 컴파일 -> 오브젝트파일 -> 링커 -> 실행파일 -> 실행

 

컴파일( 고급언어 -> 어셈블리어 -> 기계어 )

 

언어 번역기(language translator)


- 원시 프로그램(Source code)
고급언어 프로그램 소스

- 목적 프로그램(Target code)
저급언어(기계어, 어셈블리어) 프로그램

- 언어 번역기
컴파일러, 인터프리터, 프리프로세서(pre-processor)
어셈블러, 교차 컴파일러(cross compiler) 등

 

인터프린터언어란?

- 코드를 한 줄 한 줄 읽어가며 처리하는 프로그램

- 한 줄이 바뀔 때마다 즉시 검사를 수행

 

컴파일 언어 인터프린터 언어
소스 코드 작성
컴파일 프로그램 이용 , 컴파일
실행 파일이 만들어짐
실행 파일을 실행시킴
속도가 빠름
C++,Visual C++, Object C, Java 등
소스 파일을 해석 엔진 프로그램을 이용, 소스를 한 줄씩
실행 파일이 만들어지지 않음
속도가 느림
Java, 자바스크립트 등

 

구조 

 

컴파일 과정
 - 전단부 (front-end) : 분석
 - 후단부(back-end) : 생성

전단부 (분석 과정)
 - 어휘 분석(lexical analysis) : 토큰 단위로 구분
 - 구문 분석(syntactic analysis, parsing): parse tree 생성
 - 의미 분석(semantic analysis)

후단부 (생성 과정)
 - 중간코드 생성 : machine independent
 - 코드 최적화(code optimization)
 - 목적 코드 생성

 

어휘 분석 (lexical analysis)
- 어휘분석기(lexical analyzer) 또는 스캐너(scanner)
 입력 : 원시 코드 (source code)
 출력 : 토큰 열(token sequence)

- 토큰(token) : 의미가 있는 최소 단위
 ex) my_article[index+1]=x+100;

 

구문 분석 (syntax analysis)
- 구문분석(syntax analysis) 또는 파싱(parsing)
- 구문분석기(syntax analyzer) 또는 파서(parser)

- 구문분석이란?
 문장의 구조 분석, 트리 형태로 출력

- 입력
 토큰 열(token sequence) : 어휘 분석 결과
- 출력
 파스 트리(parse tree) 또는 구문 트리(syntax tree)

 

의미 분석 (semantic analyzer)
- 의미 분석 단계에서는 구문 트리와 심볼 테이블에 있는 정보를 이용하여 소스 코드가 언어 정의에 의미적으로 부합하는지를 검사한다.

의미 분석의 중요한 기능은 타입 검사 (type checking)이다.

컴파일러는 타입 검사를 수행하면서 피연산자가 연산자에 부합하는지를 검사한다.

의미 분석기는 정수와 문자열의 덧셈, 값을 0으로 나누는 행동 등과 같이 의미적으로 올바르지 않은 코드의 존재 유무를 검사한다

 

코드 생성기 (Code generator)

- 이전 단계를 통해 분석된 소스 코드를 목표 기계에 맞는 어셈블리어나 기계어로 변환하는 단계이다.

컴파일 타임 바인딩을 이용하는 시스템의 경우에는 코드 생성 단계에서 프로그램의 기억 장소 할당이 이루어진다.

'대략적인 IT' 카테고리의 다른 글

그래픽 카드의 역할  (0) 2020.10.26
기계학습 공부  (0) 2020.10.24
IP와 도메인  (0) 2020.10.23
Linux  (0) 2020.10.23
CPU란?  (0) 2020.10.23