-
TIL 123일 - Antlr로 환불 규정 만들기(2)공부/개발 전체적인 2022. 5. 1. 16:14
아래 문자열이 의미하는 것은 환불 규정이다, begin end가 둘 다 있는 경우, end만 있는 경우, begin만 있는 경우 이렇게 3가지 표현이 있따.
begin:D-4of1|end:D-1of2|20000원 end:D-1of2|20000원 begin:D-4of1|20000원
ㅇ 이렇게 한 덕분에 코드 단에서 아래처럼 접근할 수 있게 되었다.
beginDate().beginDDay().dDay().NUMBER()
일단 지금까지 봤을 때 문법은 완성이 되었다고 생각했고, 그래서 실제 실무에 적용을 해보려고 node.js에서의 antlr를 찾아봤는데
노드 버전이 부족해서 패키지를 설치할 수가 없다고 한다... 흠....
당황 조금 스럽네....
일단 비지터랑 리스너 개념이 나왔었는데
지금까지 했던 방식은 리스너였다. Antlr가 제공해주는 walker를 통해서 아래같은 코드를 작성했었다.
Walker.walk(listener, tree)
그리고 listener안에서 뭔가 처리를 하는 로직이 있었는데 영 찝찝했다. 그런데 찾아보니 listener방식 외에도 visitor 방식이 있다고 한다.
visitor는 visitor.visit(tree) 같은 방식으로 처리를 한다고 한다. 아무래도 tree를 순회하고 나서 결과 값을 리턴해야 하기 때문에 visitor 패턴이 좀더 맞지 않을까 생각이 든다.
grammar Refund; expression : refundRule | expression expression ; refundRule : beginDate'|'endDate'|'refundPrice | endDate'|'refundPrice | beginDate'|'refundPrice ; beginDate : beginDDay meetingOrder ; beginDDay : 'begin:'dDay ; endDate : endDDay meetingOrder ; endDDay : 'end:'dDay ; dDay : 'D'sign NUMBER | 'D'sign NUMBER ; meetingOrder : 'of'NUMBER ; refundPrice : NUMBER'원' ; sign : PLUS | MINUS ; /* * Lexer Rules */ PLUS : '+' ; MINUS : '-' ; NUMBER : [0-9]+ ; WHITESPACE : ' ' -> skip ;
'공부 > 개발 전체적인' 카테고리의 다른 글
TIL 125일 - 시퀀스 다이어그램 (0) 2022.05.03 TIL 124일 - Value Object Pattern (0) 2022.05.03 TIL 122일 - 시퀀스 다이어그램 (0) 2022.05.01 TIL 121일 - Visitor 패턴과 Antlr (0) 2022.04.30 TIL 120일 - Antlr으로 환불 규정...만들기?? (0) 2022.04.28