컴파일러 작성 여정
이 Github 저장소에는 C 언어 하위 집합에 대한 자체 컴파일 컴파일러를 작성하는 과정을 기록하고 있습니다. 나는 또한 당신이 따라가고 싶다면 내가 무엇을 했는지, 왜 했는지에 대한 설명과 컴파일러 이론에 대한 몇 가지 참고 자료가 있을 수 있도록 세부 사항을 작성하고 있습니다.
하지만 너무 많은 이론이 아닌, 실용적인 여행이 되기를 바랍니다.
지금까지 내가 취한 단계는 다음과 같습니다.
- 0부: 여정 소개
- 1부: 어휘 스캐닝 소개
- 2부: 구문 분석 소개
- 3부: 연산자 우선순위
- 4부: 실제 컴파일러
- 5부: 진술
- 6부: 변수
- 7부: 비교 연산자
- 8부: If 문
- 9부: While 루프
- 10부: For 루프
- 11부: 함수, 1부
- 12부: 유형, 1부
- 13부: 함수, 2부
- 14부: ARM 어셈블리 코드 생성
- 15부: 포인터, 1부
- 16부: 전역 변수를 올바르게 선언하기
- 17부: 더 나은 유형 검사 및 포인터 오프셋
- 18부: Lvalue와 Rvalue 다시 살펴보기
- 19부: 배열, 1부
- 20부: 문자 및 문자열 리터럴
- 21부: 더 많은 연산자
- 22부: 지역 변수 및 함수 호출을 위한 디자인 아이디어
- 23부: 지역 변수
- 파트 24: 함수 매개변수
- 25부: 함수 호출 및 인수
- 26부: 함수 프로토타입
- 27부: 회귀 테스트와 놀라운 놀라움
- 28부: 더 많은 런타임 플래그 추가
- 29부: 약간의 리팩토링
- 30부: 구조체, 공용체 및 열거형 설계
- 31부: 구조체 구현, 1부
- 32부: 구조체의 멤버에 액세스
- 33부: 통합 및 회원 액세스 구현
- 34부: Enum과 Typedef
- 35부: C 전처리기
- 파트 36:
break
하고 continue
- 37부: Switch 문
- 38부: 매달려 있는 다른 것들과 그 이상
- 39부: 변수 초기화, 1부
- 40부: 전역 변수 초기화
- 41부: 지역 변수 초기화
- 42부: 유형 캐스팅과 NULL
- 43부: 버그 수정 및 추가 연산자
- 44부: 상수 접기
- 45부: 전역 변수 선언, 다시 살펴보기
- 46부: Void 기능 매개변수 및 스캐닝 변경
- 47부:
sizeof
의 하위 집합 - 파트 48:
static
의 하위 집합 - 49부: 삼항 연산자
- 50부: 정리, 1부
- 51부: 배열, 2부
- 52부: 포인터, 2부
- 53부: 정리, 2부
- 54부: 레지스터 유출
- 55부: 게으른 평가
- 56부: 로컬 배열
- 57부: 정리, 3부
- 58부: 포인터 증가/감소 수정
- 59부: 왜 작동하지 않나요? 1부
- 파트 60: 삼중 테스트 통과
- 파트 61: 다음은 무엇입니까?
- 62부: 코드 정리
- 63부: QBE를 사용한 새로운 백엔드
- 64부: 6809 CPU용 백엔드
향후 부분에 대한 일정이나 타임라인은 없으므로 여기에서 계속 다시 확인하여 제가 더 이상 작성한 내용이 있는지 확인하세요.
저작권
나는 Nils M Holm이 작성한 SubC 컴파일러에서 일부 코드와 많은 아이디어를 빌렸습니다. 그의 코드는 공개 도메인에 있습니다. 내 코드는 내 코드에 다른 라이센스를 적용할 수 있을 만큼 충분히 다르다고 생각합니다.
달리 명시하지 않는 한,
- 모든 소스 코드와 스크립트는 (c) GPL3 라이센스에 따라 Warren Toomey입니다.
- 소스 코드가 아닌 모든 문서(예: 영어 문서, 이미지 파일)는 (c) Creative Commons BY-NC-SA 4.0 라이센스에 따라 Warren Toomey입니다.