Как иметь диапазон для числа - PullRequest
0 голосов
/ 25 апреля 2019

Я использую javaCC для генерации моего парсера.Но я хочу иметь дату в таком формате: «01/02» или «05/12» или «30/11»

TOKEN :
{
  < CONSTANT : (< DIGIT >)+ >
| < STRING : ( ["A"-"Z","a"-"z"] )+ >
| < #DIGIT : [ "0"-"9" ] >
| < SLASH: "/" >
}

У меня есть что-то подобное:

(< CONSTANT > <SLASH > < CONSTANT >)

Но он принимает 999/888 ... Как я могу принять только 0-31 для левой стороны косой черты и 0-12 для правой стороны косой черты

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 25 апреля 2019

Я бы, вероятно, обработал это в парсере примерно так:

void date() throws AnException : {
    Token t ;
    int m;
    int d ;
}{
    t=<CONSTANT>   { d = Integer.parse(t.image) ; }
    <SLASH>
    t=<CONSTANT>   { m = Integer.parse(t.image) ; }
    {   if( m > 12 ) throw AnException() ;
        if( d > 31 ) throw AnException() ;
    }
 }
...