LangDev

(간단한) 컴파일러 구조 r1

엽우

이번 학기에 컴파일러 수업을 듣고 있는데 수업 자료에 나와 있던 컴파일러 구조를 올려봅니다. 한 번에 모두 정리하려면 시간이 오래 걸릴 것 같아 위키에 올리고 천천히 수정하고 싶은데 현재 광고글 때문에 거의 관리가 되지 않고 있어서 게시판에 올립니다.

               | 
               | Source Code 
               | 
+--------------V--------------+
|  Lexical Analyzer (Scanner) |
+-----------------------------+
               | 
               | Tokens
               | 
+--------------V--------------+
|   Syntax Analyzer (Parser)  |
+-----------------------------+
               | 
               | Abstract Syntax Tree (AST)
               | 
+--------------V--------------+
|      Semantic Analyzer      |
+-----------------------------+
               | 
               | Decorated AST
               | 
+--------------V--------------+
| Intermediate Code Generator |
+-----------------------------+
               | 
               | Intermediate Representation (IR)
               | 
+--------------V--------------+
|        Code Optimizer       |
+-----------------------------+
               | 
               | Intermediate Representation (IR)
               | 
+--------------V--------------+
|        Code Generator       |
+-----------------------------+
               | 
               | Target Assembly Program
               | 
               V

Lexical Analyzer (Scnner)

소스 코드의 문자를 토큰으로 묶습니다.

tax = (sale - purchase) * rate

위와 같은 소스 코드는 다음과 같은 토큰이 됩니다.

  1. <id, "tax">
  2. <=>
  3. <(>
  4. <id, "sale">
  5. <->
  6. <id, "purchase">
  7. <)>
  8. <*>
  9. <id, "rate">

토큰은 위에서 보여진 토큰의 종류(위에서 id, =, - 등)와 어휘소(lexeme)로 구성이 되며 이외에도 토큰의 위치(시작 줄과 열(column), 마침 줄과 열) 정보도 포함이 됩니다.


앞으로 틈나는대로 내용을 채울께요. 지금은 나가봐야 해서. ^^;

여러 모듈을 쓴다면 파일이름이나 모듈이름도 토큰정보에 들어갈 수 있지요.

semmal

그럴 수도 있겠네요. 제가 배우고 있는 수업에서는 해당 내용은 Semantic Analyzer에서 처리할 것 같은데 아직 거기까진 진도가 안 나갔네요. 관련 내용이 강의 시간에 나오면 적절하게 추가하도록 할께요~

엽우

많이 본 그림인 것 같은데, 혹시 오스트리아 출신 교수님의 컴파일러 강의를 들으시는지요?

summerlight

-ㅁ-)! 네, 맞습니다. B사감...이 아니라 B교수님요.

그런데 저 구조도를 보는 것만으로도 담당 교수를 알 수 있다는 건, 저 구조도가 특이한 형태라는 건가요? 제가 아직 공부하는 중이라 일반적인 경우는 잘 몰라서요;

엽우

특이한 구조는 아닙니다만, 사람들에 따라 사용하는 용어들이 달라지곤 합니다. Scanner 대신 Lexer라던가, IR 대신 Intermediate code라던가...

summerlight

조교입니다.

우리학교 학생들을 여기서 보니 반갑네요. :) 그런데 이 사이트는 어떻게 알게 되었는지 궁금해요. 다른학생들도 많이 알고 있나요?

mithrandir

무려 3학기 동안 신세를 진 사람입니다. 반갑습니다. 저 같은 경우는 이런 저런 이유로 임베딩 언어를 만들다가 이 쪽을 눈팅하게 되었는데요. 우리 학교에서는 이 사이트를 아는 사람이 많은 것 같진 않... 다고 하기엔 벌써 3명!

summerlight

=ㅁ=; 조.. 조교님이 계셨네요;

제가 작성하다 잘못된 부분 있으면 지적 부탁드릴께요~ 그리고 수업시간에도요; ^^;

다른 학생은... 저도 전공은 다른 거라 컴과 학생은 잘 몰라서;

엽우

이번학기에 타과생은 딱 한명뿐이군요. 그런데 무려 저와 동기 (...). 1학년때 본적이 있을지도 모르겠어요.

mithrandir