Bison 解析器-移位/减少冲突
我的解析器有一个问题,这让我发疯,我想知道你们是否能帮助我 我有一套规则:Bison 解析器-移位/减少冲突,bison,yacc,parser-generator,Bison,Yacc,Parser Generator,我的解析器有一个问题,这让我发疯,我想知道你们是否能帮助我 我有一套规则: exp: exp OP exp | exp OSQUAREPAR exp CSQUAREPAR | exp DOT LENGTH | exp DOT ID OPAR expList CPAR | READERS DOT INTREADER DOT READINT OPAR CPAR | DIGIT |
exp: exp OP exp
| exp OSQUAREPAR exp CSQUAREPAR
| exp DOT LENGTH
| exp DOT ID OPAR expList CPAR
| READERS DOT INTREADER DOT READINT OPAR CPAR
| DIGIT
| TRUE
| FALSE
| ID
| THIS
| NEW INT OSQUAREPAR exp CSQUAREPAR
| NEW ID OPAR CPAR
| EXCL exp
| OPAR exp CPAR
;
以及以下冲突:
规则28 exp->exp OP exp
规则29 exp->exp OSQUEREPAR exp CSQUEREPAR
规则30 exp->exp点长度
规则31 exp->exp DOT ID OPAR expList CPAR
规则32 exp->读卡器点输入读卡器点输入OPAR CPAR
规则33经验->数字
规则34 exp->TRUE
规则35 exp->FALSE
规则36 exp->ID
规则37 exp->这个
规则38 exp->NEW INT-OSQUAREPAR exp-CSQUAREPAR
规则39 exp->新ID OPAR CPAR
规则40 exp->EXC exp
规则41 exp->OPAR exp CPAR
state 94
exp -> EXCL exp . (rule 37)
exp2 -> exp . OP exp (rule 39)
exp2 -> exp . OSQUAREPAR exp CSQUAREPAR (rule 40)
exp2 -> exp . DOT LENGTH (rule 41)
exp2 -> exp . DOT ID OPAR expList CPAR (rule 42)
OSQUAREPAR shift, and go to state 97
DOT shift, and go to state 98
OP shift, and go to state 99
OSQUAREPAR [reduce using rule 37 (exp)]
DOT [reduce using rule 37 (exp)]
OP [reduce using rule 37 (exp)]
$default reduce using rule 37 (exp)
有没有办法解决这个问题?我已经检查了其他类似的问题,甚至试着给EXCL添加一个优先级,就像其中一个答案所示,但无法解决这个问题
谢谢。一个可能的方法示例(无冲突):
一个可能的方法示例(无冲突):
一个可能的方法示例(无冲突):
一个可能的方法示例(无冲突):
%token DIGIT FALSE ID INT INTREADER LENGTH NEW READERS READINT THIS TRUE
%left '+' '-'
%left '*' '/'
%left UNARY
%%
exp: unary
| exp '+' exp
| exp '-' exp
| exp '*' exp
| exp '/' exp
;
expList: exp
| expList ',' exp
;
operand: '(' exp ')'
| DIGIT
| TRUE
| FALSE
| ID
| THIS
| READERS '.' INTREADER '.' READINT '(' ')'
| NEW INT '[' exp ']'
| NEW ID '(' ')'
;
primary: operand
| primary '[' exp ']'
| primary '.' LENGTH
| primary '.' ID '(' expList ')'
;
unary: primary
| '!' unary
| '+' unary
| '-' unary %prec UNARY
;