호반반 2021. 7. 20. 21:23
반응형

Lexical Analysis는 앞서 배운 Formal Language, Regular Expression, Finite Automata 등을 이용하여

character를 분석하는 과정이다.

그 character 사이에서 이름, 키워드, 특수한 마크가 있는지 알아내야 한다.

이 부분에서 공백, 주석과 같이 처리하지 않는 부분도 걸러져야 한다.

 

 

Lexical Tokens 개념


Token이란 언어에서 인식을 하는 부분을 말한다.

각각 type들이 정해져 있으며

ID는 변수명, 함수명

NUM은 정수, REAL은 실수, 각종 예약어들과 연산자들이 이에 해당한다.

 

반면에 주석, 전처리기와 같은 문자들은 인식을 하지 않는다

ex ) #define, #include, //aaa

 

 

Two Types of Tokens


토큰은 크게 두가지로 분류할 수 있다.

 

Special Form - 예약어 :

키워드 (for, goto, if, while)

연산자 (+=, - , *)

구분 문자 ([ , {, (,) 등

 

General Form

변수명, 함수명 (stk, ptr, sum1)

숫자 (526, 526.9)

 

예를 하나 들어 이를 Streams 로 변환해보자.

 

 

float match(char *s)
{
	if(!strncmp(s, "0,0", 3))
    	return 0.0;
}

이를 Lexical Analyzer로 분석해보자.

위의 내용을 바탕으로 분석하면 이와 같은 형태가 반환된다.

 

 

FLOAT ID(match0) LPAREN CHAR STAR ID(s) RPAREN
LBRACE
IF LPAREN BANG ID(strncmp) LPAREN ID(s) COMMA STRING(0,0) COMMA NUM(3) RPAREN RPAREN
RETURN REAL(0,0) SEMI
RBRACE EOF

이해를 돕기 위해 위 코드와 같이 줄을 나누었다.

실제는 줄넘김, 탭, 공백은 무시하고 그냥 들어간다.

다음에는 이와같이 분석된 token을 오토마타로 바꾸어보자.

 

 

반응형