documentación
documentación
documentación
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
como sigue:<br />
a = ( b = ( ( (c*d) - e) - (f*g) ) )<br />
para lograr la precedencia correcta de los operadores. Cuando se usa este mecanismo, se debe<br />
dar en general, a los operadores unarios, una precedencia. A veces un operador binario y un<br />
operador unario tienen la misma representación simbólica pero distinta precedencia. Un ejemplo<br />
es el menos unario y el menos binario (-).<br />
Al menos unario se le debe dar la misma precedencia que a la multiplicación, o aún más alta,<br />
mientras que el menos binario tiene una precedencia más baja que la multiplicación. la palabra<br />
clave %prec cambia el nivel de precedencia asociado con una regla particular. La palabra clave<br />
%prec aparece inmediatamente después del cuerpo de la regla, antes de la acción o punto y<br />
coma de cierre, y es seguido por un nombre de token o literal. Esto hace que la precedencia de<br />
la regla se haga igual a la del nombre de token o literal que se indica.<br />
Por ejemplo, las reglas:<br />
%left ´+´ ´-´<br />
%left ´*´ ´/´<br />
%%<br />
expr : expr ´+´ expr<br />
| expr ´-´ expr<br />
| expr ´*´ expr<br />
| expr ´/´ expr<br />
| ´-´ expr %prec ´*´<br />
| NAME<br />
;<br />
podrían ser usadas para dar al menos unario la misma precedencia que la multiplicación.<br />
Un token declarado por %left, %right, y %nonassoc no necesitan ser declaradas por<br />
%token.<br />
Las precedencias y asociatividades son usadas por Yacc para resolver conflictos de<br />
parsing. Esto dan lugar a las siguientes reglas de desambiguación:<br />
1. Se registran las precedencias y asociatividades para aquellos tokens y literales que las tengan<br />
2. Una precedencia y asociatividad es asociada con cada regla de la gramática. Esta será la<br />
precedencia y asociatividad del último token o literal en el cuerpo de la regla. Si se usa la<br />
construcción %prec, esto sobreescribe el defecto. Algunas reglas de la gramática pueden no<br />
tener precedencia y asociatividad asociadas con ellas.<br />
3. Cuando hay un conflicto reduce-reduce o un conflicto shift-reduce y, ni el símbolo de<br />
entrada ni la regla tienen precedencia y asociatividad, entonces se usan las dos reglas de<br />
desambiguación descriptas anteriormente, y los conflictos son reportados.<br />
4. Si hay un conflicto shift-reduce, y tanto la regla de la gramática como el carácter de entrada<br />
tienen precedencia y asociatividad asociadas con ellos, el conflicto se resuelve en favor de la<br />
acción (shift o reduce) asociada con la precedencia más alta. Si las precedencias son<br />
iguales, se usa la asociatividad. La asociatividad a izquierda implica reduce; la asociatividad<br />
a derecha implica shift; la no asociatividad implica error.<br />
18