Pok-11-wyk-Slajd29
Z Studia Informatyczne
Gramatyka niejednoznaczna – unarny minus(2)
Oczywiste jest więc, że należy odpowiednio podnieść priorytet instrukcji E –> ‘-’ E. Nie można tego efektu osiągnąć podnosząc priorytet operatora ‘-’, bo przy okazji priorytet produkcji E –> E ‘-’ E stałby się wyższy niż operatorów multiplikatywnych.
W YACCu przewidziano rozwiązanie dla tego typu problemów – można arbitralnie sterować priorytetem produkcji za pomocą słowa kluczowego % prec . Aby naprawić działanie kalkulatora musimy więc:
- zdefiniować pomocniczy token, np.:%token UMINUSo odpowiednio wysokim priorytecie
- przypisać priorytet tokenu UMINUS do produkcji E –> ‘-’ E:E : ‘-’ E %prec UMINUS {$$=-$2;}