본문 바로가기

Books/컴파일러 만들기 ✔️7

[컴파일러 만들기] 7장 - 어셈블리 (마지막) 7.0 어셈블리 - 스택 머신: 스택을 사용해 식을 계산하는 머신 - 물리 머신(레지스터 머신): 스택을 사용해 식 계산 X - CPU는 레지스터라는 공간을 사용해 식을 계산함 - 레지스터; CPU 내에 마련된 공간, 램이라고 부르는 메인 메모리와는 별개 공간 - 어셈블리: CPU의 명령어와 일대일로 매칭되는 명령어들의 모음 - C++ 코드에 부분적으로 사용 가능한 인라인 어셈블리를 이용하여 실습 - 짓 컴파일; 배열에 담긴 기계어를 런타임에 실행 7.1 레지스터 머신 - 식의 계산 - 흐름 제어 - 함수의 호출과 종료 - 함수 호출 인자 - 매개변수와 지역변수 7.2 마치며 [Source Code] ex7-1 ~ ex7-21 p.s) 컴파일러 만들기 1회독이 완료되었습니다. 약 한 달 정도 소요되었고,.. 2022. 1. 28.
[컴파일러 만들기] 6장 - 가상머신 6.0 가상머신 - 가상머신(코드 실행기): 목적 코드 리스트를 순회하며 실행하는 프로그램 - 생성한 목적 코드를 실행할 가상 머신 필요 - 코드 생성 단계의 결과물은 선형 구조인 코드 리스트, 리스트에 담긴 목적 코드를 순차적으로 하나씩 읽고 실행하는 것의 반복 6.1 호출 스택과 스택 프레임 - 호출 스택: 함수가 호출되고 종료되는 과정이 자료구조의 스택의 동작과 같음 (스택 프레임의 리스트, 콜 스택) - 함수가 호출된 순서대로 실행, 호출된 순서의 역순으로 종료 - 함수; 매개변수, 지역변수, 피연산자 스택 (for 함수 내 식 계산), 명령어 포인터 (for 명령어 순서대로 실행) - 스택 프레임: 함수를 실행하기 위해 필요한 공간 - 변수의 값 저장할 공간, 식의 피연산자와 결과값을 저장할 공.. 2022. 1. 21.
[컴파일러 만들기] 5장 - 코드 생성 5.0 코드 생성 - 소스 코드: 프로그래밍 언어로 작성한 사람이 읽을 수 있는 문자열 형태의 코드 - 목적 코드: 기계가 읽을 수 있는 바이너리 형태의 코드 (기계가 제공하는 명령어로 작성한 코드) - 코드 생성: 목적 코드를 생성하는 과정 (비선형 구조인 구문 트리 내용을 선형 구조로 표현) - 구문 트리 순회하며 노드들의 내용을 목적 코드로 작성 - 목적 코드 생성의 주된 목적; 실행 속도 - 구문 트리가 담고 있는 내용을 선형 구조로 표현하면 실행 속도 향상 - 실행 흐름 제어 동작은 goto문 이용하여 표현 5.1 목적 코드와 명령어 - 기계는 서로 호환되지 않음 (안드로이드용, ios용, 윈도우용, m1 프로그램, ...) - 기계들이 저마다 서로 다른 명령어들을 제공하기 때문 - 목적 코드 .. 2022. 1. 10.
[컴파일러 만들기] 4장 - 인터프리터 4.0 인터프리터 - 컴파일 과정 - 전단부 - 어휘 분석; 소스 코드 문자열 (소스 코드 문자열 분석) -> 토큰 리스트 - 구문 분석; 토큰 리스트 (소스 코드 구조 분석) -> 구문 트리 (전단부와 후단부 잇는 매개체) - 후단부 - 구문 트리 실행; 인터프리터 (구문 트리 실행 프로그램, 구문 트리 순회하면서 노드 실행) - 코드 생성; 구문 트리 -> 목적 코드 - 코드 실행; 가상머신 (목적 코드 실행 프로그램) 4.1 구문 트리 순회 - 가장 먼저 해야할 것 => 구문 트리를 순회할 방법 결정! - cf. Visitor 패턴 (디자인 패턴) - 구문 분석에서 작성했던 노드들에 가상 함수 추가하여 구문 트리 순회할 계획 // Node.h // 부모 문 노드에 순수 가상 함수 선언 // 문 노드.. 2022. 1. 3.
반응형