BNF for ProfileParser.jj

NON-TERMINALS

rule ::= <L_PAREN> <PICSRULE> integer <DOT> integer rule_body <R_PAREN>
integer ::= ( <DIGIT> )+
rule_body ::= <L_PAREN> rule_clauses <R_PAREN>
rule_clauses ::= ( rule_clause )+
rule_clause ::= ( policy_clause | name_clause | source_clause | service_clause | opt_extension_clause | req_extension_clause | extension_aval )
policy_clause ::= <POLICY> <L_PAREN> ( policy_attribute )+ <R_PAREN>
policy_attribute ::= ( <REJECTURL> ( URL_strings ) | <ACCEPTURL> ( URL_strings ) | <REJECTIF> ( policy_string ) | <REJECTUNLESS> ( policy_string ) | <ACCEPTIF> ( policy_string ) | <ACCEPTUNLESS> ( policy_string ) | ( <EXPLAIN> )? ( quotedString ) | extension_aval )
policy_string ::= <DQUOTE> ( policy_expression ) <DQUOTE>
| <SQUOTE> ( policy_expression ) <SQUOTE>
name_clause ::= <NAME> <L_PAREN> ( name_attribute )+ <R_PAREN>
name_attribute ::= <DESC> quotedString
| ( <RULENAME> )? quotedString
| extension_aval
source_clause ::= <SOURCE> <L_PAREN> ( source_attribute )+ <R_PAREN>
source_attribute ::= <TOOL> quotedString
| <AUTHOR> quoted_address
| <LASTMOD> quotedISOdate
| ( <SOURCEURL> )? quotedURL
| extension_aval
quotedISOdate ::= <DQUOTE> ISOyear ( <MINUS> | <DOT> ) ISOmonth ( <MINUS> | <DOT> ) ISOday ( <HIGHALPHA> | <LOWALPHA> ) ISOhour <COLON> ISOminute ( <COLON> ISOsecond ( <DOT> ISOdecimal )? )? sign ISOtimezone <DQUOTE>
sign ::= <PLUS>
| <MINUS>
service_clause ::= <SERVICEINFO> <L_PAREN> ( service_attribute )+ <R_PAREN>
service_attribute ::= <SHORTNAME> quotedString
| <BUREAUURL> quotedURL
| ( <USEEM> y_n )
| <RATFILE> quotedString
| <NOBUREAU> pass_fail
| ( <NAME> )? quotedURL
| extension_aval
y_n ::= <DQUOTE> ( <HIGHALPHA> | <LOWALPHA> ) <DQUOTE>
| <SQUOTE> ( <HIGHALPHA> | <LOWALPHA> ) <SQUOTE>
opt_extension_clause ::= <OPTEXT> <L_PAREN> ( extension_name )+ <R_PAREN>
extension_name ::= <SHORTNAME> quotedString
| ( <EXT_NAME> )? quotedURL
| extension_aval
req_extension_clause ::= <REQEXT> <L_PAREN> ( extension_name )+ <R_PAREN>
extension_aval ::= attrvalpair
attrvalpair ::= ( attribute value )
| value
attribute ::= alphanumstr
value ::= quotedString
| <L_PAREN> ( attrvalpair )+ <R_PAREN>
quotedString ::= <DQUOTE> ( notdoublequotechar )+ <DQUOTE>
| <SQUOTE> ( notsinglequotechar )+ <SQUOTE>
alphanumstr ::= ( alphanum | <DOT> | reservedString )+
alphanum ::= ( <DIGIT> | <LOWALPHA> | <HIGHALPHA> )
notdoublequotechar ::= ( <SQUOTE> | notquotechar )
notsinglequotechar ::= ( <DQUOTE> | notquotechar )
notquotechar ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <NATIONAL> | <TILDE> | <L_BRACE> | <R_BRACE> | <ATSIGN> | <SLASH> | <L_PAREN> | <R_PAREN> | <DOLLAR> | <MINUS> | <USCORE> | <DOT> | <PLUS> | <SEMI> | <QUES> | <COLON> | <AMP> | <EQUAL> | <BANG> | <STAR> | <COMMA> | <L_BRAK> | <R_BRAK> | <L_ANGLE> | <R_ANGLE> | <POUND> )
| ( reservedString | escape )
userchar ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <NATIONAL> | <TILDE> | <L_BRACE> | <R_BRACE> | <L_PAREN> | <R_PAREN> | <DOLLAR> | <MINUS> | <USCORE> | <DOT> | <PLUS> | <SEMI> | <QUES> | <AMP> | <EQUAL> | <BANG> | <STAR> | <COMMA> | <L_BRAK> | <R_BRAK> | <L_ANGLE> | <R_ANGLE> | <POUND> | <PERCENT> )
| reservedString
servicenamechars ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <NATIONAL> | <TILDE> | <L_BRACE> | <R_BRACE> | <ATSIGN> | <SLASH> | <DOLLAR> | <MINUS> | <USCORE> | <PLUS> | <SEMI> | <QUES> | <COLON> | <AMP> | <EQUAL> | <BANG> | <STAR> | <COMMA> | <L_BRAK> | <R_BRAK> | <POUND> | <PERCENT> )
| reservedString
quotedURL ::= <DQUOTE> URL <DQUOTE>
| <SQUOTE> URL <SQUOTE>
URL ::= ( <SLASH> | urlchar )+
urlchar ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <MINUS> | urlescape | <ATSIGN> | <SEMI> | <QUES> | <COLON> | <AMP> | <EQUAL> | <DOLLAR> | <USCORE> | <DOT> | <POUND> | <BANG> | <STAR> | <COMMA> | <TILDE> | <NATIONAL> | <L_PAREN> | <R_PAREN> | reservedString )
escape ::= ( <PERCENT> picsruleshex1 picsruleshex2 )
urlescape ::= ( <PERCENT> hex hex )
hex ::= ( <DIGIT> | <LOWALPHA> | <HIGHALPHA> )
picsruleshex1 ::= <DIGIT>
picsruleshex2 ::= <DIGIT>
quoted_address ::= <DQUOTE> ( notdoublequotechar )+ <DQUOTE>
| <SQUOTE> ( notsinglequotechar )+ <SQUOTE>
pass_fail ::= <DQUOTE> ( <PASS> | <FAIL> ) <DQUOTE>
| <SQUOTE> ( <PASS> | <FAIL> ) <SQUOTE>
comment ::= <L_BRACE> ( comment_text )* <R_BRACE>
comment_text ::= <LOWALPHA>
| <HIGHALPHA>
| <DIGIT>
| <NATIONAL>
| <TILDE>
| <ATSIGN>
| <SLASH>
| <L_PAREN>
| <R_PAREN>
| <DQUOTE>
| <DOLLAR>
| <MINUS>
| <USCORE>
| <DOT>
| <PLUS>
| <SEMI>
| <QUES>
| <COLON>
| <AMP>
| <EQUAL>
| <BANG>
| <STAR>
| <SQUOTE>
| <COMMA>
| <L_BRAK>
| <R_BRAK>
| <L_ANGLE>
| <R_ANGLE>
| <POUND>
| <PERCENT>
| <L_BRACE>
| reservedString
URL_strings ::= URL_string
| <L_PAREN> ( <PATTERNS> )? ( URL_string )+ <R_PAREN>
URL_string ::= <DQUOTE> URLpattern <DQUOTE>
urlnotquotechar ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <NATIONAL> | <TILDE> | <L_BRACE> | <R_BRACE> | <ATSIGN> | <SLASH> | <L_PAREN> | <R_PAREN> | <DOLLAR> | <MINUS> | <USCORE> | <DOT> | <PLUS> | <SEMI> | <QUES> | <COLON> | <AMP> | <EQUAL> | <BANG> | <STAR> | <COMMA> | <L_BRAK> | <R_BRAK> | <L_ANGLE> | <R_ANGLE> | <POUND> )
| ( reservedString | escape )
URLpattern ::= ( internet_pattern | other_pattern )
internet_pattern ::= ( internet_scheme <COLON> )? <SLASH> <SLASH> ( user )? hostoraddr ( <COLON> port )? ( <SLASH> pathmatch )?
internet_scheme ::= ( <STAR> | <FTP> | <HTTP> | <GOPHER> | <NNTP> | <IRC> | <PROSPERO> | <TELNET> )
user ::= ( ( <PERCENT> )? <STAR> )? ( userchar )* ( ( <PERCENT> )? <STAR> )? <ATSIGN>
hostoraddr ::= ( ( ipwild ( <BANG> bitlength )? ) | ( host ) )
ipwild ::= ipcomponent <DOT> ipcomponent <DOT> ipcomponent <DOT> ipcomponent
ipcomponent ::= <DIGIT> ( <DIGIT> ( <DIGIT> )? )?
bitlength ::= <DIGIT> ( <DIGIT> )?
host ::= ( ( <PERCENT> )? <STAR> )? ( ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <MINUS> | <DOT> ) | reservedString )+
port ::= ( integerorwild ( <MINUS> integerorwild )? | <STAR> )
integerorwild ::= ( ( <DIGIT> )+ | <STAR> )
pathmatch ::= ( ( <PERCENT> )? <STAR> )? ( urlnotquotechar )* ( ( <PERCENT> )? <STAR> )?
other_pattern ::= scheme <COLON> ( ( <PERCENT> )? <STAR> )? ( urlnotquotechar )* ( ( <PERCENT> )? <STAR> )?
scheme ::= ( <STAR> | ( schemechar )+ )
schemechar ::= ( <LOWALPHA> | <HIGHALPHA> | <DIGIT> | <PLUS> | <MINUS> | <DOT> | reservedString )
operator ::= ( <TILDE> | <STAR> | <EQUAL> )
policy_expression ::= ( ( simple_expression ) | ( or_expression ) | ( and_expression ) | ( degenerate_expression ) )
simple_expression ::= <L_PAREN> ( service ) ( <DOT> ( category ) ( ( op ) ( constant ) )? )? <R_PAREN>
service ::= ( servicenamechars )+
category ::= ( transmit_name_char )+ ( <SLASH> category )?
transmit_name_char ::= ( alphanumpm | <DOT> | <DOLLAR> | <COMMA> | <SEMI> | <COLON> | <AMP> | <QUES> | <BANG> | <STAR> | <TILDE> | <ATSIGN> | <POUND> | <USCORE> )
| ( urlescape | reservedString )
alphanumpm ::= ( <HIGHALPHA> | <LOWALPHA> | <DIGIT> | <PLUS> | <MINUS> )
op ::= <L_ANGLE> ( <EQUAL> )?
| <R_ANGLE> ( <EQUAL> )?
| <EQUAL>
constant ::= ( <MINUS> )? ( alphanum )* ( <DOT> ( alphanum )* )?
or_expression ::= <L_PAREN> policy_expression ( ( <OR> ) policy_expression )+ <R_PAREN>
and_expression ::= <L_PAREN> policy_expression ( ( <AND> ) policy_expression )+ <R_PAREN>
degenerate_expression ::= <OTHERWISE>
reservedString ::= ( <PICSRULE> | <POLICY> | <EXPLAIN> | <REJECTURL> | <ACCEPTURL> | <REJECTIF> | <REJECTUNLESS> | <ACCEPTIF> | <ACCEPTUNLESS> | <NAME> | <RULENAME> | <DESC> | <SOURCEURL> | <SOURCE> | <TOOL> | <AUTHOR> | <LASTMOD> | <SERVICEINFO> | <SHORTNAME> | <BUREAUURL> | <USEEM> | <RATFILE> | <NOBUREAU> | <OPTEXT> | <EXT_NAME> | <REQEXT> | <PASS> | <FAIL> | <URL> | <AND> | <OR> | <FTP> | <HTTP> | <GOPHER> | <NNTP> | <IRC> | <PROSPERO> | <TELNET> | <OTHERWISE> | <PATTERNS> )
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>