본문 바로가기
컴파일러

[컴파일러] 01. 컴파일러개론

by 유일리 2023. 4. 6.
  • 컴파일러란?

주어진 language로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스입니다.

  • Cross-Compiler

"A cross-compiler is a program which is to run on machine A and produce target code for another machine B."

 

  • Interpreter

프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다.

 

  • Preprocessor

입력 데이터를 처리하여 다른 프로그램에 대한 입력으로서 사용되는 출력물을 만들어내는 프로그램이다.

  • 컴파일러 구조

Front-End : language dependent part 

Back-End : machine dependent part

  • Lexical Analyzer (Scanner)

컴파일러 내부에서 효율적이며 다루기 쉬운 정수로 바꾸어줌 (소스 코드를 정규 문법에 따라 토큰으로 분류)

 

  • Syntax Analyzer (Parser)

트리 구조로 메시지의 논리적 표현을 작성하는 프로그램

기능 : Syntax checking, Tree generation

출력 : correct인 경우 tree 형태 출력, incorrect인 경우 error message 출력

 

  • Intermediate Code Generator

파서의 출력인 추상 구문 트리를 입력으로 받아 의미 검사(semantic checking)를 행하고 그에 해당하는 중간 코드 생성한다.

 

  • Code Optimizer

비효율적인 code를 구분해 내서 더 효율적인 code로 바꾸어 준다.

 

  • Target Code Generator

중간 코드로부터 machine instruction을 생성한다.

Code generator tasks :

instruction selection & generation

register management

storage allocation

code optimization(Machine-dependent optimization)

 

  • 컴파일러 자동화 도구 (Complier Generating Tools)

컴퓨터의 응용 분야가 넓어짐으로써 새로운 언어를 개발하고, 언어와 machine이 발달할수록 많은 complier가 필요하다. N개의 언어를 M개의 컴퓨터에서 구현하려면 N*M개의 컴파일러가 필요하다.

  • LEX

입력 스트림에서 정규표현으로 기술된 토큰들을 찾아내는 프로그램을 작성하는데 유용한 도구

  • Parser Generator (PGS)

1. Standard PGS

파스칼 언어로 쓰여 있으며, 구문 구조를 AST (Abstract Syntax Tree) 형태로 얻고 이의 정보를 포함한 파싱 테이블을 출력한다.

 

2. Wisconsin PGS

파스칼 언어로 쓰여 있으며 error recovery가 특징이다.

 

3. YACC (Yet Another Complirt Complier)

UNIX에서 수행, C 언어로 쓰여 있음.

구문분석 후 구문에 따른 동작을 지시하기 위한 프로그램

댓글