---
# System prepended metadata

title: Day07-학습정리
tags: [2020 Boostcamp]

---

###### tags: `2020 Boostcamp`
# Day07-학습정리

- ### 스스로 확인할 사항

  - **본인이 작성한 프로그램에서 tokenizer, lexer, parser 역할과 책임에 대해 정리한다.**
    - tokenizer: input string을 제귀적으로 잘라내며 tocken들의 리스트를 반환
    - lexer: 해당 문자열이 어떤 종류의 tocken인지를 반환
    - parser: tocken 리스트로 json형식으로 변환
  - **무한 중첩된 구조를 재귀 함수로 구현한다면 어떤 장점과 단점이 있는지 정리한다.**
    - 장점: 구현이 간단하다
    - 단점: 스택 오버플로우 가능성이 상당히 높다
  - **프로그램 입력값이나 에러 처리를 위한 다양한 흐름 제어 방식에 대해 학습하고 정리한다.**
    - Try/catch
      - 실행중인 함수에서 throw를 던지면 상위함수에서 try-catch를 통해 에러를 받고 처리한다
    - 프로그램을 죽일수도, 무시하고 진행할 수도 있다
    - 가까운 곳에서 즉시 처리하거나 상위로 위임한다
    - 강제성을 띄는지 여부를 판단한다

  ### 다같이 확인할 사항

  - **컴파일러 이론에서 tokenizer, lexer, parser의 역할은 각각 무엇인지 조사하고, 서로의 코드 역할과 비교한다.**
    - tokenizer: 의미있는 단위로 쪼개는 역할
    - Lexer: 쪼개진 데이터에 의미를 부여
    - Parser: 의미를 부여한 데이터를 구조화 시킴
  - **tokenizer 에서 lexer로, lexer에서 parser로 전달하는 데이터 구조와 데이터 타입을 만든 기준을 비교한다.**
    - Tokenizer -> Lexer: String
      - 잘린 문자열을 lexer로 전달 하여 의미를 부여하고 Tocken(해석된 타입)으로 리턴한다
    - Lexer -> parser: [Tocken]
      - 데이터를 구조화 시키기 위해 해석된 타입의 리스트를 전달한다