제1장 컴파일러 개론

컴파일러 구성론

강 승 식

※ compiler란?

언어번역기

고급언어 program □ computer가 실행가능한 명령으로 번역

※ compiler 구현의 필요성

수많은 programming language의 등장 □ 자동 제작 tool 발달 : lex, yacc

1.1 프로그래밍 언어

□ 특수 목적 언어(special purpose programming language)

컴퓨터의 특정 응용 분야에 적합하도록 고안된 언어

□ 일반 범용 언어(general purpose programming language)

모든 컴퓨터 응용 분야에 적합하도록 고안된 언어

※ 저급언어(low-level language)와 고급언어(high-level language)

고급언어 장점 : 생산성(productivity), 이식성(protability), debugging 용이

※ 주력 언어의 변천 과정

FORTRAN □□□ COBOL □□□ PASCAL □□□ C □□□ C++

1.2 번역기와 컴파일러

□ 원시 언어(source language)

: 고급 언어 or 어셈블리어

□ 목적 언어(object language, target language)

: 저급 언어(어셈블리어 or 기계어)

□ 원시 프로그램(source code) vs. 목적 프로그램(object code)

언어 번역기(language translator)

□ assembler

□ interpreter

□ preprocessor

□ compiler

□ cross compiler

※ FORTRAN(PASCAL, LISP) program □□□□ C program

1.3 컴파일러의 일반적 구조

□ 전단부(front-end) : 원시 언어의 분석 및 중간코드 생성

--> 원시언어에 관계되는 부분

1. 어휘분석(lexical analysis)

--> 어휘분석기(lexical analyzer 또는 scanner)

입력 : 원시 프로그램, 출력 : tokens

※ token : 문법적으로 의미를 갖는 최소 단위

(예) A := B + 3;

2. 구문분석(parsing) --- parser 또는 syntactic analyzer

입력 : tokens,     출력 : 파스 트리(구문 트리)

(예) p.19 그림 1.10

3. 중간코드 생성(intermediate code generation)

입력 : 파스 트리,  출력 : 중간 코드

(예) p.20 그림 1.10에 대한 중간코드 예

□ 후단부(back-end) : 중간코드를 목적코드로 번역

target machine에 의존적임

4. 코드 최적화(code optimization)

목적코드 생성전 --- precode optimization

목적코드 생성후 --- postcode optimization

5. 목적코드 생성(object code generation)

1.4 컴파일러 자동화 도구

□ 컴파일러의 전과정 or 각 단계들을 자동으로 처리하는 도구

□ 필요성 : N 개의 언어를 M 개의 기계에 구현시 N*M 개의 컴파일러 필요

※ 컴파일러 생성기(compiler generator) 또는 컴파일러-컴파일러

(compiler-compiler)라고 함.

1.4.1 어휘분석기 생성기(lexical analyzer generator)

□ token 기술방법 : 정규표현(regular expression)

□ 그림 1.17, 1.18 참조

1.4.2 파서 생성기(parser generator)

□ 문법 표현(grammar description 또는 syntax)

: context-free grammar(CFG)

□ parsing table 자동 생성 : 그림 1.19 참조

1.4.3 코드생성 자동화

□ 중간언어로부터 목적언어를 자동으로 생성

: 기계 독립적인 코드생성 알고리즘

1.4.4 컴파일러-컴파일러 시스템 : 그림 1.22, 1.23 참조