Thursday, October 3, 2013

Operator- Precedence With Parser Problem


Operator Precedence (Order of Operation):

Precedence
Operator
Description
Associativity
1
::
Scope resolution
Left-to-right
2
++   --
Suffix/postfix increment and decrement
()
Function call
[]
Array subscripting
.
Element selection by reference
−>
Element selection through pointer
3
++   --
Prefix increment and decrement
Right-to-left
+  
Unary plus and minus
!   ~
Logical NOT and bitwise NOT
(type)
Type cast
*
Indirection (dereference)
&
Address-of
sizeof
Size-of
new, new[]
Dynamic memory allocation
delete, delete[]
Dynamic memory reallocation
4
.*   ->*
Pointer to member
Left-to-right
5
*   /   %
Multiplication, division, and remainder
6
+  
Addition and subtraction
7
<<   >>
Bitwise left shift and right shift
8
<   <=
For relational operators < and ≤ respectively
>   >=
For relational operators > and ≥ respectively
9
==   !=
For relational = and ≠ respectively
10
&
Bitwise AND
11
^
Bitwise XOR (exclusive or)
12
|
Bitwise OR (inclusive or)
13
&&
Logical AND
14
||
Logical OR
15
?:
Ternary conditional
Right-to-left
=
Direct assignment (provided by default for C++ classes)
+=   −=
Assignment by sum and difference
*=   /=   %=
Assignment by product, quotient, and remainder
<<=   >>=
Assignment by bitwise left shift and right shift
&=   ^=   |=
Assignment by bitwise AND, XOR, and OR
16
throw
Throw operator (for exceptions)
17
,
Comma
Left-to-right



Operator- Precedence Parser Problem:

Grammar:

List              list + list
          |         list – list
          |         digit

digit            0|1|2|-------------|9

Problem:      9-5+4

Proposed Solution (1):
                                     
                                    
                                               

Proposed Solution (2):


                                      



Answer:   Solution 2 is correct. As the operators of given problem are not unary, their associativity is left to right. So, plus (+) operator precedence is high than minus (-) operator. Again, operator precedence parser in a bottom-up parser so minus (-) operator operation will be done before plus (+) operator operation.






              


References:
1.     http://en.cppreference.com/w/cpp/language/operator_precedence
2.     http://en.wikipedia.org/wiki/Operator-precedence_parser

No comments:

Post a Comment