1 / 18

컴파일러 개요

컴파일러 개요. 원시 프로그램. 목적 프로그램. 컴파일러. 컴파일러란 ?. 컴파일러 고급 언어를 번역하는 프로그램 원시 프로그램 좁은 의미 : 고급 언어로 작성된 프로그램 (C/C++, Pascal, Ada 등 ) 넓은 의미 : 임의의 언어로 쓰여진 프로그램 ( 특정한 문법에 따라 ) 목적 프로그램 어셈블리어 프로그램 기계어 코드 ( 실존기계 , 가상기계 ) 번역기 특정한 입력을 다른 형태로 변환시켜 주는 프로그램. HTML?. 번역기. 번역기의 종류 ( 컴파일러의 사촌들 )

Download Presentation

컴파일러 개요

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 컴파일러 개요

  2. 원시 프로그램 목적 프로그램 컴파일러 컴파일러란? • 컴파일러 • 고급 언어를 번역하는 프로그램 • 원시 프로그램 • 좁은 의미: 고급 언어로 작성된 프로그램 (C/C++, Pascal, Ada 등) • 넓은 의미: 임의의 언어로 쓰여진 프로그램 (특정한 문법에 따라) • 목적 프로그램 • 어셈블리어 프로그램 • 기계어 코드 (실존기계, 가상기계) • 번역기 • 특정한 입력을 다른 형태로 변환시켜 주는 프로그램 HTML?

  3. 번역기 • 번역기의 종류(컴파일러의 사촌들) • 전처리기(preprocessor) • 입력: 원시 프로그램 • 출력: 확장된 원시 프로그램 • 어셈블러 • 입력: 어셈블리 원시 프로그램 • 출력: 기계어 코드 • 결합기(로더/링커, loader/linker) • 입력: 여러 뭉치의 기계어 코드 • 출력: 하나로 묶이고 재배치 정보가 확정된 기계어 코드 • 해석기(인터프리터, interpreter) • 입력: 원시 프로그램, 중간 코드 • 출력: 원시 프로그램을 실행시킨 결과 #include, #define, #ifdef의 처리 latex

  4. 프리프로세서 컴파일러 라이브러리 어셈블러 언어 처리 시스템 • 하나의 프로그램이 처리되는 과정 원시 프로그램 프리프로세서 확장된 원시 프로그램 컴파일러 어셈블리 프로그램 어셈블러 재배치 가능한 목적 프로그램 로더/링커 목적 프로그램

  5. UNIX의 C 컴파일러 • cc sample.c cpp sample.c ⇒ .i cc1 sample.i ⇒ .s as sample.s ⇒ .o ld sample.o ⇒ a.out • 옵션 -E -S -c

  6. 컴파일러의 개략적 구조 • 분석-통합 모델 • 분석 (Analysis) • 원시 코드를 분석 → 구성 단위들로 나눔 → 중간 코드로 표현 • 분석 단계의 이용 • 문법지향 편집기 (structure editor, syntax directed editor) • 아름 출력기 (pretty printer) • 정적 분석기 (static checker/analyzer) • 해석기 (interpreter) • 통합 (Synthesis) • 중간 코드 → 목적 프로그램 구성 분석 (Front-End) 통합 (Back-End) 중간 코드

  7. 중간코드생성 목적코드생성 코드최적화 어휘분석 구문분석 의미분석 원시코드 목적코드 컴파일러의 일반적 구조 토큰표현 파스트리 파스트리 중간코드 중간코드 심볼테이블

  8. 어휘 분석 단계 • 어휘 분석 (Lexical Analysis) • 入力된 프로그램을 문법적 단위로 자름 + 심볼 테이블 작성 • 문법적 단위: 키워드(예약어), 식별자, 리터럴, 연산자, 구분자 • 어휘 구조: 어떤 것이 어휘가 될 수 있나? ⇒ 정규 표현 • 어휘 분석기: 스캐너(scanner) • 어휘 분석기 생성기: lex, scangen 등 • 입력 예제 문장 position := initial + rate * 60 ; • 어휘 분석의 결과 id1 := id2 + id3 * num60 상수

  9. 이 름 속 성 1 position ... 2 initial ... 3 rate ... 4 심볼 테이블 • 심볼 테이블 • 프로그램에서 사용하는 식별자(ID)에 대한 정보 • 구성: 이름 + 속성(attribute) • 속성: 형(type), 영역(scope), 상대주소(offset) 등 • 초기 생성: 어휘 분석시 (이름만 있음) • 내용 추가: 구문/의미 분석시 (속성을 추가) • 사용: 컴파일러의 전 단계 • 심볼 테이블의 예 이름

  10. := id1 + id2 * id3 num60 구문 분석 단계 • 구문 분석 (Syntax Analysis) • 入力된 프로그램의 문법 구조를 완성 • 문법 구조: 파스 트리(Parse tree), 유도 트리(Derivation tree),구문 트리(Abstract Syntax Tree; AST) • 문법 구조: 올바른 구조란 어떤 것인가 ⇒ 문맥 무관 문법 • 구문 분석기: 파서(parser) • 구문 분석기 생성기: yacc, pgs, ecp, jack 등 • 구문 분석의 결과

  11. ++ ( if > id ) ; id 1 if ++ > ida idj 1 파싱 • if (a > 1) j++; 파서

  12. 오류 • 오류의 발생 위치 • 어휘 분석 시 • 어휘 오류: 허용되지 않는 문자의 입력 • 예: posi8ion := ini8ial; • 구문 분석 시 • 구문 오류: 문법에 맞지 않는 문장 • 예: if (a >+ b) while a < b • 실행 시 • 논리 오류: 의도한대로 계산치 않음 • 예: circum := 2 + PI * r • 의미 분석 시

  13. := id1 + id2 * id3 inttoreal num60 의미 분석 단계 • 의미 분석 (Semantic Analysis) • 의미상의 오류를 검사 (문법적으로는 이상이 없음) • 의미 오류의 예: 선언되지 않은 변수의 사용, 자료형의 불일치,매개변수의 갯수와 형 • 의미 분석의 결과

  14. 중간 코드 생성 • 중간 코드 • 후단부에서 사용할 코드 • 전단부에서 파스트리를 순회하면서 생성함 • 종류: Polish 표기, N-튜플 표기, 트리 코드, 가상기계 코드 등 • 가상기계 코드: P-코드, EM-코드, U-코드 등 • 예 1: GNU의 gcc는 N-튜플 표기법의 하나인 RTL을 사용 • 예 2: ACK(Amsterdam Compiler Kit)에서는 EM-코드를 사용 • 중간 코드의 생성 예 temp1 = inttoreal(60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 postorder traversal 등

  15. 코드 최적화 • 최적화(optimization)란? • 효율적인 코드의 생성 • 크기가 작고 빠르고 기억장소 요구량이 작은 코드 • 최적화의 중요성 • 컴파일은 한번, 컴파일된 목적코드의 실행은 ∞ • 컴파일 시 많은 시간이 소요되어도 무방 • gcc의 경우, 소스 코드의 80~90%가 코드 최적화 부분 • 최적화의 단계 • 컴파일 전 최적화: 정적 분석을 이용 • 중간 코드 최적화: 기계와는 무관 • 목적 코드 최적화: 기계 종속적인 최적화

  16. 코드 최적화의 종류 (I) • 중간코드 최적화 • 지역 최적화 공통 부분식의 제거(common subexpression elimination),연산 강도 경감(strength reduction),상수 계산(constant folding),복사 전파(copy propagation),대수학적 간소화(algebraic simplification) 등 • 전역 최적화 공통 부분식의 제거,도달할 수 없는 코드(unreachable/dead code)의 제거 등 • 루프 최적화 루프 불변 코드(loop invariant)의 이동,루프 풀어 헤치기(loop unrolling),루프 붙이기(loop fusion) 등

  17. 코드 최적화의 종류 (II) • 목적 코드 최적화 • 효율적인 레지스터 할당 • 효율적인 명령어의 선택 • 메모리 접근의 최적화 • 연산순서 조정 • 핍홀(peephole) 최적화 등 • 코드 최적화의 결과 temp1 = id3 * 60.0 id1 = id2 + temp1

  18. 목적 코드 생성 • 목적 코드 • 재배치 가능한 코드를 생성 • 기계어 또는 어셈블리어 • 목적 코드 생성의 예 MOVF id3,R2 MULF #60.0,R2 MOVF id2,R1 ADDF R2,R1 MOVF R1,id1

More Related