"컴파일러"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
(새 문서: '''컴파일러(Comfiler)'''란고급언어(사람이 구분하기 쉬운 언어)로 작성된 프로그램을 컴퓨터가 이해할 수 있는 기계어로 번역하는 것을...)
 
1번째 줄: 1번째 줄:
'''컴파일러(Comfiler)'''란[[고급언어]](사람이 구분하기 쉬운 언어)로 작성된 프로그램을 컴퓨터가 이해할 수 있는 기계어로 번역하는 것을 컴파일이라 하고 이것을 실행 시키는 [[프로그램]]을 컴파일러라고 한다. 또한 시스템에서 실행되는 객체 코드를 생성하는 컴파일러를 [[크로스 컴파일러]]한다.
+
'''컴파일러'''(compiler)란 [[프로그래밍]] 과정에서 인간이 작성한 [[소스 코드]]를 [[컴퓨터]]가 이해할 수 있는 [[기계어]] 또는 [[바이트코드]]로 번역해 주는 [[프로그램]]을 말한다. '''처리기'''(processor)라고도 한다. 시스템에서 실행되는 [[객체]] 코드를 생성하는 컴파일러를 [[크로스 컴파일러]]라고 한다.
  
 +
== 역사 ==
 +
컴파일러(comfiler)라는 개념은 [[그레이스 호퍼]](Grace Hopper)가 "컴퓨터의 교육"(The Education of a Computer)이라는 제목의 보고서를 발표함으로서 최초로 정의되었다. 보고서에서 호퍼는 고급 [[프로그래밍 언어]]로 작성된 코드를 컴퓨터가 이해할 수 있는 이진(binary) 코드로 만들어 주는 기술을 소개해, 오늘날 컴파일러의 개념과 프로그래밍 코드의 해석방법을 정의했다. 호퍼는 자신이 "A-0"이라는 컴파일러를 직접 개발하기도 했다.
  
==역사==
+
== 실행 단계 ==
컴파일러(Comfiler)라는 개념은 그레이스 호퍼(Grace Hopper)가 컴퓨터의 교육(The Education of a Computer)이라는 제목의 보고서를 발표함으로서 최초로 정의되었다. 보고서에서 호퍼는 고급 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 이진(binary)코드로 만들어 주는 기술을 소개해, 오늘날 컴파일러의 개념과 프로그래밍 코드의 해석방법을 정의했다. 호퍼는 자신이 A-0이라는 컴파일러를 직접 개발하기도 했다.
+
컴파일러는 4가지의 주요한 단계를 거쳐 실행된다.
  
 +
;1단계 스캔
 +
스캐너(scanner)는 [[소스 코드]]에서 한 번에 한 문자씩 읽고 어떤 문자가 어느 라인에 있는지 추적한다.
  
==컴파일러의 실행 단계==
+
;2단계 어휘 분석
'''컴파일러는 4가지의 주요한 단계를 실행한다.'''
+
컴파일러는 소스 코드에 나타나는 문자 시퀀스를 일련의 문자열인 토큰으로 변환한다. 이 문자는 어휘 분석기라는 프로그램에서 특정한 규칙에 의해 연결이 된다. 어휘 분석기는 기호 표를 사용하여 생성된 토큰에 해당하는 단어를 소스 코드에 저장한다.
  
===스캔===
+
;3단계 구문 분석
스캐너는 소스 코드에서 한 번에 한 문자씩 읽고 어떤 문자가 어디 라인에 있는지 추적한다.
+
이 단계에서는 사전 분석을 통해 구문 분석을 수행한다. 사전 처리를 통해 어휘 분석 중에 작성된 토큰이 사용법에 따라 올바른 순서인지 여부를 결정한다. 원하는 결과를 얻을 수 있는 키워드의 집합의 올바른 순서를 구문이라 한다. 컴파일러는 구문의 정확성을 보장하기 위해 코드를 확인해야 한다.
  
 +
;4단계 의미 분석
 +
의미 분석은 여러 가지 단계로 구성된다. 처음으로 주어진 언어의 문법에 대한 순서와 함께 토큰의 구조가 검사된다. 토큰의 구조의 의미는 파서와 분석기에 의해 해석되어 최종적으로 객체 코드라는 중간 코드를 생성한다. 오브젝트 코드는 프로그램에서 마주칠 때 대응하는 토큰에 대한 프로세서 조치를 나타내는 명령어를 포함한다. 마지막으로 전체 코드가 [[파싱]]되어 해석이 가능한지 확인한다. 일단 최적화가 수행될 수 있다면, 수정된 적절한 토큰이 오브젝트 코드에 삽입되어 최종 오브젝트 코드가 생성되어 파일 내에 저장된다.<ref>출처 : https://www.techopedia.com/definition/3912/compiler</ref>
  
===어휘 분석===  
+
== 원리 ==
컴파일러는 소스 코드에 나타나는 문자 스퀸스를 일련의 문자 문자열로(토큰) 변환한다. 이 문자는 어휘 분석기라는 프로그램에서 특정한 규칙에 의해 연결이 된다. 어휘 분석기는 기호 표를 사용하여 생성 된 토큰에 해당하는 단어를 소스 코드에 저장한다.
+
컴파일러의 원리는 총 3가지의 단계로 구성되어 있다.
  
 +
;앞단
 +
앞단 또는 프런트 엔드(front end)는 토큰화를 위한 어휘 분석(Lexing), 파스 트리 구성을 위한 구문 분석(Parsing), 중간 코드를 위한 의미 분석 등을 처리한다.
  
===구문 분석===
+
;가운데단
이 단계에서는 사전 분석을 통해 구문 분석을 수행한다. 사전의 처리을 통해 어휘 분석 중에 작성된 토큰이 사용법에 따라 올바른 순서인지 여부를 결정한다. 원하는 결과를 얻을 수 있는 키워드의 집합의 올바른 순서를 구문이라 한다. 컴파일러는 구문의 정호가성을 보장하기 위해 코드를 확인해야 한다.
+
가운데단 또는 미들 엔드(middle end)는 중간 코드에 대해 프로그램의 분석과 최적화를 처리한다.
  
 +
;뒷단
 +
뒷단 또는 백엔드(back end)는 각각의 [[CPU]] [[아키텍처]]에 대해 코드 최적화를 수행하며 최종 코드를 생성한다.
  
===의미 분석===  
+
== 평가 ==
의미 분석은 여라가지의 단계로 구성이 된다. 처음으로 주어진 언어의 문법에 대한 순서와 함께 토큰의 구조가 검사가된다. 토큰의 구조의 의미는 파서와 분석기에 의해 해석되어 최종적으로 객체 코드라고하는 중간 코드를 생성한다 오브젝트 코드는 프로그램에서 마주칠 때 대응하는 토큰에 대한 프로세서 조치를 나타내는 명령어를 포함한다. 마지막으로, 전체 코드가 파싱되어 해석이 가능한지 확인한다. 일단 최적화가 수행 될 수 있다면, 수정 된 적절한 토큰이 오브젝트 코드에 삽입되어 최종 오브젝트 코드가 생성되어 파일 내에 저장한다.<ref>https://www.techopedia.com/definition/3912/compiler</ref>
+
=== 장점 ===
 
+
컴파일의 장점은 다음과 같다.
 
+
* 한번 컴파일을 하면 그대로 사용이 가능하며 반복 작업을 처리할 경우 시간 소모를 매우 줄일 수 있다.
==컴파일러 원리==
+
* 컴파일 과정에서 단계별로 주기억장치로 들어가기 때문에 기억장소의 크기가 조정이 가능하다.
'''컴파일러의 원리는 총 3가지의 단계로 구성이 되어 있다.'''
+
* 전체 실행 시간을 매우 효율적으로 절약할 수 있다.
 
+
* 컴파일러는 일일이 매번 따로 번역할 필요가 없다.
 
 
===Front End===
 
토큰화를 위한 어휘 분석(Lexing), 파스 트리 구성을 위한 구문 분석(Parsing), 중간 코드를 위한 의미 분석 등을 처리한다
 
 
 
  
===Middle end===
+
=== 단점 ===
중간 코드에 대해 프로그램의 분석과 최적화를 처리한다.
+
* 한 줄로 입력할 경우 프로그램이 때로는 몇 십, 몇 백 개의 [[기계어]]로 번역되기 때문에 프로그램 실행을 위해서는 대용량의 기억공간이 필요하다.
  
 +
{{각주}}
  
===Back end===
+
== 같이 보기 ==
각각의 CPU 아키텍처에 대해 코드 최적화를 수행하며 최종 코드를 생성한다.
+
* [[프로그램]]
 
+
* [[프로그래밍]]
 
+
* [[컴파일]]
==컴파일의 장점==
+
* [[크로스 컴파일러]]
===장점===
 
* 한번 컴파일을 하면 그대로 사용이 가능하며 반복 작업을 처리할 경우 시간 소모를 매우 줄일 수 있다.
 
*컴파일 과정에서 단계별로 주기억장치로 들어가기 때문에 기억장소의 크기가 조정이 가능하다.
 
*전체 실행 시간을 매우 효율적으로 절약할 수 있다.
 
*컴파일러는 일일이 매번 따로 번역할 필요가 없다.
 
 
 
===단점===
 
* 한 줄로 입력할 경우 프로그램이 때로는 몇 십,백 개의 기계어로 번역이 되기 때문에 프로그램은 큰 기억용량을 요구한다.
 
  
==같이보기==
+
[[분류:프로그램]]
*[[고급언어]]
 
*[[크로스 컴파일러]]
 
==각주==
 
[[분류:컴파일러]]
 

2018년 7월 16일 (월) 22:26 판

컴파일러(compiler)란 프로그래밍 과정에서 인간이 작성한 소스 코드컴퓨터가 이해할 수 있는 기계어 또는 바이트코드로 번역해 주는 프로그램을 말한다. 처리기(processor)라고도 한다. 시스템에서 실행되는 객체 코드를 생성하는 컴파일러를 크로스 컴파일러라고 한다.

역사

컴파일러(comfiler)라는 개념은 그레이스 호퍼(Grace Hopper)가 "컴퓨터의 교육"(The Education of a Computer)이라는 제목의 보고서를 발표함으로서 최초로 정의되었다. 보고서에서 호퍼는 고급 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 이진(binary) 코드로 만들어 주는 기술을 소개해, 오늘날 컴파일러의 개념과 프로그래밍 코드의 해석방법을 정의했다. 호퍼는 자신이 "A-0"이라는 컴파일러를 직접 개발하기도 했다.

실행 단계

컴파일러는 4가지의 주요한 단계를 거쳐 실행된다.

1단계 스캔

스캐너(scanner)는 소스 코드에서 한 번에 한 문자씩 읽고 어떤 문자가 어느 라인에 있는지 추적한다.

2단계 어휘 분석

컴파일러는 소스 코드에 나타나는 문자 시퀀스를 일련의 문자열인 토큰으로 변환한다. 이 문자는 어휘 분석기라는 프로그램에서 특정한 규칙에 의해 연결이 된다. 어휘 분석기는 기호 표를 사용하여 생성된 토큰에 해당하는 단어를 소스 코드에 저장한다.

3단계 구문 분석

이 단계에서는 사전 분석을 통해 구문 분석을 수행한다. 사전 처리를 통해 어휘 분석 중에 작성된 토큰이 사용법에 따라 올바른 순서인지 여부를 결정한다. 원하는 결과를 얻을 수 있는 키워드의 집합의 올바른 순서를 구문이라 한다. 컴파일러는 구문의 정확성을 보장하기 위해 코드를 확인해야 한다.

4단계 의미 분석

의미 분석은 여러 가지 단계로 구성된다. 처음으로 주어진 언어의 문법에 대한 순서와 함께 토큰의 구조가 검사된다. 토큰의 구조의 의미는 파서와 분석기에 의해 해석되어 최종적으로 객체 코드라는 중간 코드를 생성한다. 오브젝트 코드는 프로그램에서 마주칠 때 대응하는 토큰에 대한 프로세서 조치를 나타내는 명령어를 포함한다. 마지막으로 전체 코드가 파싱되어 해석이 가능한지 확인한다. 일단 최적화가 수행될 수 있다면, 수정된 적절한 토큰이 오브젝트 코드에 삽입되어 최종 오브젝트 코드가 생성되어 파일 내에 저장된다.[1]

원리

컴파일러의 원리는 총 3가지의 단계로 구성되어 있다.

앞단

앞단 또는 프런트 엔드(front end)는 토큰화를 위한 어휘 분석(Lexing), 파스 트리 구성을 위한 구문 분석(Parsing), 중간 코드를 위한 의미 분석 등을 처리한다.

가운데단

가운데단 또는 미들 엔드(middle end)는 중간 코드에 대해 프로그램의 분석과 최적화를 처리한다.

뒷단

뒷단 또는 백엔드(back end)는 각각의 CPU 아키텍처에 대해 코드 최적화를 수행하며 최종 코드를 생성한다.

평가

장점

컴파일의 장점은 다음과 같다.

  • 한번 컴파일을 하면 그대로 사용이 가능하며 반복 작업을 처리할 경우 시간 소모를 매우 줄일 수 있다.
  • 컴파일 과정에서 단계별로 주기억장치로 들어가기 때문에 기억장소의 크기가 조정이 가능하다.
  • 전체 실행 시간을 매우 효율적으로 절약할 수 있다.
  • 컴파일러는 일일이 매번 따로 번역할 필요가 없다.

단점

  • 한 줄로 입력할 경우 프로그램이 때로는 몇 십, 몇 백 개의 기계어로 번역되기 때문에 프로그램 실행을 위해서는 대용량의 기억공간이 필요하다.

각주

같이 보기