From a6eab9d9e0c0e069fe741a2ec5597851e715daa2 Mon Sep 17 00:00:00 2001 From: David Beazley Date: Fri, 7 Oct 2016 12:10:18 -0500 Subject: [PATCH] Fixed precedence shift/reduce bug. --- sly/yacc.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sly/yacc.py b/sly/yacc.py index 153747b..171a02b 100644 --- a/sly/yacc.py +++ b/sly/yacc.py @@ -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