1
년, 월, 일,시, 분 및 초로 지정된 기간을 일치시키는 규칙이 있습니다. 나는 적어도 하나가있는 한 이것들의 어떤 조합이라도 허용하고 싶다. 그리고 그것들은 그 순서대로 나타난다. 예를 들어ANTLR4 하나 이상의 옵션 *에 대한 규칙 *
:
- 3 년, 오일
- 2개월, 17초
아니라 :
- 일일 1 개월
- 5 분, 2 시간
내 현재 규칙은 다음과 같습니다
period
: years=INTEGER YEARS (LIST_DELIM months=INTEGER MONTHS)? (LIST_DELIM days=INTEGER DAYS)? (LIST_DELIM hours=INTEGER HOURS)? (LIST_DELIM minutes=INTEGER MINUTES)? (LIST_DELIM seconds=INTEGER SECONDS)?
| months=INTEGER MONTHS (LIST_DELIM days=INTEGER DAYS)? (LIST_DELIM hours=INTEGER HOURS)? (LIST_DELIM minutes=INTEGER MINUTES)? (LIST_DELIM seconds=INTEGER SECONDS)?
| days=INTEGER DAYS (LIST_DELIM hours=INTEGER HOURS)? (LIST_DELIM minutes=INTEGER MINUTES)? (LIST_DELIM seconds=INTEGER SECONDS)?
| hours=INTEGER HOURS (LIST_DELIM minutes=INTEGER MINUTES)? (LIST_DELIM seconds=INTEGER SECONDS)?
| minutes=INTEGER MINUTES (LIST_DELIM seconds=INTEGER SECONDS)?
| seconds=INTEGER SECONDS
;
이 중복의 공정한 금액 것 같은 느낌이 든다. 이것을 단순화 할 수있는 방법이 있습니까?