컴파일 과정을 자세하게 알려면 어떤 책을 보면 되나요

rlawhdgus34의 이미지

컴파일에 대해 잘 몰라서

구글에 컴파일 과정이라고 검색을 하면 보통 전처리과정 -> 어셈블리로 변환 -> 오브젝트파일 생성 -> 링크 -> 실행파일

이런 과정이라고 설명이 되어있는데요.

정확히 무엇을 하는지 왜하는지 궁금해서 검색을 해보면 제가 원하는 만큼의 디테일한 설명은 잘 못찾겠더라고여.

그래서 책을 찾아보자 하고 도서관에서 컴파일러 책을 보면 컴파일러 책에는 저런 컴파일과정보다는 저 과정보다 더 자세한? 문자열을 분석해서 어떻게 어떻게 하고 그런 내용이 있더라고여.

저런 과정이 어떤 상위주제에 속하는지를 알아야 키워드를 알고 책을 찾던지 할텐데..

무슨 키워드를 사용해야 전처리과정 -> 어셈블리로 변환 -> 오브젝트파일 생성 -> 링크 -> 실행파일 이 과정에 대한 상세한 설명을 알 수 있나요??

라스코니의 이미지

Embedded Recipes에 한표요 ~

익명 사용자의 이미지

교보문고나.. 학교 도서관에도 소장되어 있지 않네요 책이..

보니까 예약판매?를 하는 형식인듯요.. 그래서 밑에 어떤분이 달아주신 computer systems book을 참고삼아 공부하기로 하였습니다

감사합니다~

익명 사용자의 이미지

컴파일러 책을 보셨다니 대충은 아시겠지만, 컴파일러는 크게 두 파트로 나뉩니다.

1. 소스를 읽고 그 문법적 구조와 의미를 파악하는 frontend
2. 파악된 소스를 타겟 언어(기계어 등)으로 변환하는 backend

아무 컴파일러론 책이나 집어 들면 대체로 이 모든 걸 다룹니다만, 선수과목이라고 할 만한 분야들은 있습니다.

1) frontend를 이해하기 위해서는 일단 오토마타 이론(Automata theory)을 알아야 합니다. 뭐 컴파일러가 이쪽 분야 지식을 그렇게 많이 요구하지는 않기 때문에, 컴파일러론 책에서 필요한 만큼 설명해 주는 경우도 적잖이 있습니다. 그 밖에도 언어에 따라 타입 이론(Type theory)을 알아야 할 수도 있고, OOP 언어 컴파일러를 알고 싶으시다면 당연히 OOP 자체에 대해서도 잘 아셔야겠죠.

2) backend 중에서도 기계어로 된 실행파일을 직접 생성하는 컴파일러에 대해서 공부할 경우, 기본적으로 CPU 아키텍처 및 운영체제에 대한 지식을 바탕으로 깔아야 합니다.

사실 컴파일러론은 소프트웨어와 하드웨어 분야의 접점으로써 상당히 많은 컴퓨터공학 분야들이 융합되어 있는 분야입니다. 파면 팔수록 끝이 없을거에요.

jick의 이미지

컴파일러 자체하고는 큰 상관이 없습니다만, "어셈블리 변환, 오브젝트 파일 생성, 링크" 이런 단계에 관심이 있으시다면 이 책을 추천합니다.

Computer Systems: A Programmer's Perspective
http://csapp.cs.cmu.edu/

사실 책 자체는 컴파일러에 대한 책이 아니라, CPU가 어떻게 생겨먹었고 프로그램을 만들어서 실행시키면 컴퓨터 안에서 무슨 일이 일어나는가에 대해 가르치고 있습니다. (독자의 수준에 따라서 뻔한 이야기가 많을 수도 있습니다.)

익명 사용자의 이미지

제가 원하는 형태의 정보가 잘 서술되어 있는 책같습니다 ㅎㅎ
감사합니당!!!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.