컴파일러 이론에서 토크나이저(Tokenizer), 렉서(Lexer), 파서(Parse) 의 역할

Minsu Kang·2020년 10월 18일
5

토크나이저(Tokenizer), 렉서(Lexer)

토크나이저란 어떤 구문에서 의미있는 요소들을 토큰으로 쪼개는 역할을 하고 렉서는 토큰의 의미를 분석하는 역할을 한다.

Tokenizer, Lexer 의 역할을 합하여 Lexical anlyze라고 한다. Lexical Analyze란 의미 있는 조각을 검출하여 토큰을 생성하는 것을 말한다.

예를들어, Lexical analysis is the first step of compiler"라는 문장에서 'L', 'e', 'x', 'i', 'c', 'a', 'l'을 따로 놓으면 어떠한 의미도 없지만, "Lexical"이라는 하나의 조각으로 보면 의미를 갖게 된다.

이렇게 토큰 단위로 키워드나 속성을 정의한 이후에 parser에게 넘겨준다.

파서(Parser)

Parser는 Lexical analyze 되어 토큰화된 데이터를 가지고 그것을 구조적으로 나타낼 수 있게 해준다. 또한 데이터를 구조적으로 바꾸는 과정에서 데이터가 올바른지 검증을 수행한다. 대부분의 인터프리터와 컴파일러에서 소스코드를 구조적으로 나타내는 자료구조로 AST를 사용한다.

변환 예시

👉입력값: [1, [2,[3]],'hello', 'world', null]

👉토크나이저(Tokenizer)

👉렉서(Lexer)

👉파서(Parser)

AST(Abstract Syntax Tree)

AST, 다른말로 "Abstract Syntax Tree" 혹는 "Syntax Tree" 라고 불리는 이 Tree는 프로그래밍 언어로 쓰여진 소스코드의 abstract syntactic 구조를 표현하기 위해서 사용된다. 쉽게 말하자면 특정 프로그래밍 언어로 작성된 프로그램 소스 코드를 각각 의미별로 분리하여 컴퓨터가 이해할 수 있는 구조로 변경시킨 트리를 의미한다.

출처: https://code-giraffe.tistory.com/44 [기린의 공부 블로그]

while b != 0:
    if a > b:
        a = a − b
    else:
        b = b − a
return a

profile
백엔드 개발자

0개의 댓글