Noah VMμ κ°μλ¨Έμ μ λ΄λΆ ꡬ쑰μ λμ λ°©μμ κΉμ΄ μ΄ν΄νκΈ° μν΄ μ€κ³νκ³ κ΅¬νν νλ‘μ νΈ. C μΈμ΄λ‘ μ»΄νμΌλ¬, λ μ§μ€ν° κΈ°λ° κ°μλ¨Έμ , λ μ, νμ, IR μμ±κΈ° λ±μ μ§μ κ°λ°νλ€. ν μ΄ μΈμ΄μ μ»΄νμΌ λ° μ€ν νκ²½μ ꡬμΆνλ©°, μΈμ΄μ λ°νμμ΄ μ μμ€μμ μ΄λ»κ² λμνλμ§ μ²μλΆν° λκΉμ§ μ§μ μ€κ³νκ³ λΆμνλ€.
-
μμ€ μ½λ μ λ ₯
main.cβ νμΌμμ μ½λ λ‘λ -
Lexing
lexer.cβ ν ν°ν μν -
Parsing & Compile
compiler.cβ ν ν°μ IR(μ€κ° νν)μΌλ‘ λ³ν -
μ μ λΆμ
analyzer.cβ Dead Store Elimination(DSE) μ€ν -
νλ‘κ·Έλ¨ λ‘λ©
vm.cβ IRμ VM λ©λͺ¨λ¦¬μ λ‘λ© -
μ€ν
vm.cβ κ°μλ¨Έμ μ€ν/λ μ§μ€ν° κΈ°λ°μΌλ‘ IR μ€ν -
νμ²λ¦¬
vm_stack_dump()β μ€ν μΆλ ₯vm_destruct()β 리μμ€ ν΄μ
-
λλΈ ν리
- κ°μλ¨Έμ μ’ λ£ μ λλΈ ν리 λ°μ
- LLDBλ‘ λ³μ κ°μ λΌμΈ λ¨μλ‘ μΆμ ν κ²°κ³Ό, ν΄μ ν μ΄λΈμμ μ€κ° λ Έλλ₯Ό ν΄μ ν λ μ΄ν λ Έλμ μ κ·Όνμ§ λͺ»ν΄ μΌλΆ λ Έλκ° ν΄μ λμ§ μκ±°λ μ€λ³΅ ν΄μ λλ λ¬Έμ λ°κ²¬
- μ‘°μΉ: ν΄μ ν μ΄λΈ μν λ° ν΄μ λ‘μ§ μμ , λ Έλ μ°κ²° ꡬ쑰λ₯Ό μ¬κ²ν νμ¬ λ©λͺ¨λ¦¬ ν΄μ μμ 보μ
Engineering a Compiler (3rd ed.) by Keith D. Cooper & Linda Torczon
make main
./main ./examples/scope
# λλ ./examples/ μμ λ€λ₯Έ μμ μ¬μ© κ°λ₯νλ‘κ·Έλλ° μΈμ΄κ° μ΄λ»κ² λμνλμ§ ν° κ·Έλ¦Όμ μ΄ν΄νλ κ² μ λ§ μ¬λ―Έμμλ€. μ§μ μ»΄νμΌλ¬λ κ°μλ¨Έμ μ μ€κ³νκ³ λ§λ€μ΄λ³΄λ©΄μ μΈμ΄ λ΄λΆ ꡬ쑰λ λ©λͺ¨λ¦¬ λμ λ°©μμ μ λλ‘ μ²΄κ°ν μ μμλ€. μ΄ κ³Όμ μ κ±°μΉλ©΄μ νμ€μΌ κ°μ ν¨μν μΈμ΄λ λ¬μ€νΈμ μ€λμ λͺ¨λΈμ΄ μ€μ λ‘λ μ΄λ»κ² ꡬνλμμ§ λ κΆκΈν΄μ‘λ€.
μμΌλ‘λ λ΄ μ»΄ν¨ν° ISAμΈ x86μ κΈ°λ°μΌλ‘ μ μμ€ μ»΄νμΌλ¬λ₯Ό μ§μ λ§λ€μ΄λ³΄κ³ μΆλ€. λ μ§μ€ν° ν λΉ, SSA κ°μ μ΅μ ν κΈ°λ²λ μ§μ ꡬνν΄λ³΄κ³ , κΆκ·Ήμ μΌλ‘λ λ³λ ¬ μ»΄νμΌλ¬μ λν΄μλ μμλ³΄κ³ μΆλ€.

