I've been at this for a good two hours now but I can't get the compiler to stop giving me this warning.
Warning: production type_anno -> is never reduced.
Below is my parser.mly code.
(*Optional type annotation*)
type_anno:
| {None}
| COL;name = ID {Some name}
;
statement:
|(*SEND stmt*) SEND; chn = ID; O_TBRACE; var1 = ID; COMMA; var2 = ID; C_TBRACE {Send(chn,var1,var2)}
|(*RECV stmt*) O_TBRACE; var1 = ID; COMMA; var2=ID; C_TBRACE; ARW; RECV; chn = ID; S_COL ; stmt = statement {Recv(var1,var2,chn, stmt)}
|(*SELECT stmt*) chn=ID; DOT; lbl=ID; O_TBRACE; l1 = ID; C_TBRACE; S_COL; stmt = statement {Select(chn, lbl, l1, stmt)}
|(*CASE stmt*) CASE; chn =ID; O_PAREN; branches = branch_statement C_PAREN {Case(chn,branches)}
|(*CAST stmt*) CAST; chn = ID;O_TBRACE;l1=ID;C_TBRACE; {Cast(chn,l1)}
|(*SHIFT stmt*) l1 = ID ; ARW; SHIFT; chn=ID; S_COL;stmt=statement {Shift(chn, l1, stmt)}
|(*ACCEPT stmt*) l1 = ID ; ARW; ACC; chn=ID; S_COL;stmt=statement {Accept(chn, l1, stmt)}
|(*ACQUIRE stmt*) l1 = ID ; ARW; ACQ; chn=ID; S_COL;stmt=statement {Acquire(chn, l1, stmt)}
|(*DETACH stmt*) DET; chn=ID; O_TBRACE; l1=ID;C_TBRACE;{Detach(chn,l1)}
|(*RELEASE stmt*) l1 = ID ; ARW; REL; chn=ID; S_COL;stmt=statement {Release(chn, l1, stmt)}
|(*CLOSE stmt*) CLOSE; chn=ID;{Close(chn)}
|(*WAIT stmt*) WAIT; chn=ID;stmt=statement;{Wait(chn,stmt)}
|(*SPAWN stmt*) SPAWN; ref =ID; ARW; fn_id =ID ;inp = params; S_COL; stmt=statement {Spawn(ref,fn_id,inp,stmt)}
|(*NEW stmt*) chn =ID;anno=type_anno; ARW; NEW; stmt =statement ; S_COL ;stmt0 = statement {match anno with Some a -> NewA(chn,a,stmt, stmt0) | None -> New(chn,stmt,stmt0)}
|(*OUTPUT stmt*) PRINT; O_PAREN;var= ID; C_PAREN {Out(var)}
|(*FWD stmt*) FWD; O_PAREN; chn1=ID; COMMA;chn2 = ID; C_PAREN {Fwd(chn1,chn2)}
|(*SPL stmt*) O_TBRACE; var1 = ID; COMMA; var2=ID; C_TBRACE; ARW; SPL; chn = ID; S_COL ; stmt = statement {Split(var1,var2,chn, stmt)}
The more important part of the warning emitted by menhir is that your grammar has a shift/reduce conflict that was resolved in favor of the shift.
Due to this conflict, the production
can never be reduced since it is overridden by all productions that accepts
ARW
after anID
in thestatement
ruleYou can check the issue in
menhir
interpret mode that your parser as written rejectsThe smallest fix for the shift/reduce conflict is to make the rule
type_anno
an inline rule: