如何确定数字范围

时间:2019-04-25 09:28:20

标签: java javacc

我正在使用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 :(得分:0)

我可能会在解析器中大致按以下方式处理

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() ;
    }
 }