我正在使用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的斜线右侧
非常感谢您的帮助
答案 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() ;
}
}