[Home] [By Thread] [By Date] [Recent Entries]


Bob Foster:
>  > Why isn't it done?
> 
> Good question. It should be. Of course, the notation suggests to most 
> compsci people that recursion will be permitted, i.e., that this is a 
> context-free instead of regular grammar, and that's probably not what 
> you intended.

The technique to detect recursions and stop context-grammars early is

 (resolve
   (lambda (piece)
     (cond
       ((string? piece) piece)
       ((symbol? piece)
	 (let ((entry (assv piece code)))
	   (if entry
	      (apply string-append (map resolve (cdr entry)))
	      (begin (error! piece " unresolved") ""))))))))

that is, just concatenate. If there is a recursion, the Scheme interpreter
will run out of space and the validator will immediately report an error
in the expression.

David

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member