== 전반적인 컴파일러 동작 과정 == * 컴파일러의 동작은 크게 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에서 실행될 코드 마지막으로 생성. 머신코드) }}} == 각 과정에서 생성되는 파일들 == == finite state machine == == 수식변환기 BNF == * 바로 C언어를 입력으로 받는 부분을 구현하는 것보다 NFA -> DFA -> 코드로의 변환 과정을 보기 위해 수식을 입력으로 받아 AST를 생성하는 변환기를 구현해보는 것부터 시작.