컴파일러 1 === # Interpreter in Modern Processors # Compiler * Front-End 보이는 부분(HW에 신경을 안써도 됨) * Back-End HW에 밀접한 최적화를 해줌 ## General Structure of a Modern Compiler * Front-End * Lexial Analysis * Syntax Analysis * Semantic Analysis * Code Generation - 1 * Back-End * Control/DataFlow Analysis * Optimization * Code Generation - 2 이런 모듈식 구조는 다양한 언어와 하드웨어에 쉽게 적용할 수 있도록 도운다. ### Lexical Analysis (Scanner) 프로그램을 `token`의 의미 단위로 나눔. 그리고 의미가 없는 단위를 지움. 보통 FSA로 구현함. ### Syntax Analysis (Parser) 미리 있는 Grammar를 바탕으로 Syntax Correctness를 진행함. ### Semantic Analysis * identifier 정의 등 * 타입 체크 * 스코프 체크 * 오버로딩 모호화 해소 * IR로 변환 ### Optimization 최적화함 * 상수 최적화 * 안쓰는 변수 * loop에서 안바뀌는 변수 * 다시 똑같이 계산하는 변수 제거 * ... ### Code Generation