컴퓨터공학/시스템프로그래밍

시스템프로그래밍 13 - 2 컴파일 5단계

Arkeiyou 2021. 11. 20. 14:51

용어체크

1. 어휘 분석

자연 언어 이해 기법 중의 하나로 컴파일 또는 어셈블 할 때 원시 프로그램의 문자를 입력하여 다음의 처리 루틴에 넘기기 위하여 문자열을 분해하여 해석하는 루틴이다. 토큰으로 분리하며 이를 처리하는 것을 어휘 분석기이다.

2. 구문 분석

문장 즉 일련의 문자열을 자연어의 경우 형태소로 분리하고 해당 구문론적 관계를 도식화하여 명확히 하는 분석절차를 의미한다. 프로그래밍 언어의 경우 어휘 분석단계에서 만들어진 토큰들로부터 파스트리 혹은 구문 트리를 만드는 단계를 의미한다.

3. 코드 최적화

비효율적인 중간 코드에서 생성되는 목적 코드 프로그램은 수행 시간과 기억 공간을 낭비하는데 이런 낭비 자원을 최소화하기 위해 중간 코드나 목적 코드에 적용되는 과정을 말한다.

 

학습내용
  • 어휘 분석기
  • 구문 분석기
  • 코드 최적화 및 오류 처리
학습목표
  • 컴파일러의 어휘 분석기를 설명할 수 있다.
  • 구문 분석기를 설명할 수 있다.
  • 코드 최적화 및 오류 처리 기능을 설명할 수 있다.

 

 

 

 

 


컴퓨터 언어로 제작한 컴파일러는 고급언어를 기계어로 번역해서 실행 가능하도록 번역해 주는 프로그램으로 알고 있습니다. 이러한 컴파일러는 어떻게 기계어로 번역할까요? 그 처리 단계가 궁금합니다. 기계가 이해할 수 있기 위해 어떤 처리를 하는 건가요?

컴파일러는 원시 프로그램을 각 문장 별 의미를 갖는 최소 문장 단위 토큰으로 구분하는 어휘 분석 단계를 거칩니다. 문장을 구성한 각 토큰 사이의 문법적 구조를 결정하는 작업인 파싱 즉 구문 분석 후 의미검사 및 그에 대한 중간코드를 구문 분석 단계에서 만들어진 구문 구조를 이용하여 생성합니다. 즉 중간 코드를 생성하고 이러한 코드를 실행시간을 줄이거나 기억 장치의 양을 줄일 수 있는 코드 최적화를 통해 중간 코드를 수정 후 이러한 중간 코드를 어셈블리어 또는 기계어로 변환하는 목적 코드를 생성하여 실행 가능한 프로그램으로 번역하게 됩니다.


Quiz 01중간 코드를 어셈블리어 또는 기계어로 변환하는 작업을 목적 코드 생성이라 한다.
  • 1 O
  • 2 X
정답 :1
해설 :컴파일러에서 목적 코드를 생성한다는 것은 중간 코드 생성 단계에서 만들어진 중간 코드들을 어셈블리어 또는 기계 명령어로 바꾸어 주는 것을 의미한다.

 

Quiz 02다음 중 컴파일 5단계를 올바르게 나타낸 것은?
  • 1 어휘 분석-구문 분석-중간 코드 생성-코드 최적화-목적 코드 생성
  • 2 어휘 분석-중간 코드 생성-구문 분석-코드 최적화-목적 코드 생성
  • 3 구문 분석-어휘 분석-중간 코드 생성-코드 최적화-목적 코드 생성
  • 4 구문 분석-중간 코드 생성-어휘 분석-코드 최적화-목적 코드 생성
정답 :1
해설 :컴파일 5단계는 [어휘 분석-구문 분석-중간 코드 생성-코드 최적화-목적 코드 생성] 단계이다.

 

Quiz 03코드 최적화의 역할에 해당하지 않는 것은?
  • 1 목적 코드의 실행 시간을 줄여준다.
  • 2 목적 코드가 차지하는 기억 장치의 양을 줄일 수 있다.
  • 3 중간 코드를 수정한다.
  • 4 원시 프로그램에 대한 의미를 검사한다.
정답 :4
해설 :원시 프로그램에 대한 의미를 검사하고 그에 대한 중간 코드를 구문 분석 단계에서 만들어진 구문 구조를 이용하여 생성하는 단계는 중간 코드 생성 단계이다.

어휘 분석기

  • 어휘 분석 단계는 각 문장을 의미를 갖는 최소 문장 단위인 토큰으로 구분하며 토큰이 문법적으로 어떤 기호로 분류될 것인지를 결정한다.
  • 토큰의 분류에서 어휘 분석의 기본 기능은 프로그램의 각 문 장을 토큰을 구분하는 일로 식별자, 터미널, 리터럴로 구분하는 것이다.
  • 토큰의 시작과 끝을 알 수 있어야 한다. 이 작업은 프로그래밍 언어의 표기 방법이 얼마나 고정적인가에 좌우된다.
  • 한정자는 토큰과 토큰 사이를 구분하는 문자를 한정자라 한다.
  • 토큰의 인식은 프로그래밍 언어 내의 각 토큰은 단순한 문법적 규칙에 따르며 단순한 유한 상태 모델의 렉시칼 분석 단계가 있다.
  • 어휘 분석의 결과 프로그램 내에서 각 문장의 의미와 구조를 결정하려면 그 문장을 구성하는 토큰들을 분석해 보아야 한다. 토큰들을 분류, 각 토큰들이 어느 유형에 속하는지 분석, 테이블은 하나로 만들 수 있고, 유형별로 숫자, 상수, 문자열, 변수 등 각각 독립된 테이블을 만들 수도 있다. 시맨틱 분석 프로그램은 어휘 분석 단계에서 입력 문장 각 토큰의 유형만을 결정한다.
  • 기호표란 어휘 분석 단계에서 만드는 테이블로 기호표, 리터널표가 있다.

 

구문 분석기

  • 구문 분석은 문장을 구성하는 각 토큰 사이의 문법적 구조를 결정하는 것을 의미한다. 이 작업을 파싱이라 한다.
  • 파스트리는 토큰 또는 기호를 구분이 되었으면 컴파일러는 그 구문구조를 파악하고 의미를 해독해야 한다. 구문 구조는 관용구로 표현한다. 각 관용구는 어의적 실체이며 연관된 의미를 갖는 토큰들이 문자열이다.
  • 파스트리는 파서에 의해서 분석된 결과를 의미한다.
  • 구문 분석기는 어휘 분석 결과인 기호표와 관련된 정보를 입력 정보로 파싱의 결과를 파스트리를 만들어 다음 의미 분석 단계에 전달한다.

 

코드 최적화 및 오류 처리

  • 코드 최적화의 역할은 목적 코드의 실행시간을 줄이며, 목적 코드가 차지하는 기억 장치의 양을 줄인다. 또한 중간 코드를 수정하는 역할을 한다.
  • 코드 최적화의 종류에는 지역 최적화와 전역 최적화가 있다.
  • 목적 코드 생성은 중간 코드를 어셈블리어 또는 기계어로 변환하는 작업이다.
  • 컴파일 5단계로는 어휘 분석, 구문 분석, 중간 코드 생성, 코드 최적화, 목적 코드 생성이다.
  • 오류처리는 컴파일러에서 중요한 기능 중 하나로 원시 프로그램의 오류를 발견하여 사용자에게 알려주는 것을 의미한다. 컴파일러는 각 단계에서 발견되면 오류를 취급하는 루틴을 호출하여 그 오류를 알려주는 메시지를 프린트 해준다. 구문상의 오류가 발생한 후 그것으로 인해 연속적으로 오류가 발생하여 오류 메시지가 출력될 수 있다.