Newbie questions about Pliant

Newbie questions about Pliant

Ambiguous operators

How does the Pliant parser engine handle ambiguous operators, such as C's `-', which can be either unary or binary (with different priorities)?
Message posted by maybe Gord Eagle on 2003/01/14 06:37:32
I'm continuing on my work on a C preprocessor, and I'm faced with
the problem of trying to define C's '-' operator.

I've got something equivalent to:

operator '-' 490h 0 1
operator '-' 310h 1 1
But that doesn't work because of the name conflict.
How do I figure out during folding whether I should fold one
or two arguments?

I realize you avoided this issue neatly with the interpretation of
whitespace for Pliant's unary '-', but I need to tackle this
for a correct C parser.

Thanks,
Gord.
Message posted by hubert.tonneau on 2003/01/14 11:01:31
Try to scan the source code backward (it's a 'List' so you can do that).
When you reach the first non space, or tab character, it should be possible to
decide.
Also, your probably have to clear comments (remplace them with spaces) when
you find them in order to prevent them to disturb you backward scan.
Message posted by maybe Gord Eagle on 2003/01/14 13:57:55
Thanks, I'll try that.  I'm already clearing comments at an earlier
stage, so that should not be difficult.
Message posted by maybe Gord Eagle on 2003/01/15 05:12:26
I found the most effective approach to scanning backwards was
to look at context:current_expr.  That way I didn't have to
handle the source specially... I could just deal with the
parsed unfolded expressions.
Message posted by hubert.tonneau on 2003/01/15 10:33:54
I had thought about it at first, but I think it's a trick that might fall on
side effects. The problem is that Pliant parser is folding some parts on the
fly: I mean it does not first parse the program to a list of items, then fold
according to '(' '{' and others, but rather partialy folds on the fly while
parsing, so deciding what the last parsed token was might proove to be unreliable
because it could be a folding related token that was not recorded.
Message posted by maybe Gord Eagle on 2003/01/16 02:24:29
Okay, I'll watch to see if there are problems.
Message posted by pom on 2003/01/16 10:34:58
I've posted what I did some time ago for a C parser in the patch forum (Old C parser).

Hope it might help.

Message posted by maybe Gord Eagle on 2003/01/16 19:03:45
Thanks for the tip, pom.  The C preprocessor is significantly
simpler than full C syntax, so I'm trying it first.  Your
work will probably be helpful if somebody ever tries to glue
together the cpp and C compiler.