Nicholas Clark <nick@ccl4.org> wrote: > Something I though of: > If you're trying to write an interactive perl inputer - either a perl shell > or just the command prompt on the debugger it would be useful if you > could tell the parser that the chunk of source you're giving it may be > incomplete. I really like this idea, although I am unsure of how we might implement it. I don't recall any of the compiler texts I have read over the years talking about formal methods for writing such a "partial programs are acceptable" parser. Lisp-like languages handle this, but s-expressions are so trivial to parse that it's no help to simply "follow" their example. Perhaps, since we are doing recursive decent, we could have a user-definable error function. If all possible errors have well-defined types, the caller could define an error function that informs rather than croaks and could prompt like this: foo$ print "Hello world <RET> foo (unclosed double-quote)$ Inside, this would be something like (sorry for writing in pseudo-Perl, instead of pseudo-C): $PROMPT = "foo$"; $interp = new Perl::Language::Interpeter(); $done = 0; my $handleError = sub ($) { my($errorID) = @_; if (! $errorID) { $interp->Eval($parseTree); $done = 1; } if ($errorID == $UNCLOSED_DOUBLE_QUOTE) { $PROMPT = "foo (unclosed double-quote)$"; } [...] } while (! $done) { print "$PROMPT "; $string .= <STDIN>; chomp $string; $parseTree = $interp->Parse($string, $handleError); } -- Bradley M. Kuhn - http://www.ebb.org/bkuhnThread Previous | Thread Next