2015년 8월 29일 토요일

java로 만드는 계산기 javaCC 사용 (후기)


앞에서 소스는 공개하였습니다. 참고하세요
http://swlock.blogspot.kr/2015/08/java-javacc.html

만든다고 3일정도 고생한것 같습니다.

가장 어려웠던 부분이 정규식 부분이었습니다.
JavaCC에서 사용하는 정규식 표현이 일반과 다르고 설명도 부족해서 여기저기 찾아봤는데 그중에서도 " 를 사용하는 부분이었습니다.

계산기를 만들게된 동기중에서 시간계산이 필요하여서 만들게 되었는데요, 두 개의 시간차를 구하고 싶었습니다.
입력을 date("2000-10-10 12:11:10") 이런식으로 입력이 가능하도록 제작하였습니다.
하지만 " 를 파싱하기 위해서는 " 중간에 다시 따옴표가 나올 수 있기 때문에 파싱하는게 좀 어려웠지만 인터넷에서 해법을 찾을 수 있었습니다.
http://stackoverflow.com/questions/24156948/javacc-quote-with-escape-character

그래서 date("2000-11-10 12:11:10") - date("2000-10-10 12:11:10") 와 같이 계산을 하면 아래와 같이 나타납니다. 날짜의 시간은 줄리안데이트로 표시하기 때문에 1970-01-01 00:00:00 이 나타나게 됩니다. 따라서 결과값에 해당 숫자를 빼고 생각해주면 시간차가 됩니다.
그리고 기본적으로 날짜 변환을 사용하게 되면 bIsDate 변수가 true가 되어 결과 출력시 날짜로 표기하게 됩니다.

date("2000-11-10 12:11:10")-date("2000-10-10 12:11:10")
2678400000
1970-02-01 00:00:00
date("2000-10-10 12:11:10")-date("2000-10-10 12:11:10")
0
1970-01-01 00:00:00

연산자 우선순위
순서는 아래과 같습니다. 위쪽으로 우선 순위가 높습니다.
 () , function, ~, +, - : Primary 단항 연산자
 * / % : 승제 term
 + - : 가감 sum
 << >> : shift bit
 & : and bit
 ^ : xor bit
 | : or bit

java소스의 실행은 TDD로 되어 있습니다.
따라서 실행시키면 아무것도 출력이 나오지 않고 testCase실행을 시켜야합니다.

댓글 없음:

댓글 쓰기