Want to make creations as awesome as this one?

Transcript

Lenguaje y Automnatas 2

1.3 Comprobaciones de tipos en expresiones.

Los términos l-value y r-value se refieren a los valores que son apropiados en los lados izquierdo y derecho de una asignación, respectivamenteLa comprobación estática debe asegurar que el lado izquierdo de una asignación denote a un l-value. Un identificador como i tiene un l-value, al igual que un acceso a un arreglo como a

L-value y R-value

Ahora consideraremos algunas comprobaciones estáticas simples que pueden realizarse durante la construcción de un árbol sintáctico para un programa fuente. Hay una diferencia entre el significado de los identificadores a la izquierda y el lado derecho de una asignación.

Las reglas de comprobación de tipos siguen la estructura operador/operando de la sintaxis abstracta. Suponga que el operador rel representa a los operadores relacionales como <=.

Comprobación de tipos

La comprobación de tipos asegura que el tipo de una construcción coincida con lo que espera su contexto. Por ejemplo, en la siguiente instrucción if:if (expr) instr

Por ejemplo, sabemos que el + en z = x + y es concatenación si sabemos que cualquiera de las variables x, y oz es de tipo cadena

El operador + en Java representa la suma cuando se aplica a enteros; significa concatenación cuando se aplica a cadenas

Una coerción ocurre cuando el tipo de un operando se convierte en forma automática al tipo esperado por el operador

Utilizando el atributo tipo para el tipo de una ex- presión, dejemos que E consista de rel aplicado a E1 y E2

Una vez que se construyen los árboles de sintaxis, se puede realizar un proceso más detallado de análisis y síntesis mediante la evaluación de los atributos, y la ejecución de fragmentos de código en los nodos del árbol. Para ilustrar las posibilidades, vamos a recorrer árboles sin- tácticos para generar código de tres direcciones