1. 언어 분석 과정 요약
ㅇ ① 소스 프로그램
ㅇ ② Lexical Analyzer (어휘 분석 : 토큰 분리)
ㅇ ③ Syntactic Analyzer (구문 분석 : 구문 트리 생성)
ㅇ ④ Type Checker (의미 분석 : 타입 검사)
ㅇ ⑤ Code Optimizer (코드 최적화)
ㅇ ⑥ Code Generator (코드 생성)
ㅇ ⑦ 기계 코드
2. 어휘 분석 (Lexical Analysis), 어휘분석기 (Lexical Analyzer,Lexer)
ㅇ 원시 프로그램을 읽어들여, 토큰이라는 의미있는 문법 단위로 분리하는 것
- 즉, 토큰들을 생성하는 것 (Tokenizing)
ㅇ 例)
- 분리 구분 : 식별자,예약어 판단, 대소문자 구분, 줄바꿈 등
- 분리 순서(토큰화) 例) : 문단 -> 문장 -> 단어 -> 형태소
- 명칭 검증 : 변수명 앞에 숫자가 올 수 없음 등의 변수명 검증 처리 (☞ 명명규칙 참조)
3. 구문 분석/파싱 (Syntax Analysis/Parsing), 구문분석기/파서 (Syntactic Analyzer/Parser)
ㅇ 구문 문법을 적용하여 분석을 수행하는 것
- ① 구문적으로 올바르다는 것을 보증하고,
- ② 정형화된 형식(구문 트리)으로 변환 함
ㅇ 점검 : 문법 준수 여부
- 주로, 구문 구조가 문법 규칙에 맞는지 여부를 따짐
ㅇ 출력 : 구문 트리 생성
- 어휘 분석으로 생성된 토큰을 입력으로 하여,
- 구조화된 구문 트리를 생성하는 후처리
* 구문 트리(Syntax Tree) 또는 파스 트리(Parse Tree)
. 소스 코드(문장)의 문법 구조를 그대로 트리 형식으로 옮겨놓은 구조
※ 통상, 구문 분석이 끝나면 (즉, 추상 구문 트리를 생성하면),
- 컴파일러에서는 그 내부에서 만 사용하는 중간 코드(Intermediate Code)를 생성하게 됨
- 굳이, 중간 코드를 생성하는 이유는, 여러 종류의 프로그래밍 언어에 대응하기 위함
4. 의미 분석 (Semantic Analysis)
ㅇ 구문 분석 단계에서 얻은 구문 트리를 중심으로 의미를 부여하여, 코드 생성이 가능하게 함
- 구문 분석의 결과로 생성된 구문 트리를 사용하여, 실행 가능한 중간 코드를 생성하는 것
ㅇ 의미 분석 例)
- 변수가 지역변수인지 전역변수인지를 구별
- 변수 선언과 참조를 연결하기
- 타입 검사(Type Checking) 등
5. 통상적인 번역기 과정 例) (통상, 단계별 분석 : 어휘 분석 → 구문 분석 → 의미 분석)
ㅇ 어휘 분석 단계에서, 어휘 분석기(Lexer)는,
- 일련의 문자들을 토큰으로 구분 함
. 주로, 이름,수치 리터럴과 같은 작은 단위들을 처리 함
- 즉, 주어진 입력 문자열로부터 어휘항목들을 추출하고,
. 이에 상응하는 분류 토큰(내부 코드)들을 생성하게 됨
ㅇ 구문 분석 단계에서, 구분 분석기(Parser)는,
- 토큰들을 입력으로 처리하여 구문 구조를 결정하게 됨
. 주로, 표현식,문장 등 큰 단위들을 처리 함
ㅇ 의미 분석 단계에서, 타입 검사기(Type Checker)는,
- 각 연산자가 부합되는 피연산자를 갖는지 검사를 함
. 이 단계에서는 주로, 타입 검사(type checking)가 중요한 역할 임