본문 바로가기

컴파일러

[컴파일러] 컴파일러: 원리, 기법, 도구 - 구문 정의와 파스 트리 구문 정의 (syntax definition) 문맥 자유 문법은 언어의 구문을 기술하기 위해 사용되며 컴파일러의 전반부를 표현하는 방법이다. 그렇다면 문맥 자유 문법(줄여서 자유 문법)은 어떻게 표현될까? 익숙한 if-else 문을 통해 자유 문법을 알아보자. if (expression) { statement } else { statement } 이 C 코드를 자유 문법으로 나타내면 다음과 같이 표현된다. - statement ->.. 더보기
[컴파일러] 컴파일러: 원리, 기법, 도구 - 컴파일러의 개요 컴파일러는 front end, middle end, back end의 세가지 단계로 구성되어 있다. front end: 토큰화를 위한 어휘 분석(Lexing), 파스 트리 구성을 위한 구문 분석(Parsing), 중간 코드를 위한 의미 분석 등을 처리한다. middle end: 중간 코드에 대해 프로그램의 분석과 최적화를 처리한다. back end: 각각의 CPU 아키텍처에 대해 코드 최적화를 수행하며 최종 코드를 생성한다. 먼저 우리는 fro.. 더보기
[컴파일러] 백패칭 백패칭 GOTO문의 전방 점프나 if 분기 구문 같은 경우에는 내부적으로 점프를 사용하는데 점프할 부분의 소스 코드가 읽히지 않아 점프의 번지를 지정할수 없는 상태이므로 중간 코드에 빠진 부분을 만들어 놓고 해당 점프의 목표 부분을 찾으면 점프의 번지를 결정한다. 이것을 백패칭이라고 하는데 이렇게만 써놓아서는 이해가 잘 안되므로 간단한 C언어와 어셈블리 코드를 예시로 들어 설명하겠다. if (x==y) { x=-1; } else { .. 더보기