###### 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]
- 데이터를 구조화 시키기 위해 해석된 타입의 리스트를 전달한다