windows-nt/Source/XPSP1/NT/com/rpc/tools/yacc/yprcft.c
2020-09-26 16:20:57 +08:00

43 lines
961 B
C

// Copyright (c) 1993-1999 Microsoft Corporation
#include "y3.h"
void
precftn(SSIZE_T r,int t,int s)
{
/* decide a shift/reduce conflict by precedence.*/
/* r is a rule number, t a token number */
/* the conflict is in state s */
/* temp1[t] is changed to reflect the action */
int lt, action;
SSIZE_T lp;
lp = levprd[r];
lt = toklev[t];
if( PLEVEL(lt) == 0 || PLEVEL(lp) == 0 )
{
/* conflict */
if( foutput != NULL ) fprintf( foutput, "\n%d: shift/reduce conflict (shift %d, red'n %d) on %s",
s, temp1[t], r, symnam(t) );
++zzsrconf;
return;
}
if( PLEVEL(lt) == PLEVEL(lp) ) action = ASSOC(lt);
else if( PLEVEL(lt) > PLEVEL(lp) ) action = RASC; /* shift */
else action = LASC; /* reduce */
switch( action )
{
case BASC: /* error action */
temp1[t] = ERRCODE;
return;
case LASC: /* reduce */
temp1[t] = -r;
return;
}
}