Hi yoahn 개발블로그

컴파일러 중간 본문

sswu

컴파일러 중간

hi._.0seon 2022. 10. 4. 23:40
반응형

컴파일러

  • Analysis (분석)
  • Synthesis (합성)

1. 분석

1) 구문 분석

position := initial + rate * 60

syntax tree

분석과 유사한 작업

  1. Structure editor 편집기
    • IDE
  2. Pretty printers 코드 예쁘게 출력해줌
    • 컴파일러 처럼 문법을 알아야 예쁘게 출력 가능
  3. Static Checkers
    • 컴파일러와 유사하지만, 합성 파트가 없음
    • 나중에 오류일 가능성이 있는 부분에 대해 오류 메시지를 띄워줌
      (런타임까지 가지 않음)
  4. Interpreters
    • source program -> target program
    • 오른쪽의 표현 식들이 재귀적으로 계산됨(?)
    • 명령어를 실행하기 위해 자주 사용됨

컴파일러와 유사한 작업

  1. Text formatter
    1. 타이핑된 텍스트로부터 입력 스트림으로 들어온 문자들을 받는다.
  2. Silicon Compilers
    1. 소스 언어를 가짐
    2. 언어의 변수 -> 입력 신호에 대응
      (메모리 위치에 있는게 아니라 논리 신호(0, 1) 또는 스위칭 회로의 신호 그룹을 나타낸다.)
  3. Query Interpreters
    1. 범용언어(C++, Java,,,) 안에 SQL 쿼리를 넣을 수 있음
    2. JDBC,,

The Context of a compiler

실행 가능한 타겟 프로그램을 만들이 위해 몇가지 다른 프로그램이 필요할 수 있다.

소스 프로그램은 별도의 파일에 저장된 모듈로 나눌 수 있다.

소스 프로그램을 수집하는 작업은 때때로 프리프로세서라고 불리는 별개의 프로그램에 맡겨진다.(#include)

프리프로세서는 매크로를 소스 언어에서 번역

# define MAX 10

int a = MAX; -> int a = 10;

 

1.2 Analysis of the source program

어셈블러가 기계어 코드로 변환한 다음 일부 라이브러리 루틴과 함께 기계에서 실제로 실행되는 코드로 연결되는 어셈블리 코드를 만듭니다.

라이브러리 -> 

A language processing system

  1. skeleton source program
    1. 프로그램 뼈대
  2. preprocessor (전처리기)
    1. #ifdef이 호출함, #define 등을 처리
    2. #include 파일들을 가져와서 삽입함
  3. Compiler
    1. 일단 어셈블리어로 번역
    2. 바로 기계어로 번역하는 것보다 쉬워서 중간 언어를 둠
    3. 결과로 기계에 맞는 어셈블리어가 나옴
  4. assembler
    1. 메모리 재배치 가능한 기계어 코드로 번역함
    2. 상대 주소로 된 메모리 주소를 사용함
  5. loader, link-editor
    1. 이때 오브젝트 파일들과 라이브러리를 묶어 실행 가능한 프로그램으로 결합?
    2. 로딩하면서 실행할 기계어 파일로 바뀜 -> absolute machine code (주소값이 항상 고정인 기계어 파일)

PC: 특수목적 레지스터

fetch - decode - execute

 

target code --> 목표 기계에 맞는 코드

object code -> 기계어로 번역되서 바로 실행가능

 

1) Lexical Analysis (어휘 분석)

-> Scanning, Linear Analysis (선형 분석)

  • 어휘분석 시에는 문법적으로 올바른지를 체크하지는 않음
  • token 단위로 자름
  • 입력 스트림으로 들어오는 문자열을 읽어들어 집합적인 의미를 갖는 문자 시퀀스를 group으로 묶음

assignment statement

토큰 그룹

  • position
  • :=
  • initial
  • +
  • rate
  • *
  • 60

2) Syntax Analysis (구문 분석)

-> Parsing, Hierarchical Analysis (계층 분석)

  • 문장 구조를 분석함
  • 타동사 앞에 목적어가 있는지, 이런걸 체크
  • 토큰이 집합적 의미를 갖는 중첩된 컬렉션으로 계층적으로 그룹화 됨
  • 소스 프로그램의 토큰을 컴파일러가 

 

3) Semantic Analysis (의미 분석)

  • 타입들이 말이 되게 쓰이고 있는지를 체크함
  • 프로그램의 구성 요소가 서로 의미있게 맞는지 확인하기 위해 특정 검사를 수행
  •  

 

 

 

반응형

'sswu' 카테고리의 다른 글

Jenkins 이미지 안에서 도커 실행  (0) 2023.06.08
컴파일러 기말  (0) 2022.11.22
Dockerfile 레이어 수  (0) 2022.06.13
디자인 패턴 기말 정리  (0) 2022.05.30
오픈소스 소프트웨어 기말 정리  (0) 2022.05.20
Comments