Skip to content

skyfe79/acwj

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

컴파일러 제작 여정

이 깃허브 저장소는 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부: L값과 R값 재검토
  • 19부: 배열, 1부
  • 20부: 문자와 문자열 리터럴
  • 21부: 추가 연산자
  • 22부: 지역 변수와 함수 호출을 위한 설계 아이디어
  • 23부: 지역 변수
  • 24부: 함수 매개변수
  • 25부: 함수 호출과 인자
  • 26부: 함수 프로토타입
  • 27부: 회귀 테스트와 즐거운 놀라움
  • 28부: 런타임 플래그 추가
  • 29부: 리팩토링
  • 30부: 구조체, 공용체, 열거형 설계
  • 31부: 구조체 구현, 1부
  • 32부: 구조체 멤버 접근
  • 33부: 공용체와 멤버 접근 구현
  • 34부: 열거형과 타입 정의
  • 35부: C 전처리기
  • 36부: breakcontinue
  • 37부: switch 문
  • 38부: 매달린 else와 기타
  • 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를 위한 백엔드

향후 부분에 대한 일정이나 시간표는 없다. 새로운 내용이 추가되었는지 수시로 확인하면 된다.

저작권

SubC 컴파일러의 작성자 Nils M Holm의 코드와 아이디어 중 일부를 차용했다. 그의 코드는 공용 도메인이다. 내 코드는 충분히 다르기 때문에 다른 라이센스를 적용할 수 있다고 판단했다.

별도로 명시하지 않는 한,

  • 모든 소스 코드와 스크립트는 GPL3 라이센스 하에 Warren Toomey가 저작권을 가진다.
  • 소스 코드가 아닌 모든 문서(영문 문서, 이미지 파일 등)는 크리에이티브 커먼즈 BY-NC-SA 4.0 라이센스 하에 Warren Toomey가 저작권을 가진다.

About

A Compiler Writing Journey

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 97.2%
  • Shell 1.9%
  • Other 0.9%