Nicholas Clark <[EMAIL PROTECTED]> 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/bkuhn
PGP signature