BNF for LabelParser.jj

NON-TERMINALS

labellist ::= <L_PAREN> version ( service_info )+ <R_PAREN>
version ::= <PICS11>
| <PICS10>
service_info ::= <ERROR> <L_PAREN> <NORAT> ( explanation )* <R_PAREN>
| serviceID ( service_error | ( ( option )* labelword ( label )* ) )
serviceID ::= quotedURL
labelword ::= <LABELS>
| <LOWALPHA>
label ::= label_error
| single_label
| <L_PAREN> ( single_label )* <R_PAREN>
single_label ::= ( option )* ratingword <L_PAREN> ( rating )+ <R_PAREN>
ratingword ::= <RATINGS>
| <LOWALPHA>
quotedURL ::= <DQUOTE> URL <DQUOTE>
URL ::= ( <SLASH> | urlchar )+
option ::= labeloption
| documentoption
| otheroption
labeloption ::= <BY> quotedname
| <GENERIC> bool
| <FOR> quotedURL
| <ON> quotedISOdate
| <SIGNATURE> base64string
| ( <UNTIL> | <EXP> ) quotedISOdate
bool ::= <TRUE>
| <FALSE>
documentoption ::= <AT> quotedISOdate
| <MD5> base64string
otheroption ::= <COMMENT> quotedname
| <FULL> quotedURL
| <EXT> <L_PAREN> mand_opt quotedURL ( data )* <R_PAREN>
mand_opt ::= <OPT>
| <MAND>
data ::= ( quotedISOdate | quotedURL | quotedname | quotedbase64 | number | <L_PAREN> ( data )* <R_PAREN> )
quotedISOdate ::= <DQUOTE> ISOyear ( <DOT> | <MINUS> ) ISOmonth ( <DOT> | <MINUS> ) ISOday <HIGHALPHA> ISOhour <COLON> ISOminute ( <COLON> ISOsecond ( <DOT> ISOdecimal )? )? sign ISOtimezone <DQUOTE>
sign ::= <PLUS>
| <MINUS>
rating ::= transmit_name ( number | ( <L_PAREN> multi_value ( multi_value )* <R_PAREN> ) )
multi_value ::= number ( <COLON> number )?
transmit_name ::= ( transmit_name_char )+ ( <SLASH> transmit_name )?
singlenum ::= <DIGIT>
decimalnum ::= ( singlenum )+ <DOT> singlenum
number ::= decimalnum
| ( singlenum )+
quotedname ::= <DQUOTE> ( urlchar_or_space )+ <DQUOTE>
alphanumpm ::= <LOWALPHA>
| <HIGHALPHA>
| <DIGIT>
| sign
escape ::= ( <PERCENT> hex hex )
hex ::= ( <DIGIT> | <LOWALPHA> | <HIGHALPHA> )
transmit_name_char ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <PLUS> | <MINUS> | escape | <ATSIGN> | <SEMI> | <QUES> | <COLON> | <AMP> | <EQUAL> | <DOLLAR> | <USCORE> | <DOT> | <POUND> | <BANG> | <STAR> | <COMMA> | <NATIONAL> | reservedString )
urlchar ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <MINUS> | escape | <ATSIGN> | <SEMI> | <QUES> | <COLON> | <AMP> | <EQUAL> | <DOLLAR> | <USCORE> | <DOT> | <POUND> | <BANG> | <STAR> | <COMMA> | <NATIONAL> | <L_PAREN> | <R_PAREN> | reservedString )
reservedString ::= ( <PICS11> | <PICS10> | <ERROR> | <NORAT> | <LABELS> | <RATINGS> | <BY> | <GENERIC> | <FOR> | <ON> | <SIGNATURE> | <UNTIL> | <EXP> | <TRUE> | <FALSE> | <AT> | <MD5> | <COMMENT> | <FULL> | <EXT> | <OPT> | <MAND> | <DENIED> | <NOT> | <NOSER> )
urlchar_or_space ::= urlchar
quotedbase64 ::= <DQUOTE> base64string <DQUOTE>
base64string ::= ( ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <SLASH> | <EQUAL> | <PLUS> ) | reservedString )+
service_error ::= <ERROR> ( ( <L_PAREN> <DENIED> ( explanation )* <R_PAREN> ) | <NOSER> )
label_error ::= <ERROR> <L_PAREN> ( ( <DENIED> ( quotedURL ( explanation )* )? ) | ( <NOT> ( quotedURL )* ) ) <R_PAREN>
explanation ::= quotedname
ISOyear ::= <DIGIT> <DIGIT> <DIGIT> <DIGIT>
ISOmonth ::= <DIGIT> <DIGIT>
ISOday ::= <DIGIT> <DIGIT>
ISOhour ::= <DIGIT> <DIGIT>
ISOminute ::= <DIGIT> <DIGIT>
ISOsecond ::= <DIGIT> <DIGIT>
ISOdecimal ::= ( <DIGIT> )+
ISOtimezone ::= <DIGIT> <DIGIT> <DIGIT> <DIGIT>