프로그래밍/Compiler

[컴파일러] 2-1. 어휘 분석 역할

Beginner:) 2024. 2. 17.
320x100

2-1. 어휘 분석 역할

어휘분석을 논의할 때 토큰, 패턴, 어휘항목 3가지 용어를 중점으로 사용한다.

 

토큰

토큰 이름과 선택적인 속성값으로 구성되는 쌍이다.

토큰 이름은 어휘 단위(키워드 또는 식별자)를 나타내는 추상기호

ex)

토큰 어휘 단위 예제
if if
id pi, score(variable name)
number 0, 1, 3.14
comparision ==, !=, <, <=
literal "Hello"

 

패턴

토큰의 어휘항목 형태를 서술

ex)

토큰 패턴
if 오로지 "if"라는 문자만 가능
id 첫번째 문자가 알파벳으로 시작되는 알파벳 또는 숫자의 조합
number 모든 숫자와 소수점(.) 또는 지수를 나타내는 e의 조합
comparision 부등호의 조합
ex) <뒤에는 =가 올 수도 있음
literal "(쌍따옴표)를 제외한 "으로 둘러싸인 모든 것

 

 

어휘항목

토큰을 위한 패턴에 부합되는 원시프로그램에 있는 문자의 나열된 값

ex)

소스 코드에서 'i'와 'f'는 아무 의미가 없지만 'if'라는 단어는 의미가 부여되어 토큰의 사례로 인식됨

 

 

+) 어휘의 오류에 대하여...

아래와 같은 코드가 있다고 하자,

whilr(a>5) { ....

 

원래는 "while"이지만 "whilr"이라고 쓴 것이다.

그러면 어휘항목 "whilr"에 대하여 유효한 토큰이 없기 때문에 오류가 발생하는데,

오류가 발생하면 어휘분석기가 진행이 불가능하다.

가장 간단한 복구전략은 공황모드(panic mode) 복구이다.

잘 입력된 (a>5) { 앞부분부터 "whilr"에 최대한 부합되는 단어를 찾기 위해 문자를 제거해 보고, 치환해 보고, 추가해 보는 노력이 시도된다.

r이 e로 치환되면 "while"이라는 어휘항목으로 구성되나 비용이 많이 들어 추천하진 않는다.

 

C언어에서 오타가 나면 "whilr이 정의되지 않았습니다. 혹시 while이 아닌가요?"라고 메시지가 띄워지거나 툴에서 "quick fix"같은 기능이 있는데, 이러한 방법을 사용하는 것으로 추정된다.

 

 

 

반응형

댓글