help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: shift/reduce conflict with unary


From: Evan Lavelle
Subject: Re: shift/reduce conflict with unary
Date: Wed, 22 Aug 2007 14:59:09 +0100
User-agent: Thunderbird 2.0.0.6 (Windows/20070728)

cwcaceres wrote:
But I'm not trying to list. I'm trying to do the add operation. So the
expression "5 6 +4" wouldn't be valid. An example of a valid operation would
be "+5 + -6 - -2" which should have an output of 1. My grammar file
currently outputs the correct result.

I agree with trying to remove the conflict but I'm putting that on hold for
now since I can't think of how to remove it.

I'm writing this with the benefit of 10 minutes exposure to your problem, so I may well be wrong. However, I think you need to stop and think a bit more.

The expression "5 6 +4" *is* valid according to the grammar; try it. It may not be valid according to your intent, which is a rather different matter.

Read the debug output, and walk through a scan of "5 6 +4". After scanning '6', the parser has to decide whether the '+' marks the start of a new unary expression, or is an addition operator. If it's the former, then it has to reduce a summation expression; if the latter, it has to shift for the addition. That's your conflict. The default is to reduce, ie. to push onto the expression list, which I don't think is what you want.

You say that you're "not trying to list". But that's exactly what

expression_list
                : /* empty */
                | expression_list summation_expression
                ;

does; it parses a list of summation expressions. What is the intent of expression_list?

Evan







reply via email to

[Prev in Thread] Current Thread [Next in Thread]