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