- 컴파일러의 동작은 크게 front end, back end로 나뉜다.
- front end : 컴파일러가 여러 종류의 언어(C, Java, python 등등)를 입력으로 받아서 이를 하나의 통일된 IR (Intermediate Representation)으로 만들어주는 작업을 수행하는 부분. 컴파일러론에서 주로 다루는 부분이 front end에 해당하는 부분임. 컴파일러마다 생성하는 IR의 방식이 다름(GCC : ASTs, LLVM : SSA 등).
- back end : front end에서 생성한 IR을 이용해 타겟 플랫폼(ARM, x86등)에 맞는 머신코드를 생성하는 부분. 컴퓨터 구조나 OS와 관련된 부분이 많음.
source code ->
lexical analysis : scanner (token 생성) ->
syntax analysis : parser (abstract syntax tree 생성) ->
semantic analysis (decorated AST 생성) ->
intermediate code generator (IR, intermediate representation 생성) ->
////////////// 여기까지 front end. 이 아래로 back end
code optimizer ->
code generator (target에서 실행될 코드 마지막으로 생성. 머신코드)
- scanner 이해에 필요한 것 : RE (regular expression 정규표현식)
- scanner, parser 이해에 필요한 것 : CFG (Context-Free Grammar)
- RE, CFG 이해에 필요한 것 : Automata