CS/Compiler 4

CSE4120 서강대학교 기초컴파일러 Prj3

실제 c가 아니라 제한사항이 있는 mini-c 상에서 optimization생각들 모음마지막 프젝을 만점 받지는 못했지만, 할 때 생각한 아이디어들 모음따로 유명한 최적화 방법에 대한 공부는 하지 않았다. 교수님이 코드/tc는 공유하지 말라 하셔서 아이디어 정도만 적는다. 사실 오래 고민한게 아까워서 적어 놓는다. 기본적인 구현은 RD,LA,AE를 통한 CP,DCE,AE를 다 하고 나서의 이야기이다. 1. mem2reg 하는 방법포인터는 항상 mem2reg한다. 그리고 어떤 int,bool 단일원소가 포인터로 대입되는 operand가 아니라면 추가로 mem2reg가능하다. 이 정당성은 쉽게 보일 수 있다.배열에 대해서 생각해 보았는데 이건 쉽지 않았다.사실상 이게 젤 중요 2. Load ~ 도 AE Se..

CS/Compiler 2024.12.27

Short-Circuit Evaluation

Short - Circuit Evaluation은 뭘까?즉 if(a && b)가 있다고 할 때, a가 0이라면 b를 검사하지 않아야 한다 라는 일종의 약속이다.즉 위의 예시 코드는 반드시 오류가 나지 않아야 한다.  그래서 IR generation을 짤 때 이러한 shortcut을 잘 고려해서 구현해야 올바른 코드이다.그런데 이번 프로젝트3 에서 IR optimization을 진행하면서 다음과 같은 상황을 고려하는 걸 생각하게 됐다.x-x는 x에 어떤 값이 들어있는지 살펴볼 필요 없이 항상 0이다.  즉 이런 상수뿐만이 아니라 register나 experssion에 대한 것들에 대해서도 short - curcuit이 진행되어야 하는가? 혹은 이런것들이 real world compiler는 어떻게 구현되어..

CS/Compiler 2024.12.13

os별 F#의 줄바꿈.

우리학교서버에 vscode 원격접속은 금지상태이다.서버의 문제인지 vscode의 문제인지 학교의 문제인지는 제쳐두고, 정상적인 사람이라면 원격접속을 해서 프로젝트나 과제를 하기마련인데 어쩔 수 없이 로컬로 세팅을 했다.150줄 엄청난 집중력으로 type checking 하는 F# 코드를 짰는데 분명 output이 맞는데 자꾸 wrong answer가 나오는 것이다... 보이는 건 똑같은데 이런 python 코드로 체크를 하는데 길이를 출력하게 해 보았다.  이럼 분명 뭐 줄바꿈이나 공백문자에 문자가 있을 것이라고 예상했는데, 이게 지금 F#은 type checking 오류인 줄의 번호를 List로 만들어서 넘겨주기만 하면 되는 문제라서 결국 내가 짠 부분에서의 문제는 아닌 것이다.그래서 gpt한테 물어보..

CS/Compiler 2024.11.18

F#에서 재귀함수와 불변성 (Immutability)에 관한 쉬운 문제

학교 기초 컴파일러 수업에서 F#언어를 다루고 과제가 나왔다.module P2// (Note) Do NOT change the definition of the following type and exception.type Exp =    Num of int  | Add of Exp * Exp  | Sub of Exp * Exp  | Mul of Exp * Exp  | Div of Exp * Expexception DivByZero/// Return the integer value represented by the expression 'e'. If there is any/// division-by-zero case, raise the 'DivByZero' exception.let rec eval (e: Ex..

CS/Compiler 2024.11.12