[
Lists Home |
Date Index |
Thread Index
]
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
|