grammatica-users
[Top][All Lists]
Advanced

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

Re: [Grammatica-users] inherent ambiguity issue


From: Per Cederberg
Subject: Re: [Grammatica-users] inherent ambiguity issue
Date: Wed, 1 Dec 2010 20:27:06 +0100

The easiest approach would be to violate the grammar a bit, by changing:

Factor = Atom
                   | "(" Expression ")" ;

ConditionTerm = ConditionAtom
                       | "(" Condition ")" ;

Into this:

Factor = Atom
                   | "(" Condition ")" ;

ConditionTerm = ConditionAtom ;

And add semantic checks in the analyzer to look for expressions
containing conditionals.

Cheers,

/Per

On Sun, Nov 28, 2010 at 18:45, Ram Marzin <address@hidden> wrote:
>
> Hello,
> My name is Ram and I use grammatica SW as a part of my acadmic project in
> the university.
> I use grammatica to help me develop c parser (an important part of my
> project).
>
> I get an inherent ambiguity error which I cannot solve,
> The code is:
> /* Expression */
> Expression = Term [ExpressionRest] ;
> ExpressionRest = "+" Expression
>                          | "-" Expression ;
> Term = Factor [TermRest] ;
> TermRest = "*" Term
>                    | "/" Term
>                    | "%" Term ;
> Factor = Atom
>                    | "(" Expression ")" ;
> Atom = Number
>                    | STRING_DATA
>                    | VARIABLE_NAME
>                    | FunctionCall
>                    | Casting;
>
> Number = INT_NUMBER | FLOAT_NUMBER;
> /* Condition Statement */
> Condition = ConditionTerm [ConditionRest] ;
> ConditionRest = AND Condition
>                        | OR Condition ;
> ConditionTerm = ConditionAtom
>                        | "(" Condition ")" ;
> ConditionAtom = Value ConditionOperator Value ;
> ConditionOperator = "==" | "!=" | ">" | "<" | "<=" | ">=";
> Value = Expression;
>
> The error is:
> Error: in pt.grammar: lines 163-164:
>     inherent ambiguity in production 'ConditionTerm' starting with
>     token "("
> ConditionTerm = ConditionAtom
>                            | "(" Condition ")" ;
>
> I understand why it happens, there is unlimit look ahead option but how
> can I solve it ?
>
> Thanks,
> Ram.
>
> _______________________________________________
> Grammatica-users mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/grammatica-users
>
>

reply via email to

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