develooper Front page | perl.perl6.internals.api.parser | Postings from December 2000

A parser that can handle partial programs (was Re: Now, to try again...)

Thread Previous | Thread Next
Bradley M. Kuhn
December 17, 2000 09:41
A parser that can handle partial programs (was Re: Now, to try again...)
Message ID:
Nicholas Clark <> 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"

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  -

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About