(간단한) 컴파일러 구조 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
위와 같은 소스 코드는 다음과 같은 토큰이 됩니다.
- <id, "
tax"> - <=>
- <(>
- <id, "
sale"> - <->
- <id, "
purchase"> - <)>
- <*>
- <id, "
rate">
토큰은 위에서 보여진 토큰의 종류(위에서 id, =, - 등)와 어휘소(lexeme)로 구성이 되며 이외에도 토큰의 위치(시작 줄과 열(column), 마침 줄과 열) 정보도 포함이 됩니다.
앞으로 틈나는대로 내용을 채울께요. 지금은 나가봐야 해서. ^^;
여러 모듈을 쓴다면 파일이름이나 모듈이름도 토큰정보에 들어갈 수 있지요.
그럴 수도 있겠네요. 제가 배우고 있는 수업에서는 해당 내용은 Semantic Analyzer에서 처리할 것 같은데 아직 거기까진 진도가 안 나갔네요. 관련 내용이 강의 시간에 나오면 적절하게 추가하도록 할께요~
많이 본 그림인 것 같은데, 혹시 오스트리아 출신 교수님의 컴파일러 강의를 들으시는지요?
-ㅁ-)! 네, 맞습니다. B사감...이 아니라 B교수님요.
그런데 저 구조도를 보는 것만으로도 담당 교수를 알 수 있다는 건, 저 구조도가 특이한 형태라는 건가요? 제가 아직 공부하는 중이라 일반적인 경우는 잘 몰라서요;
특이한 구조는 아닙니다만, 사람들에 따라 사용하는 용어들이 달라지곤 합니다. Scanner 대신 Lexer라던가, IR 대신 Intermediate code라던가...
조교입니다.
우리학교 학생들을 여기서 보니 반갑네요. :) 그런데 이 사이트는 어떻게 알게 되었는지 궁금해요. 다른학생들도 많이 알고 있나요?
무려 3학기 동안 신세를 진 사람입니다. 반갑습니다. 저 같은 경우는 이런 저런 이유로 임베딩 언어를 만들다가 이 쪽을 눈팅하게 되었는데요. 우리 학교에서는 이 사이트를 아는 사람이 많은 것 같진 않... 다고 하기엔 벌써 3명!
=ㅁ=; 조.. 조교님이 계셨네요;
제가 작성하다 잘못된 부분 있으면 지적 부탁드릴께요~ 그리고 수업시간에도요; ^^;
다른 학생은... 저도 전공은 다른 거라 컴과 학생은 잘 몰라서;
이번학기에 타과생은 딱 한명뿐이군요. 그런데 무려 저와 동기 (...). 1학년때 본적이 있을지도 모르겠어요.