27.08.2013 Views

documentación

documentación

documentación

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!