프로그래밍/Compiler

[컴파일러] 2.3. 토큰의 인식

Beginner:) 2024. 2. 24.
320x100

앞서 정규식을사용하여 패턴을 표현하는 방법을 배웠는데, 이번에는 입력 스트링에 대한 접두사를 찾는 코드를 확인한다.

 

먼저 토큰을 위한 패턴은 아래와 같다.

digit [0-9]
digits digit+
number digits (. digits)? 9E[+-]? digits)?
letter [A-Za-z]
id letter (letter | digit)*
if if
else else
relop < | > | <= | >= | = | <>

 

이중 number와 relop를 예제로 토큰 인식하는 방법을 확인한다.

 

어휘 분석기 구성의 중간단계로 먼저 패턴을 "전이도" (Transition Diagram) 라 불리는 정형화된 순서로 변환해본다.

 

전이도란 언어의 문법을 나타내는 데 사용되는 그래프 또는 다이어그램을 의미하는데 그래프를 보면 누구나 이해할 것이니 자세한 내용은 생략한다.

 


 

number 전이도

예제 1)

현재 상태가 12번이라고 가정한다.

1. 12번 상태에서 문자 하나를 읽어왔을 때, digit이라면 13번 상태로 이동한다.

2. 13번 상태에서 문자 하나를 읽어왔을 때, digit이라면 13번 상태로 이동한다.

3. 13번 상태에서 문자 하나를 읽어왔을 때, others라면 20번 상태로 이동한다.

4. 20번 상태값은 상수이다.

 

예제 2)

현재 상태가 12번이라고 가정한다.

1. 12번 상태에서 문자 하나를 읽어왔을 때, digit이라면 13번 상태로 이동한다.

2. 13번 상태에서 문자 하나를 읽어왔을 때, .(소수점)이라면 14번 상태로 이동한다.

3. 14번 상태에서 문자 하나를 읽어왔을 때, digit이라면 15번 상태로 이동한다.

4. 15번 상태에서 문자 하나를 읽어왔을 때, others라면 21번 상태로 이동한다.

5. 21번 상태값은 부동소수점이다.

 

여기서 의문이 드는게 others가 letter라면 에러가 아닌가?라는 생각이 들지만,
지금 생각되는건
1. 그저 이해를 돕기위한 예시일 뿐이다
2. 토큰화를 할 뿐이지 해당 부분은 구문 분석기 등에서 오류를 나타낸다.

이 두가지이다. 이후 공부해가면서 수정할 예정이다.

 

 

relop 전이도

 

예제 1)

현재 상태가 0번이라고 가정한다.

1. 0번 상태에서 문자 하나를 읽어왔을 때, '<'이라면 1번 상태로 이동한다.

2. 1번 상태에서 문자 하나를 읽어왔을 때, others라면 4번 상태로 이동한다.

3. 4번 상태값은 Less Than(미만)이다.

 

예제 2)

현재 상태가 0번이라고 가정한다.

1. 0번 상태에서 문자 하나를 읽어왔을 때, '<'이라면 1번 상태로 이동한다.

2. 1번 상태에서 문자 하나를 읽어왔을 때, '='이라면 2번 상태로 이동한다.

3. 2번 상태값은 Less Than or Equal(이하)이다.

 

반응형

댓글