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

Reply via email to