Fixed precedence shift/reduce bug.

This commit is contained in:
David Beazley 2016-10-07 12:10:18 -05:00
parent e4fedf022f
commit a6eab9d9e0

View File

@ -1390,8 +1390,13 @@ class LRTable(object):
# Need to decide on shift or reduce here
# By default we favor shifting. Need to add
# some precedence rules here.
sprec, slevel = Productions[st_actionp[a].number].prec
rprec, rlevel = Precedence.get(a, ('right', 0))
# Shift precedence comes from the token
sprec, slevel = Precedence.get(a, ('right', 0))
# Reduce precedence comes from rule being reduced (p)
rprec, rlevel = Productions[p.number].prec
if (slevel < rlevel) or ((slevel == rlevel) and (rprec == 'left')):
# We really need to reduce here.
st_action[a] = -p.number