- Published on
λΈλΌμ°μ λ μ΄λ»κ² λμνλκ°? - λͺ¨λ μΉλΈλΌμ°μ κ° λμνλ λ°©λ²
- Author
- Name
- yceffort
π§μμ±μ€ π§
μλ¬Έ-How Browsers Work: Behind the scenes of modern web browsers
μ΄ κΈμ μμ½/λ²μν λ μ’μ κΈμ΄ λ€μ΄λ² d2μ μμ΅λλ€. κ°μΈμ μΈ κ³΅λΆ μ°¨μμμ μ΄ μλ¬Έμ fully νκΈλ‘ λ²μνκ³ μμ΅λλ€.
μκ°
μΉ λΈλΌμ°μ λ κ°μ₯ λ리 μ°μ΄λ μννΈμ¨μ΄λ€. μ΄ κΈμμλ, λΈλΌμ°μ κ° μ΄λ»κ² λμνλμ§ μκ°ν κ²μ΄λ€. μ΄ κΈμ μ½κ³ λλ©΄, google.com
μ νμ΄ν ν μμ λΆν° ꡬκΈνμ΄μ§κ° λΈλΌμ°μ μ 보μ΄κΈ° κΉμ§, μ΄λ€ μΌλ ¨μ κ³Όμ μ΄ μλμ§ μκ² λ κ²μ΄λ€.
λͺ©μ°¨
- μκ°
- μ΄ κΈμμ μκ°νλ λΈλΌμ°μ
- λΈλΌμ°μ μ μ£Όμ κΈ°λ₯
- λΈλΌμ°μ μ μμ λ 벨 ꡬ쑰
- λ λλ§ μμ§
- λ λλ§ μμ§λ€
- μ£Όμ νλ¦
- μ£Όμ νλ¦ μμ
- νμ±κ³Ό DOM νΈλ¦¬ ꡬμΆ
- νμ±: μΌλ°
- λ¬Έλ²λ€
- Parser-Lexer μ‘°ν©
- λ³ν
- νμ± μμ
- μ΄νμ ꡬ문μ λν 곡μμ μΈ μ μ
- νμμ μ’ λ₯
- μλμΌλ‘ νμ μμ±
- HTML νμ
- HTML λ¬Έλ² μ μ
- λ¬Έλ§₯μΌλ‘ λΆν° μμ λ‘μ§ λͺ»ν¨
- HTML DTD
- DOM
- νμ± μκ³ λ¦¬μ¦
- ν ν°ν μκ³ λ¦¬μ¦
- νΈλ¦¬κ΅¬μ‘° μκ³ λ¦¬μ¦
- νμ±μ΄ λλ¬μ κ²½μ° μ‘μ
- λΈλΌμ°μ μλ¬ μ²λ¦¬
- CSS νμ±
- μΉν· css νμ
- μ€ν¬λ¦½νΈμ μ€νμΌμνΈλ₯Ό νλ‘μΈμ±νλ μμ
- μ€ν¬λ¦½νΈ
- μμΈ‘ νμ±
- μ€νμΌ μνΈ
- νμ±: μΌλ°
- λ λ νΈλ¦¬ ꡬμΆ
- λ νΈλ¦¬μ λ λ νΈλ¦¬μμ κ΄κ³
- νΈλ¦¬λ₯Ό ꡬμΆνλ μμ
- μ€νμΌ μ°μ°
- μ€νμΌ λ°μ΄ν° 곡μ
- νμ΄μ΄νμ€ κ·μΉ νΈλ¦¬
- κ΅¬μ‘°μ²΄λ‘ λΆλ¦¬
- κ·μΉ νΈλ¦¬λ₯Ό νμ©νμ¬ μ€νμΌ μ»¨νμ€νΈ μ°μ°
- μ¬μ΄ λ§€μΉμ μν κ·μΉ λ€λ£¨κΈ°
- λ€λ¨κ³ μμμ λ°λΌ κ·μΉ μ μ©νκΈ°
- μ€νμΌ μνΈ λ€λ¨κ³ μμ
- νΉμ μ±
- κ·μΉμ λ ¬
- μ μ§μ νλ‘μΈμ€
- λ μ΄μμ
- Dirty bit system
- κΈλ‘λ² λ° incremental λ μ΄μμ
- λκΈ° λ° λΉλκΈ° λ μ΄μμ
- μ΅μ ν
- λ μ΄μμ νλ‘μΈμ€
- λλΉ κ³μ°
- λΌμΈ λΈλ μ΄νΉ
- νμΈν
- κΈλ‘λ² λ° incremental
- νμΈν μμ
- νμ΄μ΄νμ€ λμ€νλ μ΄ λ¦¬μ€νΈ
- μΉν· μ¬κ°ν μ μ₯μ
- λ€μ΄λλ―Ή λ³ν
- λ λλ§ μμ§μ μ€λ λ
- μ΄λ²€νΈ 루ν
- CSS2 λΉμ₯¬μΌ λͺ¨λΈ
- μΊλ²μ€
- CSS box model
- ν¬μ§μ λ μ€ν΄
- λ°μ€ νμ
- ν¬μ§μ
λ
- relative
- floats
- absolute & fixed
- μΈ΅νν
- 리μμ€
1. μκ°
1-1. μ΄ κΈμμ μκ°νλ λΈλΌμ°μ
μ€λλ μλ 5κ°μ λ©μΈ λΈλΌμ°μ κ° μ‘΄μ¬νλ€: ν¬λ‘¬, μ΅μ€νλ‘λ¬, νμ΄μ΄νμ€, μ¬ν리 κ·Έλ¦¬κ³ μ€νλΌ. λͺ¨λ°μΌμμ, μλλ‘μ΄λ λΈλΌμ°μ , μμ΄ν°, μ€νλΌ λ―Έλ, μ€νλΌ λͺ¨λ°μΌ, UC λΈλΌμ°μ λ±λ±μ΄ μ‘΄μ¬νλλ°, μΉν·μ λ² μ΄μ€λ‘ νλ μ€νλΌλ₯Ό μ μΈνκ³ λ λλΆλΆμ΄ ν¬λ‘¬μ κΈ°λ°μΌλ‘ νκ³ μλ€. μ¬κΈ°μμλ μ€νμμ€ λΈλΌμ°μ μΈ νμ΄μ΄νμ€, ν¬λ‘¬, μ¬ν리 (λΆλΆμ μΌλ‘ μ€νμμ€)λ₯Ό μλ‘ λ€ κ²μ΄λ€. stat counterμ λ°λ₯΄λ©΄ 2013λ 6μ κΈ°μ€ μ΄ μΈ λΈλΌμ°μ κ° μ°¨μ§νλ κΈλ‘λ² λ°μ€ν¬ν± λΈλΌμ°μ λΉμ€μ΄ 71%μ μ‘λ°νλ€. λͺ¨λ°μΌμμλ, μλλ‘μ΄λ λΈλΌμ°μ , μμ΄ν°κ³Ό ν¬λ‘¬ λ² μ΄μ€ νλΌμ°μ κ° 54%μ λλ₯Ό μ°¨μ§νλ€.
2019λ 7μ νμ¬ μΈ λΈλΌμ°μ μ μμ₯ μ μ μ¨μ 83% μ λλ₯Ό μ°¨μ§νλ€.
1-2. λΈλΌμ°μ μ μ£Όμ κΈ°λ₯
λΈλΌμ°μ μ μ£Όμ κΈ°λ₯μ μ¬μ©μκ° μ νν μΉλ¦¬μμ€λ₯Ό μλ²μ μμ²νκ³ , λΈλΌμ°μ μλμ°μ λμ€νλ μ΄νμ¬ νννλ κ²μ΄λ€.μΌλ°μ μΌλ‘ 리μμ€λ HTML λ¬Έμμ§λ§, μ¬κΈ°μλ PDF, μ΄λ―Έμ§, νΉμ κΈ°ν λ€λ₯Έ μ νμ΄ μμ μλ μλ€. μ΄λ° 리μμ€μ μμΉλ μ¬μ©μκ° μ¬μ©νλ URI(Uniform Resource Identifier)μ μν΄μ μ ν΄μ§λ€.
λΈλΌμ°μ κ° HTML νμΌμ ν΄μνκ³ νμνλ λ°©λ²μ HTMLκ³Ό CSS λͺ μΈμ λ°λΌμ μ ν΄μ§λ€. μ΄λ¬ν λͺ μΈλ μΉ νμ€ν κΈ°κ΅¬μΈ W3C(World Wide Web Consortium) μμ μ ν΄μ§λ€. μλ κ° μΌλΆ λΈλΌμ°μ λ μ¬μμ μΌλΆλ§μ μ€μνκ³ μ체 μ΅μ€ν μ μ κ°λ°νλ€. μ΄λ‘μΈν΄ μΉ κ°λ°μλ€ μ¬μ΄μμ μ¬κ°ν νΈνμ± λ¬Έμ κ° λ°μνλ€. μ€λλ λλΆλΆμ λΈλΌμ°μ λ μ΄λ¬ν λͺ μΈλ₯Ό κ±°μ μ§ν¨λ€.
μ€μμ μ΄κΈ΄ λΈλΌμ°μ λ... ^^
λΈλΌμ°μ μ UIλ μλ‘ λλΆλΆμ 곡ν΅μ μ κ°μ§κ³ μλ€. μ΄λ¬ν 곡ν΅μ λ€μ μλ‘ λ€μλ©΄
- URIλ₯Ό λ£μ μ μλ μ£Όμμ°½
- λ€λ‘κ°κΈ°/μμΌλ‘κ°κΈ° λ²νΌ
- λΆλ§ν¬ μ΅μ
- νμ¬ λ¬Έμλ₯Ό μλ‘ κ³ μΉκ±°λ λ©μΆ μ μλ μλ‘κ³ μΉ¨/λ©μΆ€ λ²νΌ
- μ¬μ©μμ ννμ΄μ§λ‘ κ°λ νλ²νΌ
μ΄μνκ²λ μ΄λ¬ν 곡ν΅μ λ€μ, 곡μμ μΈ λͺ μΈλ‘ μ§μ λ κ²μ΄ μλμλ λΆκ΅¬νκ³ μλ λμ νμ±λ μ’μ κ΄νκ³Ό μλ‘λ₯Ό λͺ¨λ°©νλ λΈλΌμ°μ μ νΉμ§μμ λΉλ‘―λ κ²μ΄λ€. HTML5 λͺ μΈλ λΈλΌμ°μ κ° κ°μ ΈμΌνλ UI μμλ₯Ό μ μνκ³ μμ§λ μμ§λ§, μΌλΆ 곡ν΅λ μμλ€μ λμ΄νλ€. κ·Έ μ€μλ μ£Όμ νμμ€, μν νμμ€, λꡬ νμμ€ λ±μ΄ μλ€. λ¬Όλ‘ νμ΄μ΄νμ€λ ν¬λ‘¬μ λ€μ΄λ‘λ κ΄λ¦¬μμ κ°μ νΉμ λΈλΌμ°μ μλ§ μλ κΈ°λ₯λ μλ€.
1-3 λΈλΌμ°μ μ μμλ 벨 ꡬ쑰
- μ μ μΈν°νμ΄μ€: μ£Όμμ°½, μ/λ€ λ²νΌ, λΆλ§ν¬ λ©λ΄ λ±, μμ²ν νμ΄μ§λ₯Ό 보μ¬μ£Όλ μ°½μ μ μΈν λλ¨Έμ§ λͺ¨λ λΆλΆμ μΉνλ€.
- λΈλΌμ°μ μμ§: μ μ μΈν°νμ΄μ€μ λ λλ§ μμ§ μ¬μ΄μ λμμ μ μ΄
- λ λλ§ μμ§: μμ²ν μ½ν μΈ λ₯Ό νμνλ€. μλ₯Ό λ€μ΄ HTMLμ μμ²νλ©΄ HTMLκ³Ό CSSλ₯Ό νμ±νμ¬ νλ©΄μ νμνλ€.
- λ€νΈμνΉ: HTTP μμ²κ³Ό κ°μ λ€νΈμν¬ ν΅μ μ μ¬μ©λλ€. μ¬κΈ°λ νλ«νΌ λ 립μ μΈ μΈν°νμ΄μ€μ΄κ³ κ° νλ«νΌ νλΆμμ μ€νλλ€.
- UI λ°±μλ: 콀보 λ°μΈ , μ°½κ³Ό κ°μ κΈ°λ³Έμ μΈ μ₯μΉλ₯Ό κ·Έλ¦°λ€. νλ«νΌμμ λͺ μνμ§ μμ μΌλ°μ μΈ μΈν°νμ΄μ€λ‘, OS μ¬μ©μ μΈν°νμ΄μ€ 체κ³λ₯Ό μ¬μ©νλ€.
- μλ°μ€ν¬λ¦½νΈ μΈν°ν리ν°: μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό νμ±νκ³ μ€νμ μν΄ μ¬μ©νλ€.
- λ°μ΄ν° μ€ν 리μ§: μλ£λ₯Ό μ μ₯νλ κ³μΈ΅μ΄λ€. μΏ ν€λ₯Ό μ μ₯νλ κ²κ³Ό κ°μ΄, λͺ¨λ μ’ λ₯μ μμμ νλλμ€ν¬μ μ μ₯ν λ μ¬μ©νλ€. HTML5 λͺ μΈμλ λΈλΌμ°μ κ° μ§μν΄μΌνλ μΉ λ°μ΄ν° λ² μ΄μ€κ° μ μ λμ΄ μλ€.
ν¬λ‘¬κ³Ό κ°μ κ²½μ°μλ κ° νλ§λ€ λ³λμ λ λλ§ μμ§μ μ¬μ©νλ€. κ° νμ λ€λ₯Έ νλ‘μΈμ€μμ μ€νλλ€.
2. λλλ§ μμ§
λ λλ§ μμ§μ μν μ... λ§κ·Έλλ‘ λ λλ§μ΄λ€. λ λλ§μ μ¬κΈ°μ μμ²λ°μ μ½ν μΈ λ₯Ό λΈλΌμ°μ νλ©΄μ 보μ¬μ£Όλ μν μ΄λ€.
κΈ°λ³Έμ μΌλ‘ λ λλ§μμ§μ HTML, XML, κ·Έλ¦¬κ³ μ΄λ―Έμ§λ₯Ό νμν μ μλ€. νλ¬κ·ΈμΈμ΄λ μ΅μ€ν μ μ νμ©νλ€λ©΄, λ€μν λ°μ΄ν° νμ , μλ₯Ό λ€μ΄ PDF λ± λ νμν μ μλ€. κ·Έλ¬λ, μ΄λ² μ±ν°μμλ μΌλ°μ μΈ νμ© μμ μΈ CSSλ‘ ν¬λ§·λ HTMLκ³Ό μ΄λ―Έμ§λ₯Ό νμνλ λ²μ λν΄μ λ€λ£° κ²μ΄λ€.
2-1. λ λλ§ μμ§λ€
λΈλΌμ°μ λ§λ€ μλ‘λ€λ₯Έ λ λλ§ μμ§μ μ¬μ©νκ³ μλ€. μ΅μ€νλ‘€λ¬λ Tridentλ₯Ό, νμ΄μ΄νμ€λ Geckoλ₯Ό μ¬μ©νλ©° μ¬ν리λ Webkitμ μ¬μ©νλ€. κ·Έλ¦¬κ³ ν¬λ‘¬κ³Ό 15λ²μ λΆν° μ€νλΌλ Webkitμμ ν¬ν¬λ Blinkλ₯Ό μ¬μ©νλ€.
Webkitμ μ€νμμ€ λ λλ§ μμ§μΌλ‘, 리λ μ€ νλ«νΌμμ μ¬μ©λ μμ§μΌλ‘ λ§λ€μ΄μ‘λ€κ° μ νμ μν΄μ λ§₯κ³Ό μλμ°λ μ§μνκ² λμλ€. μμΈν κ²μ webkit.orgλ₯Ό μ°Έμ‘°νλ©΄ λλ€.
2-2. μ£Όμ νλ¦
λ λλ§ μμ§μ ν΅μ μ ν΅ν΄ μμ²ν λ¬Έμμ λ΄μ©μ μ»λ κ²λΆν° μμνλ€. λ³΄ν΅ λ¬Έμλ΄μ©μ 8kb λ¨μλ‘ μ μ‘λλ€. λ λλ§ μμ§μ κΈ°λ³Έμ μΈ λμκ³Όμ μ μλμ κ°λ€.
- DOM νΈλ¦¬ ꡬμΆμ μν HTML νμ±
- λ λ νΈλ¦¬ ꡬμΆ
- λ λ νΈλ¦¬ λ°°μΉ
- λ λ νΈλ¦¬ 그리기
λ λλ§ μμ§μ HTML λ¬Έμλ₯Ό νμ±νκΈ° μμνλ©°, μ½ν μΈ νΈλ¦¬ λ΄λΆμμ νκ·Έλ₯Ό DOM λ Έλλ‘ λ³ννλ€.κ·Έλ¦¬κ³ μμ§μ CSSνμΌκ³Ό μ€νμΌ μμλ₯Ό νμ±νκΈ° μμνλ€. μ€νμΌ μ 보μ HTML νμ κ·μΉμ 'λ λνΈλ¦¬' λΌκ³ λΆλ₯΄λ λλ€λ₯Έ νΈλ¦¬λ₯Ό μμ±νλ€.
λ λ νΈλ¦¬λ μμ λλ λ©΄μ κ³Ό κ°μ μκ°μ μμ±μ΄ μλ μ¬κ°νμ ν¬ν¨νκ³ μλλ°, μ ν΄μ§ μμλλ‘ νλ©΄μ νμλλ€.
λ λ νΈλ¦¬ κ΅¬μΆ μ΄νμλ, λ μ΄μμ νλ‘μΈμ€λ‘ λμ΄κ°λ€. μ΄ λ§μ, κ° λ Έλκ° νλ©΄μ μ νν μμΉμ νμλλ κ²μ μλ―Ένλ€. λ€μμ UI λ°±μλμμ λ λ νΈλ¦¬μ κ° λ Έλλ₯Ό κ°λ‘μ§λ₯΄λ©° λͺ¨μμ λ§λ€μ΄ λ΄λ 그리기 κ³Όμ μ΄λ€.
2-3. μ£Όμ νλ¦ μμ
μΉν·μ μ£Όμ νλ¦
λͺ¨μ§λΌ κ²μ½μ λ λλ§ μμ§ μ£Όμ νλ¦
κ·Έλ¦Όμμ 보λ€μνΌ, μΉν·κ³Ό κ²μ½κ° μ½κ° λ€λ₯Έ μ©μ΄λ₯Ό μ°κ³ μμ§λ§ κΈ°λ³Έμ μΈ νλ¦μ λμΌνλ€.
κ²μ½λ μκ°μ μΌλ‘ μ²λ¦¬λλ λ λ νΈλ¦¬λ₯Ό νλ μνΈλ¦¬ λΌκ³ λΆλ₯΄κ³ , κ° μμλ₯Ό νλ μμ΄λΌκ³ λΆλ₯΄λ λ°λ©΄, μΉν·μ λ λ κ°μ²΄λ‘ ꡬμ±λμ΄ μλ λ λ νΈλ¦¬λΌλ μ©μ΄λ₯Ό μ¬μ©νλ€. μΉν·μ μμλ₯Ό λ°°μΉνλλ° λ μ΄μμμ΄λΌλ μ©μ΄λ₯Ό μ¬μ©νμ§λ§, κ°μ½λ 리νλ‘μ°λΌλ μ©μ΄λ₯Ό μ¬μ©νλ€. attachmentλ μΉν·μ΄ λ λ νΈλ¦¬λ₯Ό μμ±νκΈ° μν΄ DOMλ Έλμ μκ°μ 보λ₯Ό μ°κ²°νλ κ³Όμ μ μλ―Ένλ€. λ°λ©΄μ κ²μ½λ HTMLκ³Ό DOMνΈλ¦¬ μ¬μ΄μ μ½ν μΈ μ±ν¬λΌκ³ λΆλ₯΄λ κ³Όμ μ λλλ°, μ΄λ DOM μμλ₯Ό μμ±νλ κ³Όμ μΌλ‘ μΉν·κ³Ό λΉμ·νμ¬ ν° μλ―Έ μλ μ°¨μ΄μ μΌλ‘ 보μ§λ μλλ€.
3. νμ±κ³Ό DOM νΈλ¦¬ ꡬμΆ
3-1. νμ± μΌλ°
νμ±μ λ λλ§ μμ§μμ μμ£Ό μ€μν μμ μ΄λΌμ, νμ±μ λν΄μ μμ£Ό κΉκ² λ€λ£° μμ©‘μ΄λ€. νμ±μ λν μ§§μ μκ°μ ν¨κ» μμνλ€.
λ¬Έμλ₯Ό νμ±νλ€λ κ²μ λ¬Έμ ꡬ쑰λ₯Ό μ½μ μ μλ μ½λλ‘ λ³ννλ€λ κ²μ μλ―Ένλ€. νμ±μ κ²°κ³Όλ λ³΄ν΅ λ Έλμ νΈλ¦¬λ‘ λνλλλ°, μ΄ λ Έλμ νΈλ¦¬λ λ¬Έμμ ꡬ쑰λ₯Ό λνλΈλ€. μ΄κ²μ νμ€νΈλ¦¬ λλ μ νμ€ νΈλ¦¬ λΌκ³ νλ€.
μλ₯Ό λ€μ΄, 2+3-1
μ μλμ κ°μ νΈλ¦¬κ΅¬μ‘°λ‘ λνλΌ μ μλ€.
3-1-1. λ¬Έλ²λ€
νμ±μ λ¬Έμμ μμ±λ μΈμ΄ λλ νμμ κ·μΉμ λ°λ₯Έλ€. νμ±ν μ μλ λͺ¨λ νμμ μ ν΄μ§ μ©μ΄μ ꡬ문 κ·μΉμ λ°λΌμΌ νλ€. μ΄κ²μ λ¬Έλ§₯ μμ λ¬Έλ²μ΄λΌκ³ νλ€. μΈκ°μ μΈμ΄λ μ΄λ° λͺ¨μ΅κ³Όλ λ€λ₯΄κΈ° λλ¬Έμ κΈ°κ³μ μΌλ‘ νμ±μ΄ λΆκ°λ₯νλ€.
3-1-2. Parser-Lexer μ‘°ν©
νμ±μ λκ°μ§ μλΈ νλ‘μΈμ€λ‘ λλμ μλ€. λ μ컬 λΆμκ³Ό μ νμ€ λΆμ.
λ μ컬 λΆμμ μ λ ₯κ°μ ν ν°μΌλ‘ λλλ κ³Όμ μ΄λ€. ν ν°μ μ ν¨νκ² κ΅¬μ±λ λ¨μμ μ§ν©μ΄λΌκ³ λ³Ό μ μλ€. μΈκ°μ μΈμ΄μμλ μ¬μ μ μΌλ‘ λ»μ΄ μλ λ¨μ΄λ€μ μλ―Ένλ€.
μ νμ€ λΆμμ μΈμ΄λ₯Ό μ νμ€ κ·μΉμ μ μ©νλ κ²μ΄λ€.
νμλ λ³΄ν΅ λκ°μ§ μΌμ νλλ° λ μ (ν ν¬λμ΄μ λΌκ³ λ νλ€)λ μ λ ₯κ°μ μ ν¨ν ν ν° κ°μΌλ‘ λλλ μΌμ νκ³ , νμλ μΈμ΄ κ·μΉμ λ°λΌ λ¬Έμꡬ쑰λ₯Ό λΆμνμ¬ νμ±νΈλ¦¬λ₯Ό μμ±νλ€. λ μλ 곡백, μ€λ°κΏ κ°μ μλ―Έ μλ λ¬Έμλ₯Ό μ κ±°νλ€.
D2μμλ λ μλ₯Ό μ΄νλΆμμΌλ‘, νμλ ꡬ문λΆμμΌλ‘ μ μνλ€.
νμ±κ³Όμ μ λ°λ³΅λλ€. νμλ λ μ΄μΈ μλ‘μ΄ ν ν°μ΄ μλμ§ μ§μνκ³ , ν ν°μ μ νμ€ κ·μΉμ λ§μΆλ €κ³ νλ€. λ§μ½ λ§λ κ·μΉμ΄ μλ€λ©΄, ν ν°μ ν΄λΉνλ λ Έλκ° νμ±νΈλ¦¬μ μΆκ°λκ³ , νμλ λλ€λ₯Έ ν ν°μ μμ²νκ² λλ€.
λ§μ½ μΌμΉνλ κ·μΉμ΄ μλ€λ©΄, νμλ ν ν°μ λ΄λΆμ μ μ₯νκ³ ν ν°κ³Ό μΌμΉνλ κ·μΉμ΄ λ°κ²¬λ λ κΉμ§ μμ²νλ€. λ§λ κ·μΉμ΄ κ³μν΄μ μλ€λ©΄ μμΈμ²λ¦¬λ₯Ό νλλ°, μ΄λ λ¬Έμκ° μ ν¨νμ§ μκ³ μ νμ€ μ€λ₯κ° μλ€λ κ²μ μλ―Ένλ€.
3-1-3. λ³ν
λλΆλΆμ κ²½μ° νμ€ νΈλ¦¬κ° λ§μ§λ§ κ²°κ³Όλ¬Όμ΄ μλλ€. νμ±μ λ³΄ν΅ λ³νκ³Όμ μμ μ¬μ©λλλ°, μ΄ κ³Όμ μ μ λ ₯λ λ¬Έμλ₯Ό λ€λ₯Έ νμμΌλ‘ λ³ννλ κ³Όμ μ μλ―Ένλ€. μ΄μ κ°μ μλ‘ μ»΄νμΌμ΄ μλ€. μμ€ μ½λλ₯Ό κΈ°κ³ μ½λλ‘ λ§λλ μ»΄νμΌλ¬λ, νμ±νΈλ¦¬ μμ±ν κΈ°κ³ μ½λ λ¬Έμλ‘ λ³ννλ€.
3-1-4. νμ± μμ
μ΄μ κ·Έλ¦Όμμ μνμμ νμ€ νΈλ¦¬λ‘ λ§λ€μ΄ 보μλ€. κ°λ¨ν μν μΈμ΄λ₯Ό μ μνκ³ , νμ±κ³Όμ μ μ΄ν΄λ³΄μ.
μΈμ΄: μ΄ μνμΈμ΄μλ μ μ, λνκΈ°, λΉΌκΈ°κ° μλ€.
μ νμ€:
- κΈ°λ³Έμ μΈ μμλ‘λ ννμ, ν, μ°μ°μκ° μλ€
- μΈμ΄μ ν¬ν¨λλ ννμ κ°―μμ μ νμ΄ μλ€
- ν λ€μ μ°μ°μ, κ·Έλ€μ λλ€λ₯Έ νμ΄ λμ€λ ννλ‘ μ μνλ€
- μ°μ°μλ λνκΈ° ν ν° λλ λΉΌκΈ° ν ν°μ΄λ€
- μ μ ν ν° λλ νλμ ννμμ νμ΄λ€.
μ΄μ μκΉ μμ μΈ 2+3-1
μ λΆμν΄λ³΄μ.
κ·μΉμ λ§λ 첫 λ²μ§Έ λ¬Έμμ΄μ 2λ€. κ·μΉ 5μ λ°λ₯΄λ©΄ μ΄κ²μ νλμ νμΌλ‘ λ³Ό μ μλ€. λ λ²μ§Έλ‘ λ§λ κ²μ 2+3 μΈλ° μ΄κ²μ ν λ€μ μ°μ°μμ λ λ€λ₯Έ νμ΄ λ±μ₯νλ€λ μΈ λ²μ§Έ κ·μΉκ³Ό μΌμΉνλ€. μ λ ₯ κ°μ λ§μ§λ§ λΆλΆκΉμ§ μ§ννλ©΄ λ λ€λ₯Έ μΌμΉλ₯Ό λ°κ²¬ν μ μλ€. 2+3μ νκ³Ό μ°μ°μμ νμΌλ‘ ꡬμ±λ νλμ μλ‘μ΄ νμ΄λΌλ κ²μ μκ³ μκΈ° λλ¬Έμ 2+3-1μ νλμ ννμμ΄ λλ€. 2++μ μ΄λ€ κ·μΉκ³Όλ λ§μ§ μκΈ° λλ¬Έμ μ ν¨νμ§ μμ μ λ ₯μ΄ λλ€.
3-1-5. μ΄νμ ꡬ문μ λν 곡μμ μΈ μ μ
μ΄νλ λ³΄ν΅ μ κ·ννμμ νμ©νλ€.
μλ₯Ό λ€μ΄ μ΄ μνμΈμ΄λ μλμ²λΌ ννν μ μμ κ²μ΄λ€.
INTEGER: 0|[1-9][0-9]*
PLUS: +
MINUS: -
보μλ€μνΌ, μ μλ μ κ·ννμμΌλ‘ μ μνλ€.
μ νμ€λ λ³΄ν΅ BNFλΌκ³ λΆλ₯΄λ νμμ λ°λΌμ μ μνλ€.
expression := term operation term
operation := PLUS | MINUS
term := INTEGER | expression
λ¬Έλ²μ΄ λ¬Έλ§₯ μμ λ¬Έλ²μ΄λΌλ©΄ μΈμ΄λ μ κ· νμλ‘ νμ±ν μ μλ€. λ¬Έλ§₯ μμ λ¬Έλ²μ μμ ν BNFλ‘ νν κ°λ₯ν λ¬Έλ²μΌλ‘ 보면 λλ€.
3-1-6. νμμ μ’ λ₯
νμλ top-down νμμ bottom up νμ μ΄λ κ² λκ°μ§λ‘ λλμ΄μ§λ€. μ§κ΄μ μΌλ‘ μ€λͺ νμλ©΄, top-down νμλ μμμ λΆν° μμꡬ쑰μμ λΆν° μΌμΉνλ λΆλΆμ μ°ΎκΈ° μμνμ§λ§, bottom-upμ κ²½μ°μλ λ°μμ λΆν° μ μ°¨ λμ μμ€μΌλ‘ μ°Ύλλ€.
λ μ’ λ₯ νμκ° μμ λ₯Ό μ΄λ»κ² νμ±νλμ§ μ΄ν΄λ³΄μ.
top-down νμλ μμ ꡬ쑰μμ λΆν° μμνλ€. 2+3
μ ν΄λΉνλ ννμμ μ°Ύλλ€. κ·Έλ¦¬κ³ 2+3-1
λ₯Ό μ°Ύμ κ²μ΄λ€. ννμμ μ°Ύλ κ³Όμ μ, λ€λ₯Έ κ·μΉμ μ μ§μ μΌλ‘ κ³μν΄μ μ°Ύλ λ°©μμΈλ° κ°μ₯ λμ μμ€μ κ·μΉμ λ¨Όμ μ°Ύλ κ²μ μμνλ€.
λ°λ©΄μ bottom-upμ μ λ ₯κ°μ΄ κ·μΉμ λ§μλ κΉμ§ μ°Ύμμ λ§λ μ λ ₯κ° κ·μΉμΌλ‘ λ°κΎΈλλ°, μ΄λ μ λ ₯κ°μ λκΉμ§ μ§νλλ€. λΆλΆμ μΌλ‘ μΌμΉνλ ννμμ νμμ μ€νμ μμΈλ€.
Stack | input |
---|---|
2 + 3 - 1 | |
ν | + 3 - 1 |
ν μ°μ°μ | 3 -1 |
ννμ | -1 |
ννμ μ°μ°μ | 1 |
ννμ |
bottom up νμλ shift-reduce νμλΌκ³ λ λΆλ¦¬μ°λλ°, μλνλ©΄ μ λ ₯κ°μ΄ μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ©΄μ μ νμ€ κ·μΉμΌλ‘ λ¨λ κ²μ΄ μ μ°¨ κ°μνκΈ° λλ¬Έμ΄λ€.
3-1-7. νμ μλ μμ±
νμλ₯Ό μμ±ν΄ μ€ μ μλ λꡬλ₯Ό νμ μμ±κΈ°λΌκ³ νλ€. μ΄ μμ±κΈ°μ λ¬Έλ²μ μ 곡νκ³ , μ΄νμ μ νμ€ κ·μΉμ μ μ©νμ¬ νμλ₯Ό μμ±νλ€. νμλ₯Ό μμ±νλ €λ©΄ νμ±μ λν κΉμ μ΄ν΄κ° νμνλ©°, μμμ μΌλ‘ μ΅μ νλ νμλ₯Ό μ 곡νλ κ²μ μ½μ§ μμΌλ―λ‘ νμ μμ±κΈ°κ° μ μ©ν μ μλ€.
Webkitμ κ²½μ°μλ flexλΌκ³ λΆλ¦¬μ°λ lexerμ bisonμ΄λΌκ³ λΆλ¦¬μ°λ νμ μμ±κΈ°λ₯Ό μ¬μ©νλ€. Flexλ ν ν°μ μ κ· ννμ μ μλ₯Ό ν¬ν¨νλ νμΌμ μ λ ₯κ°μΌλ‘ λ°κ³ , bisonμ BNFνμμ μΈμ΄ μ νμ€ κ·μΉμ μ λ ₯ λ°λλ€.