728x90
컴파일러구성 - [제5장] 어휘분석기와 LEX
어휘분석기 설계 및 구현 ·LEX 소개 및 실행
컴파일러 용어정리
요점정리
- 어휘분석(lexical analysis)이란 원시 프로그램을 읽어 들여 토큰(token)이라는 의미 있는 문법단위로 분리하는 것을 말하며, 어휘분석을 담당하는 도구를 어휘분석기(lexical analyzer) 또는 스캐너(scanner)라 한다.
- 토큰(token)이란 의미있는 문법적 단위로서 일반적으로 식별자(identifier), 상수(constant), 예약어(reserved word), 연산자(operator), 구분자(delimiter) 등이 사용된다. 토큰의 종류와 형태는 프로그래밍 언어 설계자나 컴파일러 설계자에 의해 결정된다.
- 어휘분석기를 설계하기 위해서 우선 정규문법이 주어져야 하며(이 정규문법은 일반적으로 정규표현으로 표시된다 주어진 문법에 대한 토큰표(token table)를 작성한다. 다음으로 문법을 보고 NFA를 구성하고, NFA를 DFA로 변환한 다음, DNF를 최소화시키면 어휘분석기가 된다.
- 어휘분석기를 구현할 때에는 문법이 어떻게 주어지는지 명확하게 정의되어야 하며, 어떤 토큰들을 많이 사용하는지 확률개념을 도입해야 한다. 또한 구문분석을 하면서 부프로그램처럼 어휘분석기를 호출할 것이냐 아니면 어휘분석기를 먼저 수행시킨 다음 그 결과를 구문분석기에 전달할 것이냐 하는 것도 구현시 고려되어야 한다. 이외에 예약어의 처리 및 실수의 내부표현 등도 고려해야 한다.
- 어휘분석기 생성기는 컴파일러 생성기(compiler generator) 또는 컴파일러-컴파일러(compiler compiler)의 일부분으로서 어휘분석기를 자동으로 생성하는 도구이다. 어휘분석기의 종류에는 LEX, FLEX, ScanGen, PCLEX, JLEX 등이 있다.
연습문제
- 토큰을 종류별로 구분했을 때이다. 관계없는 것은?
- 정답 :
- ③
- 토큰의 종류: 식별자, 상수, 연산자, 예약어, 구분자
- 다음은 토큰에 대한 설명이다. 옳지 않은 것은?
- 정답 :
- ④
- 예약어에 대한 설명이다.
- 다음은 어휘분석기를 설계하는 과정이다. 틀린 것은?
- 정답 :
- ①
- ①번에서 "정규문법이 주어지고 정규표현으로 표시한다. 그리고 주어진 문법에 대한 토큰표를 작성한다." 가 되어야한다. 즉, 기호표가 아니고 토큰표가 올바르다.
- 토큰을 종류별로 구분했을 때이다. 관계없는 것은?
- 정답 및 해설
- 정답 :
- ③
- 토큰의 종류: 식별자, 상수, 연산자, 예약어, 구분자
- 다음은 토큰에 대한 설명이다. 옳지 않은 것은?
- 정답 및 해설
- 정답 :
- ④
- 예약어에 대한 설명이다.
- 다음은 어휘분석기를 설계하는 과정이다. 틀린 것은?
- 정답 및 해설
- 정답 :
- ①
- ①번에서 "정규문법이 주어지고 정규표현으로 표시한다. 그리고 주어진 문법에 대한 토큰표를 작성한다." 가 되어야한다. 즉, 기호표가 아니고 토큰표가 올바르다.
- 어휘분석기 생성기로써 1975년 Bell 연구소의 Lesk 와 Schmidt에 의해서 개발되었으며 정의부분, 변환규칙부분, 사용자 부프로그램 부분으로 구성된 것은?
- 정답 :
- ①
- 어휘분석기 생성기 : Lex, Scan gen
구문분석기 생성기 : YACC, LALRGEN
Lex: 1975년 Bell 연구소의 Lesk 와 Schmidt에 의해서 개발되었으며 정의부분, 변환규칙부분, 사용자 부프로그램 부분으로 구성되어 있다.
- 다음 설명 중 틀린 것은 ?
- 정답 :
- ③
- ③번을 보면 Scangen은 이식성이 쉽고, 언어와 기계에 대해 고도로 독립적인 장점이 있다. 그리고 option, class 정의, 정규표현 정의 등 3 부분으로 구성되어 있다. 그러나 구문분석 생성기가 아니고 어휘분석생성기이다.
'컴퓨터과학[3-2] > 컴파일러' 카테고리의 다른 글
컴파일러구성 - [제7장] 구문분석 개요 (0) | 2016.07.12 |
---|---|
컴파일러구성 - [제6장] Context-free 문법의 효율화 (0) | 2016.07.12 |
컴파일러구성 - [제4장]정규문법,정규표현과 결정적 유한오토마타[DFA] 의 동치관계 (0) | 2016.07.10 |
컴파일러구성 - [제3장]정규언어와 유한오토마타 (0) | 2016.07.10 |
컴파일러구성 - [제2장]형식언어와 형식문법 (0) | 2016.07.10 |
댓글