1.1 컴파일러의 필요성 : 간랸한 역사

. 기계어 : C7 06 0000 0002

. 어셈블리어 : mov x, 2

. 어셈블러 : 어셈블리어의 기호코드와 메모리 주소를 기계어의 해당 숫자코드로 번역

. 고급언어 : x = 2 디바이스 독립적

. 촘스키 문법 분류체계(Chomsky hierarchy) : 타입 0, 타입 1, 타입2, 타입 3 문법이라고 하는 4개 수준의 문법으로 구성

   . 타입 2 또는 문맥 자유 문법(context-free grammar)는 프로그래밍 언어에 사용하기 가장 유용하다는 것이 입증됨

. 파싱 문제(parsing problem) : 오늘날 컴파일러 이론의 핵심적인 부분

. 촘스키 타입 3 문법과 상응되는 유한 오토마타(finite automata)와 정규표현식(regular expression)은 문맥 자유 문법과 밀접하게 연결됨

. 파서 생성기(parser generator) : 가장 널리 알려진 것으로 스티븝 존슨이 제작한 Yacc(yet another compiler-compiler)

. 스캐너 생성기(scanner generator) : 가장 널리알려진 것으로 Unix 시스템용으로 마이크 레스크가 개발한 Lex


1.2 컴파일러 관련 프로그램

. 해석기(interpreter) : 번역이 완료된 후 실행되는 목적코드를 생성하는 대신 원시 프로그램을 바로 실행한다. ex) BASIC, LISP

. 어셈블러(assembler) : 특정 컴퓨터의 어셈블리어용 번역기, 어셈블리어는 컴퓨터의 기계어를 기호로 표시한 형태라 번역하기 쉽다

. 링커(linker) : 따로 컴파일되거나 어셈블되어 서로 다른 목적 파일에 저장되어 있는 코드들을 바로 실행할 수 있는 하나의 파일로 모은다. 표준 라이브러리 함수코드 연결 등

. 전처리기(preprocessor) : 실제 번역이 시작되기 전에 컴파일러가 호출하는 독립 프로그램. 주석(comment) 지우기, 매크로 치환(macro substitution) 등


1.3 번역 절차

. 컴파일러는 내부적으로 다른 논리적 기능을 수생하는 여러 실행 단계들로 구성됨

. 세 가지 보조 부품? : 리터럴 테이블(literal table), 심볼 테이블(symbol table), 오류 취급기(error handler)

. 컴파일러의 실행 단계

   

. 스캐너(scanner) : 

   . 문자의 연속으로 되어있는 원시 프로그램을 실제로 읽는다.

   . 문자의 나열에서 영어에서 단어와 같은 토큰(token)이라고 하는 의미있는 단위를 골라내는 어휘 분석(lexical analysis) 실시

   . 예를 들어 a[index] = 4 + 2 는 공백 제외 문자 12개지만 토큰은 8개

 a

식별자

 [

왼쪽 대괄호 

 index

식별자 

 [

오른쪽 대괄호

 =

지정

 4

 +

덧셈 기호

 2

   . 스캐너는 식별자를 심볼 테이블에 넣는 작업을 할 수도 있고, 리터럴(literal)을 리터럴 테이블에 넣는 작업도 할 수 있다.

      . 리터럴은 3.141592와 같은 상수와 "Hello, world!"와 같은 인용 문자열을 의미함

. 파서(parser) :

   . 스캐너로부터 토근을 받아서 프로그램의 구조를 결정하는 구문 분석(syntax analysis) 수행



compiler.md



'개발' 카테고리의 다른 글

plot graph color  (0) 2019.10.04
0713 kernel  (1) 2019.07.13
[AWS] 스케일업, 스케일다운: 오토스케일링과 클라우드와치  (0) 2018.10.13
AWS dynamodb  (0) 2018.09.04
aws 네트워크  (0) 2018.08.05

+ Recent posts