๐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด - ์ดํ ๋ถ์, ๊ตฌ๋ฌธ ๋ถ์
๐ซ ์ธ์ด๋ฅผ ๊ตฌํํ๋ ์ธ ๊ฐ์ง ์ ๊ทผ
- Compilation
- ๊ณ ๊ธ ์ธ์ด โ ๊ธฐ๊ณ ์ฝ๋ ๋ฒ์ญ, by Compiler
- C, C++, Cobol
- Pure Interpretation
- ๊ณ ๊ธ ์ธ์ด โ ํด์ ํ ์คํ, by SW Interpreter ํด์๊ธฐ
- HTML์ ํฌํจ๋ JS
- Hybrid Implementation
- ๊ณ ๊ธ ์ธ์ด โ ์ค๊ฐ ์ฝ๋ โ ํด์ ํ ์คํ
- Java, Python, .Net
- Just In Time - JIS ์ปดํ์ผ๋ฌ๋ก ์ฑ๋ฅ ํฅ์
๋ชจ๋ ์ดํ ๋ถ์๊ธฐ, ๊ตฌ๋ฌธ ๋ถ์๊ธฐ ์ฌ์ฉ
Parser - ๊ตฌ๋ฌธ ๋ถ์๊ธฐ๋ ํ์์ ๊ธฐ์ ์ ๊ธฐ๋ฐ
BNF ์ฌ์ฉ โ ๋ฌธ๋งฅ ์์ ๋ฌธ๋ฒ
๋๋ถ๋ถ ์ปดํ์ผ๋ฌ, ์ดํ/๊ตฌ๋ฌธ ๋ถ์์ ๋ฐ๋ก ์คํ
์ดํ ๋ถ์ : Lexeme, Token ๋ถ๋ฆฌ - ์์ ๊ท๋ชจ์ ์ธ์ด ๊ตฌ์กฐ ์ฒ๋ฆฌ
๊ตฌ๋ฌธ ๋ถ์ : ์, ๋ฌธ์ฅ, ํ๋ก๊ทธ๋จ ๋จ์ - ํฐ ๊ท๋ชจ์ ์ธ์ด ๊ตฌ์กฐ ์ฒ๋ฆฌ
- ์ Why, ์ดํ/๊ตฌ๋ฌธ ๋ถ์ ๋ฐ๋ก?
- ๋จ์์ฑ
- ๋ถ๋ฆฌ โ ๋ณต์ก์ฑ ์ํ
- ์ดํ๊ฐ ๊ตฌ๋ฌธ๋ณด๋ค ๋จ์
- ํจ์จ์ฑ
- ์ดํ ๋ถ์ ์ค๋ ๊ฑธ๋ ค์, ๋ฐ๋ก ์ต์ ํ
- ์ด์์ฑ
- ์ดํ ๋ถ์๊ธฐ : ํ๋ซํผ ์ข ์, ํ์ผ Read ๊ณผ์ ์์ ์ ๋ ฅ ๋ฒํผ ์ฌ์ฉ
- ๊ตฌ๋ฌธ ๋ถ์๊ธฐ : ํ๋ซํผ ๋ ๋ฆฝ์ผ ์ ์์
- ๋จ์์ฑ
๐ซง Compilation ๊ณผ์
- C Source File (Temp.c)
- By C Preprocessor โ
- ์ ์ฒ๋ฆฌ๋ C Source File (Temp.l)
- By C Compiler โ
- Assembly Code File (Temp.S)
- By Assembler โ
- Object Code File (Temp.o)
- By Linker โ
- Executable Code File (Temp)
๐ซง Compile ๊ณผ์ (์ปดํ์ผ๋ฌ ๋ด๋ถ ๊ณผ์ ), Lex, Yacc
- Source Program
- Lexical Analyzer
- ์ฝ๋ ํด์, Token ๋ถํด
- Scanner, Tokenizer
- Source Code โ Tokens, By
Lex
- Syntax Analyzer
- Tokens โ Syntax Tree, By
Yacc
- Rule ํญ๋ชฉ(Like BNF)์ผ๋ก ๋ถํฐ Parser ์์ฑ
- Parser
- ๊ตฌ๋ฌธ ๋ถ์
- ๊ตฌ๋ฌธ ๊ตฌ์ฑ ์ฑ๋ถ์ ์๊ณ ๊ด๊ณ ๋ถ์ โ ๋ฌธ์ฅ ๊ตฌ์กฐ ๊ฒฐ์
- Tokens โ Syntax Tree, By
- Semantic Analyzer
- Intermediate Code Generator
- Code Optimizer
- Code Generator
- Syntax Tree โ Generated Code
๋ชจ๋ ๊ณผ์ ์ Symbol-Table Manager๊ฐ ์ปดํ์ผ๋ฌ๋ฅผ ๋์
Error ๋ฐ์ ์ Error Handler๊ฐ ์ฒ๋ฆฌ
Lexical Analyzer
์ ํ ์คํ ๋งํ๋ก ์์ฑํ ์ ์์ง๋ง, ์ด๋ ต๊ณ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ Lex ์ด์ฉ
์ค์ต
Linux (VM), Lex, Yacc, Lex File Format, Python Tokenize Module ~
๐ซ ์ดํ ๋ถ์
@ U ์ค๊ฐ๊ณ ์ฌ ์ถ์ : ์ฃผ์ด์ง ํ์ฑ ํ ์ด๋ธ์ ๊ฐ์ง๊ณ , โinout state ~โ ์ ์์ฑํ๊ณ , LLํ์๋ณด๋ค LRํ์๊ฐ ์ข์ ์ด์ ๋ฅผ ์ค๋ช ํ์์ค.
- ์ดํ ๋ถ์
- ์ฃผ์ด์ง ๋ฌธ์์ด(ํ๋ก๊ทธ๋จ)์์ ํน์ ์ ๋ฌธ์ ํจํด๊ณผ ์ผ์นํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ๋ ํ์
- ์ดํ ๋ถ์๊ธฐ๋ ํจํด ๋งค์นญ๊ธฐ๋ผ๊ณ ๋ถ๋ฆผ
- ์ดํ ๋ถ์์ ๊ตฌ๋ฌธ ๋ถ์์ ์ ํํจ
- ๊ธฐ์ ์ ์ผ๋ก ์ดํ ๋ถ์๊ธฐ๋ ๊ตฌ๋ฌธ ๋ถ์๊ธฐ์ ์ผ๋ถ
- ์ฃผ์ด์ง ๋ฌธ์์ด(ํ๋ก๊ทธ๋จ)์์ ํน์ ์ ๋ฌธ์ ํจํด๊ณผ ์ผ์นํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ๋ ํ์
์ดํ (Lexme) : ๋ฌธ์๋ค์ ๋ชจ์์ ๊ตฌ์ฑํ ๋
ผ๋ฆฌ์ ๊ทธ๋ฃน
ํ ํฐ (Token) : ์ดํ๋ค ๋ถ๋ฅ๋ฅผ ์ํ ๋ถ๋ฅ(Category)
ํ ํฐํ (Tokenize) : ์ดํ๋ฅผ ํ ํฐ์ผ๋ก ๋ถ๋ฅ
์ด๊ธฐ ์ดํ ๋ถ์๊ธฐ,
์์ค ํ๋ก๊ทธ๋จ Read โ ํ ํฐํ โ ๊ฒฐ๊ณผ (Lexeme, Token) ํ์ผ Create
์ค๋๋ ์ดํ ๋ถ์๊ธฐ,
๊ตฌ๋ฌธ ๋ถ์๊ธฐ์ ๋ถํ๋ก๊ทธ๋จ์ผ๋ก์จ,
๊ตฌ๋ฌธ ๋ถ์๊ธฐ๊ฐ ์ดํ ๋ถ์๊ธฐ ํธ์ถ โ ํ ํฐํ ๊ฒฐ๊ณผ ๋ฐ์
โ ํ ๋ฒ ํธ์ถ์ ํ๋์ ํ ํฐํ ๊ฒฐ๊ณผ ๋ฐ์
- ์ดํ ๋ถ์๊ธฐ ์ญํ
- ์ฃผ์ ์ ๊ฑฐ
- ์ฌ๋ณผ ํ ์ด๋ธ ๊ตฌ์ถ
- ์ดํ ์๋ฌ ํ์ง ๋ฐ ํต๋ณด
- i.e. ๋ถ๋ ์์์ ์๋ชป ์ฌ์ฉ ๋ฑ
- ์ดํ ๋ถ์๊ธฐ ๊ตฌ์ฑ ๋ฐฉ๋ฒ
- ์ ๊ท ํํ์์ ์ด์ฉํ์ฌ ์ธ์ด์ ํ ํฐ ํจํด์ ๋ํ ํ์์ ๊ธฐ์ ์ ์์ฑ
- Lex
- ์ธ์ด์ ํ ํฐ ํจํด์ ์ ์ํ๋ ์ํ ์ ์ด๋ (State transition diagram)์ ์ค๊ณํ๊ณ ์ด๋ฅผ ์ง์ ๊ตฌํ
- ์ธ์ด์ ํ ํฐ ํจํด์ ์ ์ํ๋ ์ํ ์ ์ด๋๋ฅผ ์ค๊ณํ๊ณ ์ด ์ํ๋์ ๋ํ ํ ์ด๋ธ-๊ตฌ๋ (Table-driven) ๊ตฌํ์ ์ง์ ๊ตฌ์ฑ
- ์ ๊ท ํํ์์ ์ด์ฉํ์ฌ ์ธ์ด์ ํ ํฐ ํจํด์ ๋ํ ํ์์ ๊ธฐ์ ์ ์์ฑ
- ์ํ ์ ์ด๋ (์ํ๋, state diagram)
- ์ ํฅ ๊ทธ๋ํ(directed graph)
- ๋ ธ๋๋ ์ํ ์ด๋ฆ์ ๊ทธ ๋ ์ด๋ธ๋ก ๊ฐ์ง๊ณ , ์ํฌ๋ ์ํ๋ค ๊ฐ์ ์ ์ด๋ฅผ ์ผ๊ธฐํ๋ ์ ๋ ฅ ๋ฌธ์๋ค์ ๋ ์ด๋ธ๋ก ๊ฐ์ง
- ์ ํ ์คํ ๋งํ(finite automata)๋ผ ๋ถ๋ฆฌ๋ ์ํ์ ๊ธฐ๊ณ์ ํ ์ ํ
- ์ ๊ท ์ธ์ด๋ฅผ ์ธ์ํ๊ฒ ์ค๊ณ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ ํฐ๋ค์ ์ ๊ท ์ธ์ด์ด๊ณ , ์ดํ ๋ถ์๊ธฐ๋ ์ ํ ์คํ ๋งํ
์ดํ ๋ถ์์ ํ์ํ ์ํ ์ ์ด๋๋ ๋งค์ฐ ๋ณต์กํจ
- ์ดํ๋ถ์๊ธฐ๋ ์ฌ๋ณผํ
์ด๋ธ์ ๊ตฌ์ถ
- ์ฌ๋ณผํ ์ด๋ธ: ์ด๋ฆ(Identifier)๋ค๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญํ
๐ซ Parse
Parsing
์ฃผ์ด์ง ๊ตฌ๋ฌธ์ ๋ถ์ ํ๋ ๊ณผ์ - Syntax Analysis
Parser
์ฃผ์ด์ง ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ฌธ ๋ถ์์ ๋ด๋น
์ฃผ์ด์ง ํ๋ก๊ทธ๋จ์ Parse Tree๋ฅผ ๊ตฌ์ฑ
Parse Tree
๋ฒ์ญ์ ์ํ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ
๐ซง ๊ตฌ๋ฌธ ๋ถ์์ ๋ชฉ์ (Parser ์ญํ )
- ์
๋ ฅ ํ๋ก๊ทธ๋จ์ ๊ฒ์ฌํ์ฌ ๊ตฌ๋ฌธ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ์ง๋ฅผ ํ๋จ
- ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์ง๋จ ๋ฉ์์ง๋ฅผ ์์ฑ ๋ฐ ๋ณต๊ตฌ
- ์ต๋ํ ๋ง์ Error ๋ฐ๊ฒฌ
- ๊ตฌ๋ฌธ์ ์ค๋ฅ๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ ๋ํด์๋ ์์ ํ ํ์ค ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถ
๐ซง Parser ๋ถ๋ฅ
Top-Down, Bottom-Up Parse
- Top-Down ํํฅ์
- Root Node๋ก๋ถํฐ Leaf Node๋ก Parse Tree ์์ฑ
- Leftmost Derivation ์ต์ข๋จ ์ ๋ ๊ฐ์ ์์
- ์ฌ๊ท-ํํฅํ์ฑ, LL ํ์
- ์ฌ๊ท-ํํฅ ํ์ฑ
- ์ฌ๊ท์ ์ธ Subprogram ๋ถํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌ์ฑ
- ํ์น์ ์์๋ก Parse Tree ๊ตฌ์ถ
- EBNF ๊ตฌ์ถ์ ์ ํฉ
- ๋ฌธ๋ฒ์ ๊ฐ NonTerminal์ ๋ํด ํ ๊ฐ์ ๋ถํ๋ก๊ทธ๋จ์ ๊ฐ๋๋ค
- ์ ๋ ฅ ๋ฌธ์์ด์ด ์ฃผ์ด์ง ๋, ๋ถํ๋ก๊ทธ๋จ์์ ํด๋น ๋ ผํฐ๋ฏธ๋์ ๋ฃจํธ ๋ ธ๋๋ก ๊ฐ์ง๋ฉฐ, LeafNode๋ค์ด ๊ทธ ์ ๋ ฅ ๋ฌธ์์ด๊ณผ ๋งค์นญ๋๋ ParseTree๋ฅผ ์ถ์
- ์ ์ญ ๋ณ์ nextToken : ๋ค์ ๋ฒ ํ ํฐ์ ์๋ฏธ
- ํ์ฑํ ๋ ํญ์ ๋ค์ ํ ํฐ์ ๋ฏธ๋ฆฌ ๋ณธ๋ค
- LL ํ์
- L ์ผ์ชฝ์์ ์์ํ๋ฉฐ, L ์ข์ธก ์ ๋ ๋ฐฉ์์ผ๋ก ํ์ฑ
- ์ฝ์
- Left Recursion ์ข์ํ
- ์ง์ ์ข์ํ : A โ A + B
- A๊ฐ ์๊ธฐ ์์ ํธ์ถ, Stack Overflow
- ๊ฐ์ ์ข์ํ : A โ BaA, B โ Ab
- ๊ฒฐ๊ตญ A๊ฐ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ๋ถ๋ถ ๋ฐ์
- ์ํฅ์ ํ์ฑ ์๊ณ ๋ฆฌ๋ฌ์ ์ด๋ฐ ์ผ ์์
- ์ง์ ์ข์ํ : A โ A + B
- Left Recursion ์ข์ํ
- ํํฅ์ ํ์๋ ์ต์ข์ธก ๋
ผํฐ๋ฏธ๋์ ์ํด ์์ฑ๋๋ ์ฒซ๋ฒ์งธ ํ ํฐ๋ง์ ์ฌ์ฉ, ํ์๊ฐ ์
๋ ฅ์ ๋ค์๋ฒ์งธ ํ ํฐ์ ๊ธฐ๋ฐํ์ฌ ํญ์ ์ฌ๋ฐ๋ฅธ RHS๋ฅผ ์ ํํ ์ ์๋๊ฐ๊ฐ ํํฅ์ ํ์์ ๊ตฌ์ถ์์ ์ค์
- Pairwise Disjoint Test ์งํฉ์ ๊ณตํต ํ ์คํธ๋ก ๊ฒ์ฆ ๊ฐ๋ฅ
- Pairwise Disjoint Test ์งํฉ์ ๊ณตํต ํ
์คํธ
- ์ฃผ์ด์ง ๋ฌธ๋ฒ์ผ๋ก Top-Down Parsing์ด ๊ฐ๋ฅํ์ง ํ๋จํ๋ ํ ์คํธ
- Top-down parsing์ ์ ์ฐจ๋ lookahead ๊ฐ์ ์ด์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ RHS๋ฅผ ๊ฒฐ์ ํ๋๋ฐ ์ด๋ ์งํฉ์ ๋ถ์ผ์น ํ ์คํธ๋ฅผ ๋ง์กฑํ์ง ๋ชปํ๋ฉด ์ฌ๋ฐ๋ฅธ RHS๋ฅผ ์ ํํ ์ ์๋ค.
- Bottom-Up ์ํฅ์
- Leaf Node๋ก๋ถํฐ Root Node๋ก Parse Tree ์์ฑ
- Rightmost Derivation ์ต์ฐ๋จ ์ ๋์ ์ญ์
- ์ด๋-๊ฐ์ถ ์๊ณ ๋ฆฌ๋ฌ, LR ํ์
- ์ํฅ์ ํ์์ ํ์ฑ ๋ฌธ์
- ์ id+id*id ์ ๋ํ ์ต์ฐ๋จ ์ ๋
- ์ํฅ์ ํ์ฑ์ ์ต์ฐ๋จ ์ ๋์ ์ญ์์ผ๋ก ์ํ
- ์ด์ ๋จ๊ณ ๋ฌธ์ฅ์ ์ป๊ธฐ ์ํด ์์ํ๋ LHS๋ก ์ฌ์์ฑ๋๋ RHS
- ์ํฅ์ ํ์์ ์ญํ
- ์ด์ ๋ฌธ์ฅ ํํ๋ฅผ ๋ง๋ค๊ธฐ์ํ ํน์ ๊ท์น(handle)์ ๋ฐ๊ฒฌํ๋ ๊ฒ
- ์ด๋-๊ฐ์ถ(Shift-Reduce) ์๊ณ ๋ฆฌ์ฆ
- ๋ชจ๋ ์ํฅ์ ํ์๋ฅผ ๊ตฌ์ถํ๋๋ฐ ํ์ฉ๋๋ฉฐ ์คํ์ ์ด์ฉํ์ฌ ๊ตฌ์ถ
- ์ํฅ์ ํ์์ ์ ๋ ฅ์ ํ ํฐ ์คํธ๋ฆผ์ด๋ฉฐ ์ถ๋ ฅ์ ๋ฐ๊ฒฌ๋ ๋ฌธ๋ฒ ๊ท์น
- ๋์
- ์ด๋(Shift) - ๋ค์๋ฒ์งธย ์ ๋ ฅ ํ ํฐ์ ์คํ์ผ๋ก ์ด๋
- ๊ฐ์ถ(Reduce) - ์คํ์ ๊ผญ๋๊ธฐ์ ์์นํ RHS๋ฅผย ์์ํ๋ย LHS๋ก ๋ณ๊ฒฝ
@ ~ ํธ์๋ค์ด (์๋์์ ํ์ธ)
- LR ํ์
- ์ข์ธก(L)์์ ์์ํ์ฌ ์ฐ์ธก(R)์ ๋ ๋ฐฉ์์ผ๋ก ํ์ฑ
- ์ฅ์
- ์๋์ ์ผ๋ก ์์ ํ์์ฝ๋์ ํ์ฑ ํ ์ด๋ธ๋ก ๊ตฌ์ฑ
- ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ํ์๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ์์๋ก ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก ์กฐ๊ธฐ์ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๋ค.
- LL ํ์๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ฉด, LR ํ์๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- @ LL ๋จ์ (Left Recursion, Stack Overflow) ์์
- @ LL ์์ ํธํ์ธ๋ฐ ์ฝ๋๋ ์์
- ๋จ์
- ํ์ฑ ํ
์ด๋ธ์ ์์์
์ผ๋ก ๊ตฌ์ถํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- Yacc, ๋ฌธ๋ฒ์ ์ ๋ ฅ๋ฐ์์ ํ์ฑํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑ
- @ LL ์์ ํธํ์ธ๋ฐ ๋จ์ ๋ ๊ทน๋ณต ๊ฐ๋ฅ
- ํ์ฑ ํ
์ด๋ธ์ ์์์
์ผ๋ก ๊ตฌ์ถํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- LR ํ์ฑ ํ
์ด๋ธ
- Action๊ณผ Goto๋ก ๊ตฌ์ฑ
- Action
- ํ์์ ํ๋์ ๊ธฐ์ ํ๊ณ ์์
- ํ์ ์ํ๊ธฐํธ๋ฅผ ์ด์ ํฐ๋ฏธ๋ ๊ธฐํธ๋ฅผ ๊ฐ์ง
- ํ์์ ๊ผญ๋๊ธฐ์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ค์๋ฒ ์
๋ ฅ ํฐ๋ฏธ๋์ ๋ณด๊ณ ์ ๋ฌด์์ ํด์ผ ํ๋์ง๋ฅผ ํ๋จ
- ์ด๋(Shift): ๋ค์๋ฒ์งธ ์ ๋ ฅ์ ์คํ์ผ๋ก ์ด๋
- ๊ฐ์ถ(Reduce): ์คํ ๊ผญ๋๊ธฐ์ ์ํ๋ฅผ LHS๋ก ๊ฐ์ถ
- Accept: ํ์ฑ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ
- ์ค๋ฅ: ์ค๋ฅ ์ฒ๋ฆฌ๋ฃจํด์ ํธ์ถ
- Goto
- ํ์ ์ํ๊ธฐํธ๋ฅผ ์ด์ ๋ ผํฐ๋ฏธ๋ ๊ธฐํธ๋ฅผ ๊ฐ์ง
- ๊ฐ์ถ์ด ๋๊ณ ๋ ํ (ํธ๋ค์ด ์คํ์์ ์ ๊ฑฐ๋๊ณ ์๋ก์ด ๋ ผํฐ๋ฏธ๋์ด ์คํ์ ์ ์ฅ ๋จ์ ์๋ฏธ) ์ด๋ค ์ํ ๊ธฐํธ๊ฐ ์ ์ฅ๋์ด์ผ ํ๋์ง๋ฅผ ๋ํ๋
- ํธ์๋ค์ด(Pushdown) ์คํ ๋งํ (Context-Free ๋ฌธ๋ฒ์ ๋ํ ์ธ์๊ธฐ)
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ๋ชจ๋ ํ์๋ ํธ์๋ค์ด ์คํ ๋งํ
- ์ฌ๊ท-ํ๊ฐ, ์ด๋-๊ฐ์ถ ํ์๋ ํธ์๋ค์ด ์คํ ๋งํ์ ํด๋น
๐ซง Parse Algorithm ๋ณต์ก๋
์์์ ๋ชจํธํ์ง ์๋ ๋ฌธ๋ฒ์ ๋ํ ํ์ฑ์ O(n^3)
๋ค์ํ ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ ์์
์ ํ์์ ๋ณต์ก๋ O(n)์ผ๋ก ์ค์
Program๊ณผ Process
Program : Code(Text), Data
Process : Code(Text), Data + Stack, Heap
๋ฉ๋ชจ๋ฆฌ์ ํ๋ก๊ทธ๋จ ๊ทธ๋๋ก ์ฌ๋ผ๊ฐ๊ณ ,
๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ผ๋ก Stack๊ณผ Heap ํ ๋น
Code(Text) : ์ปดํ์ผ๋ ์ฝ๋
Data : External, Static, ์ ์ญ๋ณ์
Stack : ๋งค๊ฐ๋ณ์, ํจ์ ํธ์ถ ์์น (๋์๊ฐ ๊ณณ), ์ง์ญ๋ณ์
Heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น, new ๋ฑ
4๊ธฐ๊ฐ ๊ฐ์๊ณต๊ฐ (32bit Linux ๊ธฐ์ค)
1๊ธฐ๊ฐ OS/์ปค๋ ์์ญ + 3๊ธฐ๊ฐ ์ ์ ์์ญ(ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๋ ๊ณณ)
๋ชจ๋ ํ๋ก์ธ์ค๋ ์๊ธฐ๊ฐ 3๊ธฐ๊ฐ ์ ์ ์์ญ์ ํผ์ ์กด์ฌํ๋ ์ค ์
๋ฉํฐ ํ๋ก์ธ์ค๋ OS/์ปค๋ ์์ญ์์ ์ ์ ์์ญ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ค์์นญ ํ๋ ๊ฒ
Data
Symbol Table์์ ๊ตฌ๋ถํ ์ ์ญ๋ณ์, Static ๋ณ์๊ฐ ๋ค์ด๊ฐ
๋ณ์ ์ ์ธ โ Symbol Table์์ ๊ตฌ๋ถ โ Data ์์ญ์ ์ ์ฅ
์ด ๋ ๋ณ์ ์ด๋ฆ I.E. x ๋ ์ฌ๋ผ์ง๊ณ , ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋์ ํจ
Stack
โ ์คํ(์์คํ
) ์-์๋, ์คํ(์๋ฃ๊ตฌ์กฐ) ์๋-์
โ Main ํจ์๋ถํฐ ์๊ธฐ ์์
Stack์ ๋ฐ์ดํฐ ์๋ค๊ฐ
BRK ๋์ด๊ฐ๋ฉด
Segmentation Fault Error
๐ซง ์ปดํ์ผ๊ณผ ์คํ ๋จ๊ณ
@ ์ธ์ด ๋์์ธ ๋จ๊ณ
@ ์ปดํ์ผ๋ฌ ๊ตฌํ ๋จ๊ณ
- Editor or IDE (Edit Time) : 1. Write Source Codes
- Source codes (.c), Headers (.h)
- Preprocessor (Build) : 2. Preprocess
- Included files, replaced symbols
- Compiler (Compile Time)(Build) : 3. Compile
- Object codes (.obj, .o)
- Linker (Link Time)(Build) : 4. Link Edit
- By Static Libraries (.lib, .a) โ Excutable Code (.exe)
- Loader (Load Time)(Run) : 5. Load
- By Shared Libraries (.dll, .so)
- CPU (Run Time)(Run) : Execute
- By Input โ Output
Linker ์ : Static ์ ์ , ํ๋ก๊ทธ๋จ
Linker ํ : !์ ์ , ํ๋ก์ธ์
Preprocess
gcc -E -P main.c
Compile
gcc -S main.c
gcc -c main.c
Link
gcc main.o -o main