Source Program → ································· → Target Code
Source Program → ·········· → IR → ············ → Target Code
|-------- Frontend --------||-------- Backend --------| Source Program → ·········· → IR → ············ → Target Code
|-------| |--------| |----------| |-----------| Source → | Lexer | → tokens → | Parser | → parse → | Semantic |→ AST → | IR | → IR Program | | | | tree | Analyzer | | Generator | |-------| |--------| |----------| |-----------|
position = initial + rate * 60 ↓ |------------------------------------| | Lexical Analyzer (Lexer) | |------------------------------------| ↓ <ID, 1> <=> <ID, 2> <+> <ID, 3> <*> <INT, 60>
<ID, 1> <=> <ID, 2> <+> <ID, 3> <*> <INT, 60> ↓ |------------------------------------| | Syntax Analyzer (Parser) | |------------------------------------| ↓ = / \ <ID,1> + / \ <ID,2> * / \ <ID,3> <INT,60>
= / \ <ID,1> + / \ <ID,2> * / \ <ID,3> <INT,60> ↓ |------------------------------------| | Semantic Analyzer (Type Checking) | |------------------------------------| ↓ = / \ <ID,1> + INT INT / \ <ID,2> * INT INT / \ <ID,3> <INT,60> INT INT
= / \ <ID,1> + INT INT / \ <ID,2> * INT INT / \ <ID,3> <INT,60> INT INT ↓ |------------------------------------| | IR Generator | |------------------------------------| ↓ t1 = 60 t2 = ID3 * t1 t3 = ID2 + t2 ID1 = t3
|-------------| |-------------| |-------------| IR → | Code | → IR' → | Code | → IR'' → | Code | → Target | Optimizer 1 | | Optimizer 2 | | Generator | Program |-------------| |-------------| |-------------|
t1 = 60 t2 = id3 * t1 t3 = id2 + t2 id1 = t3 ↓ |------------------------------------| | Code Optimization | |------------------------------------| ↓ t2 = id3 * 60 id1 = id2 + t2
t2 = id3 * 60 id1 = id2 + t2 ↓ |----------------------------------| | Code Generation | |----------------------------------| ↓ LD R2, id3 MUL R2, R2, 60 LD R1, id2 ADD R1, R1, R2 ST id1, R1




