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 <ra...@bgu.ac.il> 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 > Grammatica-users@nongnu.org > http://lists.nongnu.org/mailman/listinfo/grammatica-users > >
_______________________________________________ Grammatica-users mailing list Grammatica-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/grammatica-users