컴파일러란 고급언어로 작성된 프로그램을 번역해 기계어로된 프로그램을 만들어 주는 역활을 한다.
이때 구문분석 -> 최적화 -> 코드생성 -> 링킹의 과정을 거치는데, 구문분석 과정에서 소스코드는 Tokenizer, Lexer, Parser를 차례로 거친다. 이포스팅에선 구문분석에 대해 알아 보겠다.
Tokenizer란 어떤 구문에서 의미있는 요소들을 의미있는 단위의 토큰으로 쪼개는 역활을 한며 Lexer는 토큰의 의미를 분석하는 역활을 한다 이두역활을 합쳐 Lexical Analyze라 한다.
예를들어 ex) Age is no guarantee of maturity 라는 문장에서 'A','g','e'을 따로 보면 어떠한 의미도없지만 Age라는 하나의 조각을 보면 의미를 갖게된다.
이렇게 의미가 있는 토큰 단위로 그 데이터를 Parser에게 넘겨주게 된다.
Parser는 Lexical Analyze되어 Tokenizer된 데이터를 구조적으로 나타낸다.
이때 Parser에 의해 도출된 결과를 AST(Abstract Syntax Tree)라 한다.
Abstract syntax tree
https://en.wikipedia.org/wiki/Abstract_syntax_tree
[컴파일러] 토크나이저, 렉서, 파서 (Tokenizer, Lexer, Parser)
https://gobae.tistory.com/94