Intermediate Representation


## IR
- **Three-address code**
- stack-machine code type
**An internal code representation used by compilers**
2개의 입력용과 1개의 출력용 메모리 주소 혹은 레지스터를 지정하는 형식이기 때문에 **Three-address code**
언어와 기계 사이의 의존성을 독립적으로 유지하기 위해서
전단부는 입력으로 받은 소스 프로그램을 후단부가 이해할 수 있는 코드로 번역하는 역할이고, 후단부는 해당 코드를 입력받아 동작시킬 기계에서 적합한 코드로 번역을 하는 역할을 담당
전단부는 후단부가 이해할 수 있는 별도의 코드를 결과물로 출력하는데, 이를 중간 코드
- U-Code
- P-code : stack-machine code type
- JVM Byte Code  : stack-machine code type
컴파일러 최적화를 실현하는데 사용
- Operators use at most* three addresses*
- Introduce temporary vairables (interior nodes in [AST](https://texonom.com/ast-6da505f4909a41809a74637101a4733c) )
- quadruple
> - An array or linked list of 4-tuple struct
- triple
> - Let operations implicitly define temporary variables



> [컴파일러는 어떻게 내가 작성한 코드를 인식하는걸까? - 재그지그의 개발 블로그](https://wormwlrm.github.io/2021/04/18/Formal-Language-and-Compiler.html)






