observe_db

[컴파일러] 1. 컴파일러 개요 본문

학교 공부/컴파일러(3-1)

[컴파일러] 1. 컴파일러 개요

쩡윤 2023. 3. 3. 17:59

3/3

컴파일러(compiler): 어떤 언어(source language)로 쓰여진 프로그램을 input으로 하여 대등한 다른 언어(target langugage) 프로그램으로 바꿔주는 프로그램.

보통은 고급어->저급어.

 

컴파일 단계

  1. 어휘 분석
  2. 구문 분석
  3. 의미 분석
  4. 중간코드 생성
  5. 코드 최적화
  6. 코드 생성

 

1.  어휘 분석(Lexical analysis)

-선형 분석, 스캐닝

-문장을 토큰 단위로 분리

심볼테이블이 이용된다.

 

2. 구문분석(Syntax analysis)

- 계층적 분석, 파싱

- 프로그램 토큰들을 문법적 형태인 파스 트리 형태로 표현

-반복적 규칙들에 의해 표시

 

3. 의미 분석(Semantic analysis)

-소스 프로그램의 의미 오류 검사

-타입 조사 및 정보 정리

-ex) 배열 첨자에 실수 금지, 실수 변수 연산에서 inttoreal 형변환[1]

 

4. 중간코드 생성

중간코드: 추상화된 기계에 대한 프로그램. 어셈블리어 형태이다.

특징

  • 생성이 편리해야함
  • 목적 프로그램으로의 변환이 쉬워야 함
  • 세 개의 주소(operand, 피연산자)를 갖는 중간 형태 [2]
  • 계산된 결과를 담을 임시 변수의 이름을 생성

 

5. 코드 최적화

- 중간 코드를 향상시켜 더 빠른 실행코드로 바꾼다.

- 컴파일시 최적화 시간이 많이 소요된다.

 

6. 코드 생성

- 중간 코드를 재배치하여 기계어/어셈블리어 코드로 생성한다.

- 변수들을 레지스터에 할당한다.

 

 

 

컴파일 기법 프로그램들 예시

  • 구조 편집기(언어의 구조에 맞는지 검증)
  • pretty 프린터(들여쓰기, 괄호의 짝)
  • 정적 검사기(미리 읽어서 검사. 미정의 문자나 빠진 부분, 타입 오류 등)
  • 인터프리터(소스를  바로 수행)
  • 텍스트 포멧터(Markdown 언어, Tex, LaTex )
  • 인터넷 브라우저(Markup 언어-HTML)
  • XML 파서
  • 질의 인터프리터(query문)

관련된 프로그램으로 전처리기, 어셈블러, 로더/링커, 라이브러리 루틴 등

 


[1] 코드 생성이 유리해진다. 하드웨어에 맞추어지기 때문

[2] 어셈블리어에서 operand가 3개까지 가능하기 때문에 변환이 용이하다.

Comments