Compiler

· Compiler
형식 언어 컴파일러를 만들기 위해서는 언어에 대한 이해가 선행되어야 한다는 것을 지난 장에서 살펴보았다. 언어에 대해서 잘 이해하고, 체계적으로 전개하기 위해서는 "잘 정의된 언어"가 어떤것인지 알아야 한다. 이처럼 잘 정의된 언어를 형식 언어라고 부른다. 형식언어는 보통 문장의 집합으로 정의된다. 2장에서는 언어를 형식적으로 정의하고, 언어를 표현하는 방법으로 사용되는 문법을 정의한다. 형식 언어의 기본 개념 형식언어는 문장들의 집합으로 정의된다. Alphabet 알파벳은 문장을 이루는 기본 심볼(기호)들의 유한 집합이다. 형식언어이론에서는 알파벳이 보통 소문자 a, b, c... 과 같은 심벌들을 사용한다. String (sentence, word) 알파벳 T에 대한 스트링은 알파벳 T에 속하는 심벌..
· Compiler
컴파일러를 만든다면 한땀한땀...직접 코드를 넣어야 하는걸까? N개의 언어를 사용할 수 있고, M개의 컴퓨터에서 동작하게 하려면 우리는 NxM개의 컴파일러를 작성해야 한다. 완전 무리..! 하지만 우리에게는 컴파일러 자동화 도구, 컴파일러 생성기가 있습니다. (컴파일러의 컴파일러) 컴파일러 생성기는 컴파일러의 전 과정이나 각 단계를 자동 생성하는 도구들을 말한다. 컴파일러 생성기 컴파일러 생성기는 목적 기계에 대한 기계 표현을 입력으로 받아서 하나의 컴파일러를 출력하게 된다. 이렇게 출력된 컴파일러는 소스 프로그램을 입력으로 받아 목적 기계의 코드로 번역하는 컴파일러이다. Lexical Analyser Generator 어휘 분석기 생성기는 어휘분석기를 자동생성하는 도구이다. 토큰에 대한 표현을 입력으로..
· Compiler
컴파일러는 고급 언어로 쓰인 프로그램을 어떤 특정 컴퓨터에서 직접 실행이 가능한 형태의 프로그램으로 번역해주는 컴퓨터 프로그램이다. 일반 컴파일러 구조 컴파일러의 일반적인 구조는 다음과 같이 생겼다. 크게 프론트 앤드와 백앤드로 나눌 수 있다 프론트앤드: 소스 언어에 의존하는 부분으로, 소스 프로그램을 분석하고, 중간 코드를 생성한다. 백엔드: 목적 기계에 의존하는 부분으로, 중간 코드를 특정 기계를 위한 목적 코드로 번역한다. 프론트앤드 프론트앤드는 언어에 의존하므로, 각 언어마다 하나씩 필요하다. 기계에 비하면 언어의 문법이 명확히 정의되어있기 때문에 프론트앤드는 잘 정립되어있는 부분이다. 프론트앤드의 기능에 대해 살펴보자면, 프론트앤드의 역할은 소스 프로그램을 읽어들이고, 어휘분석, 구문 분석을 통..
· Compiler
번역기 번역기란 하나의 프로그래밍 언어로 작성된 프로그램을 입력으로 받아 동등한 의미를 갖는 다른 프로그래밍 언어로 된 프로그램을 출력하는 시스템 프로그램을 말한다. 여기서 입력되는 프로그램을 소스 프로그램이라 하고, 출력되는 프로그램을 목적 프로그램(목적 언어로 작성된)이라 한다. 번역기의 종류 번역기는 입력과 출력 프로그램에 따라 여러 종류로 나뉘게 된다. Preprocessor 프리프로세서의 경우 #include같은 지시문이 있는 경우 이를 처리해 확장된 프로그램을 출력한다. 따라서 이 경우에는 소스와 목적 프로그램의 언어가 모두 고급 언어가 된다. 여기서 "확장"은 매크로 처리 기능, 조건부 컴파일 기능(Conditional Compile), 헤더파일이 포함된 파일 포함 기능(File includ..
mingyung
'Compiler' 카테고리의 글 목록