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.