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> |