cfg 3

[컴파일러 이론] 12. register allocation

register와 memoryCPU에서 어떤 값들을 저장하는 용도로 register와 memory가 있다.컴퓨터 구조론에서도 나오는 내용이지만 간단히 정리해보자. 먼저 CPU에서 연산을 할 때는 register의 내용을 사용한다.따라서 memory에 있는 내용은 먼저 register로 올린 후에 연산이 가능하다. memory 보다 register가 훨씬 빠른데, 대신 그만큼 용량은 적다.register allocation이전 글에서 IR에 대해 잠시 얘기했었다. 이때 기본적으로 깔려있는 가정이 있는데,"IR은 무한한 register를 가지고 있다" 그러나 실제로는 당연히 register의 개수에 8~16개 정도로 제한이 있는데, 이 글에서는 이것과 관련해 알아보자. 우리가 이론적으로 다뤘던 registe..

CS/컴파일러 2026.01.04

[컴파일러 이론] 10. Dataflow Analysis

컴파일러의 frontend에서는사람이 작성한 source code를 lexical, systax, semantic ayalys is를 통해 문법적으로 문제없는 코드라는 것을 보장했고,AST를 만들었다.front end와 back end를 연결하는 과정으로 이전글에서 봤던 code generation 과정이 있다.여기서 AST를 IR로 바꿔서 back end로 넘긴다.이번 글에서부턴 back end의 동작을 알아보자.이 back end에서는 최적화를 하는데 프로그램의 자원 효율성을 높이는 것이다.이 자원의 기준은 사람/프로그램 마다 다르다.어떤 프로그램은 공간을 많이 쓰더라도 시간을 줄이는게 효율성을 높이는 것일 수도 있고 그 반대일 수도 있다.그러나 어떤 방식으로 최적화를 하던지 프로그램의 결과는 바뀌면..

CS/컴파일러 2025.12.31

[컴파일러 이론] 3. Syntax analysis, Parser, CFG, Parse Tree, AST

Syntax analysis, Parser이번글은 syntax analysis에 대해 알아보자.코딩을 할때 개발자들을 괴롭히는 syntax error 라는 에러메세지는 많이 보았을 것이다. 이번글은 이와 관련된 것이다.이전글들에서 얘기한 lexical analysis를 수행하는 scanner는 코드를 토큰들로 나눠주는 역할을 했다.이번 syntax analysis는 이 토큰들을 활용해 문법에 맞는지를 판단한다. 이 분석을 하는 친구를 Parser라고 한다.이 Parser가 하는 일을 몇가지 예를 들어보면,1. 괄호를 열면 닫는 부분이 있는지2. C언어 같은 경우 뒤에 ;을 잘 썼는지3. while 뒤에 ( )가 있어 그 안에 반복에 대한 조건문이 있는지등등 많은 문법을 검증한다.Scanner는 각 토큰을..

CS/컴파일러 2025.11.23