This is the BNF description of the PCA pathname syntax. a-char ::== 'a' | 'A' alpha-char ::== 'a' .. 'z' | 'A'..'Z' b-char ::== 'b' | 'B' digit-char ::== '0' .. '9' dot-char ::== '.' double-colon-char ::== ':' double-quote-char ::== '"' e-char ::== 'e' | 'E' i-char ::== 'i' | 'I' l-char ::== 'l' | 'L' m-char ::== 'm' | 'M' n-char ::== 'n' | 'N' percent-char ::== '%' single-quote-char ::== ''' space-char ::== space | horizontal-tab special-char ::== '^' | '~' | '|' | '#' | '$' | '-' | '=' | '&' | '+' | '<' | '>' | '*' | '_' zero-char ::== '0' operator-char ::== space-char | '[' | ']' | ',' | '(' | ')' | '/' | '!' | '\' quote-char ::= single-quote-char | double-quote-char separator-char ::== '\' | dot-char (Ada only) terminator-char ::== space-char | carriage-return | '[' | ']' | ',' | '(' | ')' | '/' | '!' double-quoted-char ::== alpha-char | digit-char | dot-char | double-colon-char | operator-char | percent-char | single-quote-char | special-char single-quoted-char ::== alpha-char | digit-char | double-colon-char | double-quote-char | dot-char | operator-char | percent-char | special-char unquoted-char ::== alpha-char | digit-char | dot-char (not Ada) | double-quote-char | percent-char | single-quote-char | special-char double-quote-quote ::== double-quote-char double-quote-char double-quote-sequence ::== double-quoted-char | double-quote-quote double-quoted-identifier ::== double-quote-char double-quote-sequence [{double-quoted-sequence}] double-quote-char single-quote-quote ::== single-quote-char single-quote-char single-quote-sequence ::== single-quoted-char | single-quote-quote single-quoted-identifier ::== single-quote-char single-quote-sequence [{single-quoted-sequence}] single-quote-char double-colon-colon ::== double-colon-char double-colon-char unquoted-identifier ::== {[ [{unquoted-char}] double-colon-colon]} unquoted-char [{unquoted-char}] quoted-identifier ::== double-quoted-indentifier | single-quoted-identifer token-identifier ::== quoted-identifier | unquoted-identifier label-identifier ::== percent l-char a-char [b-char e-char l-char] space-char [{space-char}] token-identifer line-identifier ::== percent l-char i-char [n-char e-char] space-char [{space-char}] [{'0'}] digit-char {digit-char} [dot [{'0'}] digit-char {digit-char}] name-identifier ::== percent n-char a-char [m-char e-char] space-char [{space-char}] token-identifer identifier ::== line-identifier | label-identifier | name-identifier | token-identifier path-name :== [{identifier separator-char}] identifier terminator-char The following BNF operator definitions are used: ::== assignment operator. | exclusive OR operator. [] optional operator. .. range operator. {} repeat operator.