46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2007, 2008 Daniel Ehrenberg.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: kernel sequences assocs hashtables parser lexer
							 | 
						||
| 
								 | 
							
								vocabs words namespaces vocabs.loader debugger sets ;
							 | 
						||
| 
								 | 
							
								IN: qualified
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: define-qualified ( vocab-name prefix-name -- )
							 | 
						||
| 
								 | 
							
								    [ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
							 | 
						||
| 
								 | 
							
								    [ -rot >r append r> ] curry assoc-map
							 | 
						||
| 
								 | 
							
								    use get push ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: QUALIFIED:
							 | 
						||
| 
								 | 
							
								    #! Syntax: QUALIFIED: vocab
							 | 
						||
| 
								 | 
							
								    scan dup define-qualified ; parsing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: QUALIFIED-WITH:
							 | 
						||
| 
								 | 
							
								    #! Syntax: QUALIFIED-WITH: vocab prefix
							 | 
						||
| 
								 | 
							
								    scan scan define-qualified ; parsing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: expect=> ( -- ) scan "=>" assert= ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: partial-vocab ( words name -- assoc )
							 | 
						||
| 
								 | 
							
								    dupd [
							 | 
						||
| 
								 | 
							
								        lookup [ "No such word: " swap append throw ] unless*
							 | 
						||
| 
								 | 
							
								    ] curry map zip ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: partial-vocab-ignoring ( words name -- assoc )
							 | 
						||
| 
								 | 
							
								    [ load-vocab vocab-words keys swap diff ] keep partial-vocab ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: EXCLUDE:
							 | 
						||
| 
								 | 
							
								    #! Syntax: EXCLUDE: vocab => words ... ;
							 | 
						||
| 
								 | 
							
								    scan expect=>
							 | 
						||
| 
								 | 
							
								    ";" parse-tokens swap partial-vocab-ignoring use get push ; parsing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: FROM:
							 | 
						||
| 
								 | 
							
								    #! Syntax: FROM: vocab => words... ;
							 | 
						||
| 
								 | 
							
								    scan dup load-vocab drop expect=>
							 | 
						||
| 
								 | 
							
								    ";" parse-tokens swap partial-vocab use get push ; parsing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: RENAME:
							 | 
						||
| 
								 | 
							
								    #! Syntax: RENAME: word vocab => newname
							 | 
						||
| 
								 | 
							
								    scan scan dup load-vocab drop lookup [ "No such word" throw ] unless*
							 | 
						||
| 
								 | 
							
								    expect=>
							 | 
						||
| 
								 | 
							
								    scan associate use get push ; parsing
							 | 
						||
| 
								 | 
							
								
							 |