Removing conflicts of LR(1) parsing tables S' -&gt; S $

S -&gt; I ; S
S -&gt; return E ; S
S -&gt; return I ; S
S -&gt; ''

I -&gt; id
I -&gt; id = E
I -&gt; id = I

E -&gt; C &amp;&amp; C
E -&gt; C || C
E -&gt; ! C
E -&gt; C

C -&gt; A &gt; A
C -&gt; A &lt; A
C -&gt; A &gt;= A
C -&gt; A &lt;= A
C -&gt; A == A
C -&gt; A

A -&gt; T A'
A'-&gt; + T A'
A'-&gt; - T A'
A'-&gt;''

T -&gt; F T'
T'-&gt; * F T'
T'-&gt; / F T'
T'-&gt;''

F -&gt; id
F -&gt; const
F -&gt; ( A )


This is supposed to be a LR(1) grammar, but its LR(1) parsing table have a conflict on the ; symbol column: it has both a shift and a reduction transition. How this conflict can be removed?
The ambiguity comes from

I -&gt; id


because that rule means that both I ans E derive id, which in turn means that return id could be a derivation of either: 

S -&gt; return E ; S


or

S -&gt; return I ; S


Also, id1 = id2 could be derived from:

I -&gt; id = E


or

I -&gt; id = I


It doesn't make sense for id to be a statement if id + 3 is not; I'd just drop the I -&gt; id production.