Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
(예시) #Assignment 9
by lynn
#pragmatic
2년 전
1,588
1

책 읽으면서 연습문제 직접 풀어보셨나요? 지나간 연습문제 중 한 문제를 뽑아 이번에 제대로 풀어봅시다.

5장까지 총 23개의 연습문제가 있습니다. 이 중 한 문제를 골라 풀이과정을 작성해 주세요.

  1. 연습문제를 읽어 본다.

  2. 맘에 드는 연습 문제를 하나 고른다.

  3. 연습 문제를 풀고 해설과 참고 문헌을 자세히 쓴다.

❗️ 풀이과정은 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

1 comment