
This section lists the grammar definitions for the names found in HOOPS. If you have had the misfortune of living through a "let's-write-a-compiler" computer science course, and as a result happen to know how to read these, you can use them to determine precisely what is legal and what is not.
segments -> outer comma segments
-> outer
outer -> lparen segments rparen
-> slash pinner
-> dot slash pinner
-> pinner
pinner -> lparen inner-list rparen
-> inner
inner-list -> pinner comma inner-list
-> pinner
inner -> string slash pinner
-> string optslash special
optslash pinner
-> special optslash pinner
-> string
-> special
special -> ellipsis
-> up-arrow
-> key-reference
string -> trimstring optspace
trimstring -> q-mark aliasname
-> wildname
aliasname -> normal-letter aliasname
-> normal-letter
wildname -> letter wildname
-> letter
key-reference -> `@' hex-digits optspace
hex-digits -> `0..9a..fA..F'
hex-digits
-> `0..9a..fA..F'
letter -> wild-letter
-> normal-letter
wild-letter -> `*'
-> `%'
normal-letter -> `A..Za..z0..9'(1)
-> `'
-> `#'
-> `+'
-> `-'
-> `$'
-> `_'
-> `.'
-> quoted-letters
optslash -> slash
-> optspace
optspace -> `' optspace
-> `<tab>' optspace
-> <nothing>
quoted-letters -> `'' any-letters `''
-> `"' any-letters `"'
-> ``' any-letters ``'
any-letters -> (anything in the character set)
slash -> `/' optspace
dot -> `.' optspace
ellipsis -> `...' optspace
lparen -> `(' optspace
rparen -> `)' optspace
up-arrow -> `^' optspace
-> `..' optspace
q-mark -> `?' optspace
color -> qual-list hsimple
qual-list -> qual-list 1st-degree
-> qual-list 2nd-degree
-> optspace
1st-degree -> 1st-name
-> primitive `ish'
2nd-degree -> 2nd-name
-> primitive `er'
hsimple -> simple `-' simple
-> simple
simple -> defined-name
-> primitive
primitive -> lparen `R' val `G' val `B' val rparen
-> lparen `H' val `S' val /I>`V' val rparen
-> lparen `H' val `L' val `S' val rparen
-> lparen color rparen
val -> optspace `=' optspace float-num optspace
1st-name -> defined-name
2nd-name -> defined-name
defined-name -> optspace trim-name optspace
trim-name -> letter trim-name
-> letter
float-num -> optpm digits optfrac optexp
optpm -> `+'
-> `-'
-> <nothing>
digits -> `0..9' optdigits
optdigits -> `0..9' optdigits
-> <nothing>
optfrac -> `.' optdigits
-> <nothing>
optexp -> `E' optpm digits
-> <nothing>
letter -> `A..Za..z0..9'
-> `'(2)
-> `#'
-> `-'
-> `$'
-> `_'
-> `%'
-> `/'
lparen -> `(' optspace
rparen -> `)' optspace
optspace -> `' optspace
-> `<tab>' optspace
-> <nothing>