39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Broken by recent changes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								USING: kernel vocabs words combinators math
							 | 
						||
| 
								 | 
							
								       namespaces arrays sequences assocs sorting
							 | 
						||
| 
								 | 
							
								       inspector vars ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IN: parser
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								! : word-restarts ( string -- restarts )
							 | 
						||
| 
								 | 
							
								! words-named natural-sort
							 | 
						||
| 
								 | 
							
								! [ [ "Use the word " swap summary append ] keep 2array ] map
							 | 
						||
| 
								 | 
							
								! { "Define this word as a symbol" 0 } add
							 | 
						||
| 
								 | 
							
								! { "Defer this word in the 'scratchpad' vocabulary" f } add ;
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								! : no-word-option ( obj -- word )
							 | 
						||
| 
								 | 
							
								! { { [ dup f = ] [ drop in get create ] }
							 | 
						||
| 
								 | 
							
								!   { [ dup 0 = ] [ drop in get create dup define-symbol ] }
							 | 
						||
| 
								 | 
							
								!   { [ t ]       [ nip dup word-vocabulary use+ ] }
							 | 
						||
| 
								 | 
							
								! } cond ;
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								VAR: new-symbol-action ! ( str -- word )
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								! [ dup no-word no-word-option ] new-symbol-action set-global 
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								! ! For lisp:
							 | 
						||
| 
								 | 
							
								! ! 
							 | 
						||
| 
								 | 
							
								! ! [ in get create dup define-symbol ] >new-symbol-action
							 | 
						||
| 
								 | 
							
								! 
							 | 
						||
| 
								 | 
							
								! : search ( str -- word )
							 | 
						||
| 
								 | 
							
								! { { [ dup use get assoc-stack ]
							 | 
						||
| 
								 | 
							
								!     [ use get assoc-stack ] }
							 | 
						||
| 
								 | 
							
								!   { [ dup words-named empty? ]
							 | 
						||
| 
								 | 
							
								!     [ new-symbol-action> call ] }
							 | 
						||
| 
								 | 
							
								!   { [ dup words-named length 0 > ]
							 | 
						||
| 
								 | 
							
								!     [ dup no-word no-word-option ] }
							 | 
						||
| 
								 | 
							
								! } cond ;
							 |