4. Compiladores 2021B Benjamín Joaquín Martínez
6.6 Considere la gramática siguiente para árboles binarios enteros ( en forma linealizada):
árbol ( número árbol árbol ) | nil
Escriba una gramática con atributos para verificar que está ordenado un árbol binario, es decir,
que los valores de los números del primer subárbol sean <= que el valor del número actual y los
valores de todos los números del segundo subárbol sean >= al valor del número actual. Por
ejemplo (2 (1 nil nil ) (3 nil nil)) está ordenado, pero (1 (2 nil nil ) (3 nil nil) ) no lo está.
Regla gramatical Reglas semánticas
arbol1 ( número árbol2 árbol3 ) arbol1.val = numero.val
if arbol2.val = null and arbol3.val= null then arbol1.balanceado = true
else
if numero.val >= arbol2.val
and numero.val <= arbol3.val
then
arbol1.balanceado = true else arbol1.balanceado= false
if arbol1.balanceado= false then error.
árbol nil nil.val=null
árbol.val = nil.val
arbol
( numero arbol arbol )
2
( numero árbol árbol )
arbol.val=null arbol.val=nulll
( numero arbol arbol )
arbol.val=null arbol.val=null
1 nil nil
3 nil nil
nil.val= null
nil.val= null
nil.val=null
nil.val=null
arbol.val=3
arbol.balancedo=true
arbol.val=1
arbol.balancedo=true
numero.val=1 numero.val=3
numero.val=2
arbol.balanceado = true