일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로세스
- 가상메모리
- 소프트웨어공학
- 객체지향설계
- 데이터분석
- 파싱
- Linear Algebra
- 랩실일기
- 스케줄러
- Agile
- 벡터
- 애자일
- OS
- 자연어처리
- DB
- 클래스
- 컴파일
- 836
- 컴파일러
- 운영체제
- NLP
- React
- 언어모델
- C언어
- 데이터베이스
- 오픈소스웹소프트웨어
- css
- 파싱테이블
- 정보검색
- 웹소프트웨어
Archives
- Today
- Total
observe_db
[컴파일러] 1. 컴파일러 개요 본문
3/3
컴파일러(compiler): 어떤 언어(source language)로 쓰여진 프로그램을 input으로 하여 대등한 다른 언어(target langugage) 프로그램으로 바꿔주는 프로그램.
보통은 고급어->저급어.
컴파일 단계
- 어휘 분석
- 구문 분석
- 의미 분석
- 중간코드 생성
- 코드 최적화
- 코드 생성
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개까지 가능하기 때문에 변환이 용이하다.
'학교 공부 > 컴파일러(3-1)' 카테고리의 다른 글
[컴파일러] 5. 어휘분석 (0) | 2023.03.30 |
---|---|
[컴파일러] 4. LR 파서 (0) | 2023.03.24 |
[컴파일러] 3. 예측 파서 (0) | 2023.03.16 |
[컴파일러] 2. 구문(Syntax) 중심 컴파일 (0) | 2023.03.10 |
[컴파일러] 0. 오리엔테이션 내용 (0) | 2023.03.03 |
Comments