1. Área de Autómatas y Lenguajes
Traducción Dirigida por
la Sintáxis
Diseño y Construcción de Compiladores
2008
2. El significado de una sentencia de entrada está
relacionado con su estructura sintáctica.
Encierran aquellos formalismos utilizados para
especificar las traducciones para las construcciones de
los lenguajes de programación guiadas por una GLC.
◦ Se Asocian Atributos a los símbolos de la gramática.
◦ Se computan los valores de atributos por reglas semánticas
asociadas a las producciones de la gramática.
Traducción Dirigida por la Sintáxis
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 2
3. La evaluación de las reglas semánticas puede:
◦ Generar Código.
◦ Insertar información en la Tabla de Símbolos.
◦ Relizar el Chequeo Semántico.
◦ Dar mensajes de error
◦ Etc.
Traducción Dirigida por la Sintáxis
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 3
4. Existen dos notaciones para asociar información a
las reglas semánticas:
Definiciones Dirigidas por la Sintáxis: es una
especificación de alto nivel que oculta detalles de
implementación.
Esquemas de traducción: están más orientados a
la implementación porque indican el orden en el
cual se evalúan las reglas semánticas.
Traducción Dirigida por la Sintáxis
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 4
5. Gramáticas de Atributos
Definiciones Dirigidas por la Sintáxis.
◦ Definiciones S-Atribuidas
◦ Definiciones L-Atribuidas
◦ Implementación de las Definiciones Dirigidas por la Sintáxis:
Grafo de Dependencias
Definiciones S-Atribuidas
Definiciones L-Atribuidas
Esquemas de Traduccion
Índice
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 5
7. Una Gramática de Atributos define la sintaxis y la
semántica de un lenguaje.
También define la información que se necesita
almacenar en el Árbol de Sintaxis Abstracta para
llevar a cabo el Análisis Semántico y la Generación
de Código.
Dicha información se almacena como atributos de
los nodos del Árbol de Sintáxis Abstracta.
Gramáticas de Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 7
8. Sea G=<N,T,P,S> una Gramática Libre de Contexto.
G es una Gramática de Atributos (GA) si:
Cada X ∈ N ∪ T está asociado con dos conjuntos disjuntos, H(X), el
conjunto de los atributos hereddos y S(X) el conjunto de los atributos
sintetizados. X ∈ N ∪ T.
El conjunto de atributos de G es Atr= H ∪ S. Donde H= ∪X ∈ N H(X), S= ∪X ∈ N ∪ T
S(X).
X0 →X1X2….Xm ∈ P y aj ∈ Atr(Xi), 0 ≤ i ≤ m, entonces Xi.aj es el atributo aj de
Xi y Dxi,aj es el dominio de valores de Xi.aj.
Una regla semántica asociada con X0 →X1X2….Xm ∈ P es de la forma
Xi.aj=f(b1j1,…..,bkjk), 0 ≤ jl ≤ m, 0 ≤ i ≤ m, donde cada bljl ∈ Atr(Xjl).
Gramáticas de Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 8
9. Atributo Sintetizado: Un atributo a es sintetizado
si, dada una regla de una gramática A→X1X2….Xn
la ecuación asociada con a es de la forma:
A.a=f(X1.a1,….X1.ak,….,Xn.a1,…Xn.ak).
En otras palabras a es un atributo sintetizado si su
valor depende de los valores de atributos de sus
hijos.
X0
X1 Xi Xn
Atributos Sintetizados
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 9
10. Atributo Heredado: Un atributo que no es
sintetizado es un atributo heredado. En otras
palabras un atributo heredado es aquel cuyo
valor de atributo está definido en términos de los
valores de atributos del padre o de sus
hermanos.
X0
X1 Xi Xn
Atributos Heredados
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 10
11. Dada la siguiente gramática G1:
a. NRO→ DIG | NRO DIG
b. DIG →0|1|2|3|4|5|6|7|8|9
Calcular el valor de los números generados por G
usando un atributo sintetizado val.
Ejemplos de Gramáticas de
Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 11
12. La siguiente gramática expresa declaraciones en
una sintaxis similar a la usada por el lenguaje C:
G2:
a. DECL → TYPE VAR-LIST
b. TYPE → INT | FLOAT
c. VAR-LIST → ID, VAR-LIST | ID
Usando un atributo heredado determine el tipo de
los identificadores
Ejemplos de Gramáticas de
Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 12
13. Ejercicio: La siguiente gramática permite expresar
números en decimal y octal:
G3:
a. BNRO→NRO B
b. B →O|D
c. NRO →NRO DIG | DIG
d. DIG → 0|1|2|3|4|5|6|7|8|9
Defina los atributos y reglas semánticas
necesarias para calcular el valor del número.
Ejemplos de Gramáticas de
Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 13
15. DDS: Son Gramáticas de Atributos en las cuales
no se especifica el orden de evaluación de las
reglas semánticas.
Las gramáticas de atributos G1 y G2 son
ejemplos de definiciones dirigidas por la sintaxis.
DDS
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 15
16. Cada producción A→α está asociada con un
conjunto de reglas semánticas de la foma:
b=f(c1,c2,...,ck)
donde f es una función y
b es un atributo Sintetizado de A y c1,c2,...,ck son
atributos de los símbolos en A→α, o
b es un atributo Heredado de un símbolo de la
gramática en α, y c1,c2,...,ck son atributos de los
símbolos de la gramática en α o atributos de A.
DDS-Formato
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 16
17. Se asume que los símbolos terminales tienen
atributos sintetizados proporcionados por el
Analizador Lexicográfico.
Las llamadas a procedimientos definen valores
de atributos sintetizados ficticios (Dummy) del
no terminal del lado izquierdo de la producción.
DDS
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 17
18. Si en una DDS el orden de evaluación de los
atributos no esta especificado entonces como
se realiza la evaluación de los atributos?
Respuesta:
◦ Utilizando un grafo de dependencias.
DDS-Evaluación de Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 18
19. La implementación de una DDS consiste
en encontrar un orden de evaluación de
los atributos.
◦ Cada atributo tiene que estar disponible cuando
la computación se realiza.
DDS-Evaluación de Atributos
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 19
20. Un Grafo de Dependencia muestra las interdependencias
entre los atributos de varios nodos en un Árbol de Parse.
◦ Hay un nodo para cada atributo.
◦ Si un atributo b depende de un atributo c hay un arco desde el nodo
c al nodo b.
Regla de Dependencia: Si un atributo b, en el nodo n, en un
árbol de derivación depende del atributo c luego la regla
semántica que define a b se debe evaluar después de la
regla semántica que define a c.
Lainterdependencia entre atributos heredados y sintetizados
se puede dibujar como un grafo dirigido. Este grafo se
conoce con el nombre de Grafo de Dependencias.
DDS-Grafo de Dependencias
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 20
22. Gramática G3
N Prod. R. Sem.
1 NRO1→ NRO2 DIG {NRO1.val=NRO2.val+DIG.val}
2 NRO→ DIG {NRO.val=DIG.val}
3 DIG →0 {DIG.val=0}
4 ……. ……
Grafo de Dependencias para la Producción 1
NRO1.val
DIG.val
NRO2.val
Grafo de Dependendia - Ejemplo
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 22
23. Grafo de Dependencias para la Cadena 345
NRO.val
NRO.val DIG.val
NRO.val DIG.val
DIG.val
Grafo de Dependencias
Árbol de Parse
Grafo de Dependendia - Ejemplo
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 23
24. Construir el árbol de parsing para la entrada x.
Construir el Grafo de Dependencias.
Construir el Ordenamiento Topológico.
Evaluar las reglas semánticas en el orden
indicado por el Ordenamiento Topológico.
DDS: Grafo de Dependencias-
Orden de Evaluación
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 24
25. Ejercicio: Construir Grafos de Dependencias
para las Gramáticas G1 y G2 para diferentes
cadenas aceptadas por las mismas.
Grafo de Dependendia - Ejemplo
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 25
26. Se utiliza un Ordenamiento Topológico
Algoritmo Destructivo (Sólo para propósito pedagógico).
Algoritmo: Ordenamiento Topológico(G,T)
Entrada: G grafo de dependencias.
Salida: T el ordenamiento topológico de G.
Open el conjunto de nodos a tratar.
Open←minimales(G);
Mientras Open≠∅ Hacer
Sea x ∈ Open
Eliminar x de G
Insertar x en T
Open ← Open – {x}
Open ← minimales(G)
Fin Mientras
Retornar T
Grafo de Dependendia – Orden de Evaluación
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 26
27. b g b g g g
a
c c c c
f f f f
d e d e d e e
a a b a a d
Completar el
ejemplo!
Grafo de Dependendia – Orden
de Evaluación
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 27
28. De el orden de evaluación del siguiente grafo de dependencias
NRO.val
NRO.val DIG.val
NRO.val DIG.val
DIG.val
Grafo de Dependendia – Orden
de Evaluación
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 28
29. Ejercicio: Elaborar un algoritmo que permita
extraer un Ordenamiento Topológico sin destruir
el grafo subyacente.
Ejercicio: Elaborar un algoritmo no destructivo
que permita extraer un Ordenamiento Topológico
Inverso.
Ejercicios
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 29
30. Problemas con el método:
◦ Falla si el grafo de dependencias tiene un ciclo.
◦ Consume tiempo debido a la construcción del grafo
de dependencias.
Solución:
◦ Diseñar la DDS de tal forma que los atributos se
puedan evaluar en un orden fijo evitando la
construcción del grafo de dependencias (este método
es el utilizado por muchos compiladores).
Grafo de Dependencias-Orden
de Evaluación
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 30
31. En las DDS no circulares se puede establecer
un orden de evaluación fijo en tiempo de
construcción del compilador.
Hay dos clases importantes de definiciones no
circulares:
◦ S-Atribuidas
◦ L-Atribuidas
DDS
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 31
32. DDS S-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 32
33. DDS S-Atribuida: Es una DDS que sólo utiliza
atributos sintetizados.
Esta clase de DDS es interesante porque los
valores de atributo pueden ser obtenidos a
través de un barrido Post Orden del Árbol de
Parse.
DDS S-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 33
34. Ejercicio: Determine Cuáles de las GA
presentadas previamente son DDS S-Atribuidas?
DDS S-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 34
35. Losatributos sintetizados se pueden evaluar usando un
parser bottom-up cuando se analiza la cadena de
entrada evitando la construcción del grafo de
dependencias.
El parser mantiene los valores de los atributos
sintetizados en su pila.
Cuando se realiza una reducción A→α, el atributo para
A se calcula a partir de los atributos de α que se
encuentran en la pila.
De esta manera una DDS S-Atribuida se puede
implementar extendiendo la pila de un parser LR.
DDS S-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 35
36. • Se incorporan campos extras a la pila para mantener los
valores de los atributos sintetizados.
• Por ejemplo si se está trabajando con un solo atributo
sintetizado la pila tiene la siguiente forma
Estado Valor
Z Z.x
Y Y.x
X X.x
…… ……
• El tope de la pila se mantiene con un puntero top.
• Antes de que la reducción A→XYZ se realize, se calcula el
atributo sintetizado de A:
A.a=f(val[top],val[top-1],val[top-2])
DDS S-Atribuida Evaluación
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 36
37. Ejercicio: Utilice la gramática G3 para evaluar
la cadena 345 usando la aproximación
propuesta para las gramáticas S-Atribuidas.
Muestre el contenido de la pila.
DDS S-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 37
38. DDS L-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 38
39. Son útiles para expresar la dependencia de una
construcción en el contexto en el cual aparece.
A diferencia de los atributos sintetizados el
orden en el cual aparecen los atributos
heredados es importante.
Es siempre posible reescribir la DDS con sólo
atributos sintetizados. No obstante es más
natural usar atributos heredados y sintetizados.
DDS L-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 39
40. Definición: Una DDS es L-Atribuida si cada
atributo heredado de Xj, 1 ≤ j ≤ n, en el lado
derecho de una producción del tipo X 0→X1…Xj-
1Xj….Xn depende solo de:
Los atributos sintetizados de X1…Xj-1, a la
izquierda de Xj.
Los atributos heredados de X0.
DDS L-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 40
41. Importante:
◦ Toda definición S-Atribuida es L-Atribuida.
◦ Teorema: Los atributos heredados en DDS L-
Atribuidas se pueden computar por un recorrido Pre-
Orden del árbol de parse.
◦ Las definiciones L-Atribuidas cubren todas las
traducciones que se pueden realizar sin construir
explicitamente el árbol de parse.
DDS L-Atribuida
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 41
42. Las DDS L-Atribuidas son una clase de DDS
cuyos atributos siempre se pueden evaluar por
un recorrido del árbol de parse.
El procedimiento mezcla los recorridos Post
Orden (sintetizado) y Pre-Orden (heredado).
Evaluación de DDS L-Atribuidas
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 42
43. Algoritmo: L-Eval (n)
Entrada N: un nodo del árbol de parse anotado.
Salida: La evaluación de atributos
Comenzar
Para cada hijo m de n, desde izquierda a
derecha Hacer
Evaluar los atributos heredados de m;
L-Eval(m)
Fin Para
Evaluar los atributos sintetizados de n
Fin
Evaluación de DDS L-Atribuidas
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 43
45. Los esquemas de traducción están más orientados a
la implementación que las DDS porque indican el
orden de evaluación de las reglas semánticas.
Definición: Un ET es una gramática libre del
contexto que cumple con las siguientes condiciones:
• Los atributos están asociados con los símbolos de la
gramática.
• Las acciones semánticas están encerradas entre { y } y
están embebidas dentro del lado derecho de las
producciones.
Esquemas de Traducción
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 45
46. Los ET pueden tener atributos sintetizados y
heredados.
Las acciones semánticas son tratadas como
símbolos terminales
Los esquemas de traducción son útiles para
evaluar definiciones L-Atribuidas en tiempo de
parsing.
Esquemas de Traducción
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 46
47. N. G. L-Attr N. ET para G
1 D→T L 1 D→T{L.in=T.type} L
2 T→int 2 T→int {T.tipo=integer}
3 T→real 3 T→real {T.tipo=real}
4 L1→L2,id 4 L1→ {L1.in=L.in} L2,id{addtype(id.entry,L.in}
5 L→id 5 L→ id{addtype(id.entry, L.in}
Esquemas de Traducción
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 47
48. Ejercicio: Construir el Árbol de Parse para la
siguiente declaración:
Real id1, id2, id3.
Ejercicio: Evaluar el ET.
Esquemas de Traducción
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 48
49. 1erCaso: Atributos Sintetizados: se puede construir un
ET creando una acción semántica que es una
asignación y se ubica esta acción al final de la parte
derecha de la producción.
Producción Regla Semántica
1) T→E + T1 T.val= E.val + T1.val
2) NRO1→ NRO2 DIG NRO1=NRO2.val * 10 + DIG.val
3) DIG→0 DIG.val=0
ET Diseño
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 49
50. 2do Caso: Atributos heredados y sintetizados.
◦ Un Atributo heredado por un símbolo de la parte derecha de una
producción se debe calcular en una acción que se realice antes
de dicho símbolo.
Producción Producción con Acciones
X0→X1…Xj-1Xj…Xn X0→X1…Xj-1 {Xj.h}Xj…Xn
X0→X1…Xj-1Xj…Xn X0→X1…Xj-1Xj{Xj.h}…..Xn
D→T LID D →T{LID.t=T.tipo} LID
ET Diseño
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 50
51. 2do Caso: Atributos heredados y sintetizados.
◦ Una acción no debe referenciar a un atributo sintetizado de un
símbolo de la gramática que esté a la derecha de dicho símbolo.
Producción Producción con Acciones
X0→X1…Xj-1{Acción}Xj…Xn
Acción: no hace ref. a un atributo calculado a la derecha de Xj
ET Diseño
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 51
52. 2do Caso: Atributos heredados y sintetizados.
◦ Acciones que calculen atributos sintetizados para el símbolo no
terminal de la parte izquierda de una producción deben ser
ubicados al final de la parte derecha de la producción.
Producción Regla Semántica
1) T→E + T1 T.val= E.val + T1.val
2) NRO1→ NRO2 DIG NRO1=NRO2.val * 10 + DIG.val
3) DIG→0 DIG.val=0
ET Diseño
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 52
53. Entrada: Un esquema de traducción dirigido por la sintaxis con la
gramática subyacente LL(k) fuerte.
Salida: Código para un traductor dirigido por la sintaxis.
Método: La técnica propuesta es una modificación al método de
construcción de parsers descentes recursivos vistos anteriormente.
∀ A ∈ N, construir una función asociada pero teniendo un
parámetro formal para cada atributo heredado por A y que retorne
los valores de los atributos sintetizados de A. El cuerpo de la
función deberá contener una variable local para cada atributo de
cada símbolo de la gramática que aparezca en las producciones de
A.
ET Técnica de Construcción
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 53
54. Como sucede con el método clásico el código para el no terminal A decide
que producción usar basado en el lookahead.
El código asociado con cada producción hace lo siguiente, considerando
los tokens, los no teminales y acciones en la parte derecha de una
producción de izquierda a derecha:
Para el token x con atributo sintetizado x.val se salva su valor en la
variable local declarada para x.val. Luego, se llama al match del símbolo
y se obtiene el próximo token.
Para el no terminal B, se genera una asignación c:=B(b1,b2,...,bn)
donde b1,b2,...,bn son las variables para los atributos heredados de B y
c es la variable para el atributo sintetizado de B.
Para una acción, copiar el código en el parser, reemplazando cada
referencia a un atributo por la variable local para tal atributo.
ET Técnica de Construcción
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 54
55. Aplicaciones
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 55
56. Una aplicación científica o industrial se puede estudiar a
partir de las componentes estáticas que utilizan, por
ejemplo: Tipos de datos, Registros, Variables,
Constantes, Funciones, etc.
Los temás vistos en esta clase se pueden utilizar para
extraer esta información y dejarla disponible para que el
usuario tenga rápido acceso a ella en el código fuente
del programa.
En otras palabras se pueden usar las DDS o ET para
extraer la información antes mencionada desde el
código fuente.
Análisis Estático
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 56
57. Un visualizador de los elementos estáticos
de un sistema.
Análisis Estático
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 57
58. La información estática es importante. No obstante
conocer el comportamiento del programa puede ayudar
a la tarea de simplificar la inspección del código.
ElAnálisis Dinámico se interesa por conocer cuales
son las componentes del sistema bajo estudio utilizadas
para llevar a cabo una funcionalidad específica.
Una de las formas de llevar a cabo esta tarea consiste
en “Instrumentar el Código Fuente”. Esto significa:
“Insertar sentencias dentro del código fuente del
sistema que posibiliten la identificación de las
componentes utilizadas”.
Análisis Dinámico
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 58
59. int f(int x, int y) int f(int x, int y)
{ {
int r; int r;
r=2*x + 3*y printf(“Entra: f”);
return r; r=2*r+3*y;
} printf(“Sale:f”);
}
Int main() int main()
{ {
f(2,3); printf(“ENTRA main”);
} f(2,3);
printf(“SALE main”);
}
La ejecución del sistema de la derecha informará que función ejecutó el sistema.
Luego Ud. Puede almacenar esas trazas de ejecución para obtener conclusiones acerca del
funcionamiento del sistema.
Se anima Ud. a construir un DDS o un ET que logre este efecto para la gramática proporcionada por la
materia?
Análisis Dinámico
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 59
60. Vista
de componentes recuperadas con Análisis
Dinámico.
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 60
61. Una de las formas de estudiar sistemas es representar
gráficamente algunas de sus características.
Para alcanzar este objetivo se necesita extraer
información del código fuente y luego diseñar una vista
de esa información.
Porejemplo, una vista clásica es el grafo de funciones.
Dicho grafo se define de la siguiente manera:
◦ G=(P;E)
P{x/ x es una función del sistema}
E={(x,y) / x∈P ∧ y ∈P ∧ x llama a y}
Visualización de Software
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 61
62. Elgrafo de funciones se puede extraer usando un ET.
Un ejemplo de una visualización innovadora de esta
estructura es la siguiente
Visualización de Software
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 62
63. Otra forma de presentar la relación llamador-llamado entre las
funciones del sistema.
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 63
64. Las DDS o ET de traducción se pueden utilizar
para desarrollar software de aplicación.
Un ejemplo de esto será propocionado para su
lectura.
Sistemas
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 64
65. A X2
3
B 1 X1
2
C 1 E
Y
0 4
Software Industrial
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 65
66. Compilers Principles, Techniques and Tools. Aho, Setti y Ullman.
Compiler Desing. Reinhard Wilhelm y Dieter Maurer.
Compiler Construction: Principles and Practice. Kenneth C.
Louden.
Compiler Construction. Niklaus Wirth.
LISS, A linguagem eo ambiente de programação. Trabajo de fin de
carrera en la UM.
Implementação do WebApp Viewer: Uma Ferramenta para
compreender aplicações Web. Trabajo de fin de carrera en la UM.
Bibliografía
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 66
67. Muchas Gracias por su atención!
Diseño y Construcción de Compiladores
2008
Compiladores 2008 - Traducción
Dirigida por la Sintáxis 67