개발자 99% 커뮤니티에서 수다 떨어요!
책 읽으면서 연습문제 직접 풀어보셨나요? 지나간 연습문제 중 한 문제를 뽑아 이번에 제대로 풀어봅시다.
5장까지 총 23개의 연습문제가 있습니다. 이 중 한 문제를 골라 풀이과정을 작성해 주세요.
연습문제를 읽어 본다.
맘에 드는 연습 문제를 하나 고른다.
연습 문제를 풀고 해설과 참고 문헌을 자세히 쓴다.
❗️ 풀이과정은 500자 이상으로 작성해주세요.
❗️ 풀이 과정을 적기위해 찾아보고 참고했던 내용이 있다면 꼭 출처를 함께 남겨주세요!
💡 연습문제 6. 시간 표현을 파싱하는 BNF 문법을 하나 설계하라. 다음의 예를 모두 파싱할 수 있어야 한다.
[4pm, 7:48pm, 23:42, 3:16, 3:16 am]
우선 파싱해서 나열해 보았다.
<시><pm> | <시>:<분><분><pm> | <0-9사이 숫자><0-9사이 숫자> : <0-9사이 숫자><0-9사이 숫자> | <시>:<분><분> | <시>:<분><분><am>
결국 포맷은 아래 3가지 였다.
<시><ampm> | <시>:<분><분><ampm> | <0-9사이 숫자><0-9사이 숫자> : <0-9사이 숫자><0-9사이 숫자>
0-9사이 숫자 너무 길다. 간단하게 빼서 써야겠다.
<숫자> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
다른 것도 정의 해야겠다.
<ampm> ::= am | pm
<시> ::= <숫자><숫자> | <숫자>
그
런데 시에는 0,1,2 까지밖에 못 쓴다. 하루가 24시 이기 때문이다. 또한
동일하게 분에는 1시간이 60분이라서 59분까지밖에 못쓰므로 분 앞자리 숫자는 0,1,2,3,4,5 까지밖에 못쓴다!
<시> ::=<시숫자><숫자> | <숫자>
<시숫자> ::= 0 | 1 | 2
<분> ::= <분숫자><숫자>
<분숫자> ::= 0 | 1 | 2 | 3 | 4 | 5
<숫자> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
최종 정리해보면...
<시간> ::= <시><ampm> | <시>:<분><ampm> | <시>:<분>
<ampm> ::= am | pm
<시> ::=<시숫자><숫자> | <숫자>
<분> ::= <분숫자><숫자>
<시숫자> ::= 0 | 1 | 2
<분숫자> ::= 0 | 1 | 2 | 3 | 4 | 5
<숫자> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
BNF 문법이란?
배커스-나우르 표기법 - 위키백과, 우리 모두의 백과사전
시간 표현을 파싱한다?
Parsing
parsing은 구문 분석이라고 합니다. 문장이 이루고 있는 구성 성분을 분해하고 분해된 성분의 위계 관계를 분석하여 구조를 결정하는 것.
https://kingpodo.tistory.com/8
<time> ::= <hour><ampm> | <hour>:<minute><ampm> | <hour>:<minute>
<ampm> ::= am | pm
<hour> ::= <시숫자><숫자> | <숫자>
<minute> ::= <분숫자><숫자>
<h-tens> ::= 0 | 1 | 2
<m-tens> ::= 0 | 1 | 2 | 3 | 4 | 5
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9