제 9장 트랜스레이터
제 9장 학습내용 인터프리터의 개념과 인터프리팅 방법 컴파일 단계와 컴파일 과정 어휘분석,구문분석,중간코드생성, 코드최적화의 개념과 처리과정 컴파일러의 구현과 오류처리 방법
인터프리터의 개념 원시문장을 하나씩 읽어 해석 후 실행 기계어를 생성하지 않고 바로 실행 통역하는 형태와 같음 개인용 컴퓨터나 마이크로컴퓨터에 널리 사용 서브루틴 호출에 의해 실행 BASIC, PROLOG, LISP 등에서 사용
인터프리터의 명령어 실행과정 시 작 수행할 첫 문장선택 선택된 문장분석 해당 실행루틴을 호출함으로써 분석된 문장을 실행 NO 시 작 수행할 첫 문장선택 선택된 문장분석 해당 실행루틴을 호출함으로써 분석된 문장을 실행 NO 처리할 문장이 남아 있는가? 끝 YES 실행할 문장을 선택
인터프리터의 장단점 융통성은 있으나 실행효율이 떨어짐 실행할때마다 해석되어야 함 목적프로그램이 생성 되지 않아 디스크 기억장소 절약 만들기 쉽고 프로그램 디버깅 기능을 쉽게 제공
SUM=VALUE1+VALUE2*VALUE3 인터프리터의 실행 예 SUM=VALUE1+VALUE2*VALUE3 치환연산을 위한 치환서브루틴 호출 산술계산 서브루틴 호출 ⇒ ⇒ ⇒ ⇒
컴파일러의 개념 고급언어로 작성된 원시프로그램을 번역 어셈블리어와 기계어 목적프로그램 생성 융통성이 적으나 실행효율이 좋음 컴파일 과정은 5단계로 구분 COBOL,FORTRAN,C,PASCAL등에서 사용
컴파일과정의 5단계 원시프로그램 목적프로그램 테이블(중간결과)이용 및 관리 전반부 후반부 어휘 분석 구문 분석 중간코드 생성 최적화 목적코드 생성 테이블(중간결과)이용 및 관리
어휘분석 단계의 실행 각문장을 토큰단위로 구분 DO 20 I = 1 , 10 리터럴(숫자 상수) 터미널(연산자) 식별자(변수) 식별자(레이블) 터미널(지정어)
어휘분석 단계의 실행 기호표의 생성 원시프로그램 어휘분석 기호 SUM 종류 변수 자료형 실수 주소 1234 기억형태 STATIC
구문분석단계의 실행 파서가 구문구조를 분석하여 파스트리 생성 어휘분석 결과의 기호표와 관련정보 문법 파서 파스트리
구문분석단계의 실행 SUM = A + B * 3의 파스트리 치환문 수식 변수명 SUM = 수식 수식 + 수식 * 수식 상수 3
구문분석단계의 실행 ⇒ 파서의 역할 id1 = id2 + id3 * id4 E E:수식 id:토큰 E = E E + E id1
구문분석단계의 실행 구문트리의 생성 = + SUM * A B 3
중간코드의 생성 의미검사를 수행한다. 연산자가 원시언어 정의에 맞는 연산항을 갖고 있는지 확인 구문구조를 이용하여 코드생성 문법규칙에 따라 문법지시적으로 실행
코드최적화의 실행 지역최적화와 전역최적화로 구분 지역최적화의 기능 *컴파일시간 상수연산 *중복된 명령문 제거 *수식의 간소화 *strength Reduction의 수행
지역최적화의 예 if A > B goto C2 goto C3 C2: if A ≤ B goto C3 ⇒
strength Reduction의 예 좀더 빠르게 연산할 수 있는 방법으로 연산자를 바꿈 A ** 2 = A * A
전역최적화의 예 흐름분석기술을 이용한 최적화 A: = B + C + D E: = B + C + F T: = B + C A: = T + D E: = T + F 루프내에서 반복적인 값을 갖는 문장을 루프밖에 둠 ⇒
목적코드의 생성 연산을 수행할 레지스터 선택 기억장소에서의 데이터 위치결정 중간코드들을 기계명령어들로 치환 일반적으로 코드생성기에 의해 생성됨 중복되는 명령어들을 피하도록 함
제 9장 요약 인터프리터의 이해 컴파일러의 이해 어휘분석, 구문분석의 이해 중간코드, 코드최적화의 이해 컴파일러의 구현과 오류처리 방법