Grammar Definitions

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.


Wildcard Segment Names

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 Descriptions

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>                


Footnotes

(1)
Upper case "normal" letters are always converted to lower case.
(2)
When blanks may be interpreted either as "optspace" between defined names or as letters within a "defined name", the longest name that actually exists is matched.