10. 중간언어의 생성
Download
Report
Transcript 10. 중간언어의 생성
10. 중간언어의 생성
10-1. 소
개
10-2. 문법-지시적 변환
10-3. 코드 생성
10-4. U-코드 번역기
1
10-1. 소
개
• 정의
– 파서의 출력을 입력으로 받아 중간 언어를 생성하는 컴파일러의
한 단계
– 코드 생성기는 AST를 순회하면서 중간 코드를 생성하게 된다.
중간 표현 단계를 거친 후에 중간 코드를 생성하는 방법의 장점은
이미 문법적인 검사를 마쳤기 때문에 에러가 없다는 것이며
또한 중간 표현이 가지고 있는 많은 정보에 대해 최적화 작업을
수행하여 보다 효과적인 중간 코드를 생성할 수 있다는 것이다.
2
원시
프로그램
스캐너
데이타
파서
SDT
AST
ICG
U-코드
U-코드
인터프리터
U-코드 실행 시스템
결과
세가지 가정
1. 파싱 방법으로는 bottom-up방법을 사용한다.
2. 특정 기계 언어가 아니라 중간 언어를 생성한다.
3. 중간 언어는 U-코드 이다.
3
10-2. 문법-지시적 변환
• 정의
– 프로그래밍 언어의 의미를 정형하게 표현하는 것이 어렵기
때문에 context-free문법에 직접 의미 수행 코드를 기술하는
방법
• 문법-지시적 변환의 모델
– 문법-지시적 변환이란 각 생성 규칙에 있는 문법 심벌을 이용
하여 그 생성 규칙에 해당하는 의미 수행 코드를 직접 기술하여
필요한 일을 처리하는 방법
4
원시
프로그램
스캐너
토큰요구
토큰
파서
결과
..
.
문법-지시적 변환의 모델
– 장점
• 특정한 구현에 관계없이 원시 언어의 구문 구조에 따라 의미 규칙
들을 직접 기술할 수 있다는 것이다. 또한, 수정이 용이하는 것이다.
기존의 구문 구조를 건드리지 않고 새로운 생성 규칙과 그에 해당하는]
의미 규칙을 추가 할 수 있다.
5
– 단점
• 파싱 도중에 에러가 일어난 경우 이제까지 행한 의미 행동들이
모두 무의미 해진다.
• 입력에 대해 단일 패스이면서 문법-지시적으로 처리하기 때문에
어떤 경우에는 정보가 부족하여 후에 필요한 정보가 나타났을 때
다시 처리해야 하는 복잡함이 있다.
– 단점 극복 방법
• 의미 분석과 코드 생성에 피요한 정보만을 수집하고 그 정보를
이용하여 의미 분석과 코드 생성을 하는 방법을 택하면 된다.
• SDTS (Syntax-directed Translation Scheme)
SDTS ::= a production rule + semantic action
6
• 의미 규칙
– 중간 언어를 생성하거나 또는 변수에 대한 값을 계산하고,
심벌 테이블에서 어떤 변수들을 관리하거나 에러에 대한
메시지를 출력해 주는 등의 역할을 한다.
• 문법-지시적 변환기의 구현
입력
변
환 기
스
캐
파
출력 : 중간 언어
너
서
의미 수행 코드
변환기의 구조
7
• 문법-지시적 변환기의 설계과정
– 입력설계
• 입력 구문의 형태를 context-free문법을 이용하여 고안한다.
각 입력 구조에 대한 생성 규칙을 고안하여 전체적인 입력 문법을
설계한다.
– 스캐너와 파서의 작성
문법
PGP
어휘정보
스캐너
파싱 테이블
파서
• 고안된 문법을 가지고 파서 생성기를 이용하여 문법에 대한 어휘
정보와 파싱 테이블을 얻는다. 여기서 얻어진 어휘 정보를 이용하여
스캐너를 작성하고 파싱 테이블을 이용하여 파서를 작성 할 수 있다.
– 의미 수행 코드의 작성
• 입력 문법의 구조에 따라 그 생성 규칙에 대한 적당한 의미 수행 코드
를 작성한다.
8
• AST의 구성
– 파싱 도중에 에러가 일어난 경우 그때까지 행한 의미 행동이
모두 무효가 된다는 단점
– 극복 방법으로 다음 단계에서 필요한 정보만을 구성하고 구성
된 정보를 이용하여 다음 단계를 처리하는 방법을 사용
– 문법-지시적 변환방법을 사용하여 AST를 구성하고 의미 분석
과 중간 언어 생성은 AST를 이용하여 행하게 된다.
9
10-3. 코드 생성
• 정의
– 컴파일러의 전단부는 원시 프로그램을 입력으로 받아 중간 코드를
생성한다. 원시 프로그램은 어휘 분석과 구문 분석 과정을 거쳐
중간 표현을 생성하게 되며 중간 코드 생성기에 의해 중간 언어로
번역된다. 이 때 중간 코드 생성기는 문장의 의미를 분석하고 옳은
가를 검사하는 의미 분석 과정을 병행한다. 의미 분석을 수행함
으로써 적절한 코드의 생성이 가능하게 되면 또한 문법적으로는
옳으나 의미적으로는 틀린 문장을 검사 할 수 있다. 의미 분석상에
발생한 오류를 컴파일러 사용자에게 알려줌으로써 오류 수정을
용이하게 한다.
10
미니파스칼 프로그램
스캐너
파
서
AST
의미 분석 및
중간 코드 생성기
U-코드
U-코드 인터프리터
실행 결과
중간 코드의 생성과 실행
11