NewCompileError/2014_05_10 (rev. 1.6)
전반적인 컴파일러 동작 과정 ¶
- 컴파일러의 동작은 크게 front end, back end로 나뉜다.
- front end : 컴파일러가 여러 종류의 언어(C, Java, python 등등)를 입력으로 받아서 이를 하나의 통일된 IR (Intermediate Representation)으로 만들어주는 작업을 수행하는 부분. 컴파일러론에서 주로 다루는 부분이 front end에 해당하는 부분임.
- 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
수식변환기 BNF ¶
- 바로 C언어를 입력으로 받는 부분을 구현하는 것보다 NFA -> DFA -> 코드로의 변환 과정을 보기 위해 수식을 입력으로 받아 AST를 생성하는 변환기를 구현해보는 것부터 시작.