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 ;
 |