어휘 분석
IT 위키
Lexical Analysis; 어휘 분석
컴파일러가 원시 코드를 읽어 의미 있는 최소 단위인 토큰(Token)으로 나누는 첫 번째 단계
이 일을 하는 부분을 어휘 분석기(Lexical Analyzer) 또는 스캐너(Scanner)라고 한다.
| 단계 | 하는 일 | 산출물 |
|---|---|---|
| 어휘 분석 | 문자열을 토큰으로 분해 | 토큰 열 |
| 구문 분석 | 토큰이 문법에 맞는지 검사 | 파스 트리 |
| 의미 분석 | 자료형 검사, 선언 확인 | 주석이 붙은 트리 |
| 중간 코드 생성 | 기계 독립적인 중간 표현으로 변환 | 중간 코드 |
| 최적화 | 불필요한 연산 제거 | 개선된 중간 코드 |
| 목적 코드 생성 | 대상 기계의 코드로 변환 | 목적 프로그램 |
자료형 검사는 어휘 분석이 아니라 의미 분석 단계에서 한다. 자주 나오는 함정이다.
- 공백과 주석을 제거한다.
- 식별자, 예약어, 상수, 연산자, 구분자를 구분해 토큰으로 만든다.
- 심볼 테이블에 식별자를 등록한다.
- 잘못된 문자를 만나면 어휘 오류를 보고한다.
`sum = count + 10;` 은 다음과 같이 분해된다.
식별자(sum) 연산자(=) 식별자(count) 연산자(+) 정수상수(10) 구분자(;)
정규 표현식으로 토큰 패턴을 정의하고, 이를 유한 오토마타로 바꿔 인식한다. lex, flex 같은 도구가 정규식 명세로부터 어휘 분석기를 자동 생성해 준다.
