Lexical Analysis 컴파일러


* 기본 숙지 사항
 

1. 컴파일러의 수행절차

(1) Lexical Analysis
(2) Parsing
(3) Semantic Analysis
(4) Optimization
(5) Code Generation

* Lexical Analysis란...

 실생활에서 Lexical Analysis의 예를 든다면, 문장을 보고 의미단위로 쪼개는 것을 의미한다.

 예시)  He go home. 이라는 문장을 Lexical Analysis(구문분석)을 한다면, He, go, home 이렇게 나눌 수 있다.

 그리고 He는 주어(Subject), go는 동사(Verb), home 목적어(Object)라고 부른다. 이것들은 각 문장 성분의 한 요소이다.

 이와 마찬가지로, 컴파일러에서 Lexical Analysis는 구분자(Punctuation)로 나뉘어진 코드 라인을 작은 의미 단위로 쪼개는 것이다.

 작은 의미 단위로 쪼개는 이유는, 이후 처리에 대해 간결하게 하기 위함이다. (내 추측임..) 

 Lexical Analysis에 의해서 쪼개어진 부분 문자열을 유식하게 Token이라고 부른다.

 Token은 <Class, Stiring> 쌍으로 구성된다. 여기서 Class는 우리가 쓰는 언어에서의 문장 성분에 해당한다.

 Class의 구체적인 종류로는..

  -> Identifier -  |a-zA-Z|*|0-9|* 
  -> Number - |0~9|
  -> Operator  - *,+,-,/,% (산술연산), ||, ==, ^,~,|(논리연산), = (대입연산)  
  -> Keyword - 예약어라 불리며, if-then-else , while ... 일련의 컴파일러에 미리지정된 명령어이다.
  -> Whitespace - 위의 요소들을 문장에서 서로 구분해주는 역할을 한다. 
  등이 있다. 

 String은 나뉜 부분 문자열이다.

 예를 들어보자.  아래 코드는 3개의 토큰으로 분리가 될 수 있다. 

  foo = 42;
 
 <Identifier, foo> , <operator, = >, <number, 42>

<TokenClass, Lexeme>도 <Class, String>과 똑같은 의미를 지닌다. 

나중에 나오겠지만, Lexical Analysis로 추출해낸 Token은 Parser의 입력데이터로 들어가 문장 구조 분석을 수행하게 된다. 



 

덧글

댓글 입력 영역