I think the error message appears
because the second alternative for "ConditionTerm" start with
an "(", and the first derives (via "Value") a string
that can also start with "(" because of the second alternative
in "Factor".
One solution is to allow those parentheses
in only one place. Here's an example (grammar for a different language):
It seems you are trying with your
grammar to force the condition of an if(...) to be a comparison. The above
approach would allow anything derivable from "_expression_" to
appear there, so you would have to check during semantic analysis that
your restriction is adhered to. On the other hand, if I'm not mistaken
standard C allows if(1)...
Regards
Oliver Gramberg
Ram Marzin <address@hidden> Sent by: address@hidden
28.11.2010 18:45
Please respond to
address@hidden
To
address@hidden
cc
Subject
[Grammatica-users] inherent ambiguity
issue
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 ?