Cuando el que genera el código para las expresiones aritméticas, el recopilador tiene que decidir a cuál es la mejor manera de traducir la expresión en términos de número de instrucciones usadas así como el número de registros necesarios para evaluar cierta sub-estructura (especialmente si es libre los registros son escasos). El algoritmo supuesto de Sethi-Ullman del (también conocido como enumeración de Sethi-Ullman del ) satisface la característica de producir el código que necesita el menos número de instrucciones posibles así como el menos número de referencias del almacenaje (debajo de la asunción que a lo más el Commutativity y el Associativity se aplican a los operadores usados, solamente del no hace asimiento). Observar por favor que el algoritmo tiene éxito también si ni el Commutativity ni el asimiento de Associativity para las expresiones usadas, y por lo tanto las transformaciones aritméticas no puede ser aplicado.
el árbol de abstract syntax en
= /\ a * /\ /\ + + /\/\ b c d 3
Para continuar con el algoritmo, necesitamos examinar solamente el , es decir tenemos que mirar solamente la sub-estructura derecha de la asignación “=”:
* /\ /\ + + /\/\ b c d 3
Ahora comenzamos a atravesar el árbol (en preorder para ahora), asignando el número de registros necesarios para evaluar cada sub-estructura (nota que el summand pasado en el es un constante):
2 del * /\ /\ 1 del 2 + de + /\/\ 0 del 1 3 del 1 d del c del 1 del b De este árbol puede ser visto que necesitamos 2 registros computar la sub-estructura izquierda del “*”, pero solamente 1 registro para computar la sub-estructura derecha. Por lo tanto comenzaremos a emitir el código para la sub-estructura izquierda primero, porque puede ser que funcionemos en la situación que hacemos solamente 2 registros dejar para computar la expresión entera. Si ahora computáramos la sub-estructura derecha primero (que necesita solamente 1 registro), entonces necesitaríamos un registro celebrar el resultado de la sub-estructura derecha mientras que computaban la sub-estructura izquierda (que todavía necesitaría 2 registros), por lo tanto necesitando 3 registros concurrentemente. La computación de la sub-estructura izquierda primero necesita 2 registros, pero el resultado se puede almacenar en 1, y puesto que la sub-estructura derecha necesita solamente 1 registro computar, la evaluación de la expresión puede hacer con solamente 2 registros dejados. Algoritmo avanzado de Sethi-Ullman
En una versión avanzada del algoritmo de Sethi-Ullman del, las expresiones aritméticas primero se transforman, explotando las características algebraicas de los operadores usados.
Random links: Parque de estado del Berlín-Ichthyosaur | Vishishtadvaita | Mikołaj Mielecki | El huevo de la serpiente (película) | Lista de deidades de Greyhawk