# ISA & Compiler Basics ## Basic Computer To get a task done by a general-purpose computer, we need: * Program: A sequence of instructions * Instruction set: A set of possible instructions ### Von Neuman Architecture Both Instructions and data are stored in the memory. Instructions dictate: 1. which and how data are manipulated 2. which instruction should be next The memory is independent of the CPU. ### How to load a program ``` *.c -(compiler)-> *.s: Assembly program *.s -(assembler)-> *.o: Object file *.o -(linker)-[with library(*.o)]-> *.exe: Executable *.exe -(loader)-> to in memory ``` ### Program Computer is essentially a complex state machine. **programmer visible state**: * Memory * Registers * Program Counter Instructions(Program) specify how to transform the values of programmer visible state. # 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