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: Oliver Gramberg
Subject: Re: [Grammatica-users] inherent ambiguity issue
Date: Mon, 29 Nov 2010 10:29:47 +0100


Hi Ram,

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):

---------------------------------------------------------------------------------
_expression_ = xor_expression {'OR' xor_expression} ;
xor_expression = and_expression {'XOR' and_expression} ;
and_expression = comparison {('&' | 'AND') comparison} ;
comparison = equ_expression {('=' | '<>') equ_expression} ;
equ_expression = add_expression {comparison_operator add_expression} ;
comparison_operator = '<'
        | '>'
        | '<='
        | '>=' ;
add_expression = term {add_operator term} ;
add_operator = '+'
        | '-' ;
term = unary_expression {multiply_operator unary_expression} ;
multiply_operator = '*'
        | '/'
        | 'MOD' ;
unary_expression = {unary_operator} primary_expression ;
unary_operator = '-'
        | '+'
        | 'NOT' ;
primary_expression = constant
        | variable
        | '(' _expression_ ')'
              ...
               ;
---------------------------------------------------------------------------------

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 ?
 
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]