본문 바로가기

반응형

코딩 이야기/컴파일러

(4)
컴파일러 공부하고 개발하기 #03 - 파서 제너레이터, 스캐너 제너레이터, 컴파일러 컴파일러 서론 공부를 계속 이어가려했는데, 이사하면서 인터넷 신청을 늦게해서 시간이 꽤 걸렸다. 오늘은 파서 제너레이터에 대해 다뤄볼 것이다. 파서 제너레이터 파서(parser)를 만들기 위해서는 동일한 코드가 반복이 되고, 이는 상당히 번거롭고 귀찮은 일이다. 이를 위해 파서를 생성하는 프로그램이 파서 제너레이터이다. 파서 제너레이터와 스캐너 제너레이터, 컴파일러 컴파일러는 모두 동일한 말이고 동일한 프로그램이다. 파서 제너레이터에도 종류가 있다. LR 파서 제너레이터 LALR 파서 제너레이터 LL 파서 제너레이터 파서 제너레이터는 다룰 수 있는 문법의 범위에 따라 나누게 된다. LR 파서 제너레이터 문법의 취급 범위: 넓다 속도: 평균적 LALR 파서 제너레이터 문법의 취급 범위: 비교적 넓다 속도: 평균적 ..
컴파일러 공부하고 개발하기 #02 - 소스 코드 해석, 어휘 해석, 구문 해석, 의미 해석, 의미값 서론 오늘은 소스 코드 해석에 대해 다룰 것이다. 책 기준으로는 이전에 책에서 제공하는 소스코드의 간단한 일부 리뷰가 있는데, 그냥 #00과 #01 편에서 말한 순서를 코드로 나타낸 것이기에 패스하도록 하겠다. 그리고 책에서도 전처리 단계가 꽤나 복잡한 관계로 빠져버렸다. 소스 코드 해석에서 고려해야 할 점 우리가 코드가 있을 때 그냥 위에서부터 줄줄이 해석한다면 편하겠지만 우린 '연산자의 우선순위'를 고려해야 한다. 5 + 4 + 2는 컴퓨터 입장에서 (5 + 4) + 2로 받아들이게 되지만, 4 + 2 * 8은 4 + (2 * 8)로 해석해야하기에 이것이 연산자의 우선순위이다. 또한 함수명이 일반적으로 선언되어있는 것과 문자열 안에 함수명이 있을 때의 취급 또한 다르기에 이러한 점들을 고려해야한다. ..
컴파일러 공부하고 개발하기 #01 - 구문 해석, 의미 해석, 중간 표현의 생성, 코드 생성 서론 지난번에 이어서 이번에는 전처리와 어셈블 사이의 중간 과정인 컴파일에 대해 다뤄볼 것이다. 전처리, 컴파일, 어셈블, 링크를 전체를 묶어 컴파일 과정이라 부르긴 하나, 진짜 컴파일은 전처리와 어셈블 사이의 컴파일이 진짜 컴파일이다. 전 글의 '(좁은 의미의)컴파일'이다. 컴파일의 4단계 Syntax anlayzing(구문 해석) Semantic analysis(의미 해석) IR, intermediate representation(중간 표현의 생성) Code generation(코드 생성) Syntax anlayzing(구문 해석)이란? 소스 코드를 해석해서 컴퓨터가 이해하기 쉬운 형식으로 바꿔줘야한다. 그렇다면 '컴퓨터가 이해하기 쉬운 형식'은 무엇일까? 바로 구문 트리이다. 이후 구문 트리에 대해..
컴파일러 공부하고 개발하기 #00 - 전처리, 컴파일, 어셈블, 링크 서론 일단 이 글은 필자가 아오키 미네로우 작가님의 '컴파일러 구조와 원리' 라는 책을 읽고 공부하며 진행한다. 주로 이 책의 진행의 포커스가 맞춰져있고, 그냥 이 책을 조금 요약하고 정리하고 거기에 나의 느낀점 등을 정리해서 쓴다고 보는 게 좋을 것이다. 이번 글에서는 여러 용어와 컴파일 과정에 대해 다룰 것이다. 컴파일러의 정의 컴파일러란 프로그래밍 언어의 소스 코드를 다른 형식으로 변환하는 소프트웨어를 뜻한다. 그리고 우린 이 작업을 컴파일이라고 부른다. 최근에 C언어를 공부한 사람이라면 여러 IDE를 통해 배웠을 것이다. 거기서 코드를 실행시키며 문법을 배울텐데 그 경우 빌드 버튼을 누르자마자 콘솔창이 실행되고 그 콘솔창에 자기가 만든 코드가 띄워질 것이다.(비주얼 스튜디오를 안쓴지 꽤 되서 햇갈..

반응형