Compiladores1

5,183 views

Published on

Published in: Education, Business, Travel
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,183
On SlideShare
0
From Embeds
0
Number of Embeds
76
Actions
Shares
0
Downloads
189
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Compiladores1

  1. 1. <ul><li>Temas: </li></ul><ul><li>Introducción a la teoría de lenguajes </li></ul><ul><li>Definición de Sintaxis </li></ul><ul><li>Traducción dirigida por sintaxis </li></ul>
  2. 2. Se puede definir un lenguaje de programación describiendo el aspecto de sus programas (la sintaxis del lenguaje) y el significado de sus programas (la semántica del lenguaje).
  3. 3. Para especificar la sintaxis de un lenguaje se presenta una notación muy usada llamada gramáticas independientes del contexto o BNF (Forma de Backus – Naur). Con las notaciones disponibles hoy, es mucho más difícil describir la semántica de un lenguaje que su sintaxis. Para especificar la semántica de un lenguaje se usarán descripciones informales y ejemplos ilustrativos.
  4. 4. Una gramática independiente del contexto se puede usar para guiar la traducción de programas y además sirve para especificar la sintaxis de un lenguaje. Una técnica de compilación orientada a la gramática, conocida como traducción dirigida por la sintaxis , es muy útil para organizar la etapa inicial de un compilador
  5. 5. .En este compilador el analizador léxico convierte la cadena de caracteres de entrada en una cadena de componentes léxicos que se convierte en la entrada para la siguiente fase. ANALIZADOR LEXICO TRADUCTOR DIRIGIDO POR LA SINTAXIS Cadena de caracteres Cadena de componentes léxicos Representación intermedia
  6. 6. El “traductor dirigido por la sintaxis, es una combinación de un analizador sintáctico y un generador e código intermedio. Una razón para empezar con expresiones formadas por dígitos y operadores consiste en hacer que el analizador léxico sea en un principio muy fácil. Cada carácter de entrada forma un conjunto léxico único
  7. 7. Gramática independiente del contexto (para abreviar, gramática) para especificar la sintaxis de un lenguaje. Una gramática describe de forma natural la estructura jerárquica de muchas construcciones de los lenguajes de programación. Por ejemplo if – else en C tiene la forma if (expresión) proposición else proposición
  8. 8. Empleando la variable expr para denotar una expresión, y la variable prop, para una proposición Se expresa: prop  if (expr) prop else prop Donde es posible leer la flecha como “puede tener la forma”, dicha regla se denomina producción.
  9. 9. En una producción, los elementos léxicos, como la palabra clave if y los paréntesis, se llaman componentes léxicos. Las variables expr y prop representan secuencias de componentes léxicos y se llaman no terminales.
  10. 10. <ul><li>Una gramática independiente del contexto tiene cuatro componentes: </li></ul><ul><li>Un conjunto de componentes léxicos, denominados símbolos terminales </li></ul><ul><li>Un conjunto de no terminales </li></ul><ul><li>Un conjunto de producciones en el que cada producción consta de un no terminal, llamado lado izquierdo de la producción, una flecha y una secuencia de componentes léxicos y no terminales, o ambos, llamado lado derecho de la producción </li></ul><ul><li>La denominación de uno de los terminales como símbolo inicial </li></ul>
  11. 11. <ul><li>Ejemplos: </li></ul><ul><li>Los dígitos, los signos como  y las cadenas en negritas , como while son terminales. </li></ul><ul><li>Un nombre en cursiva es un no terminal, y se supondrá que cualquier nombre o símbolo que no esté en cursiva es un componente léxico. </li></ul><ul><li>La s producciones con el mismo no terminal del lado izquierdo pueden tener sus lados derechos agrupados, con los lados derechos alternativos separados por el símbolo  , que se leerá “o”. </li></ul>
  12. 12. Ejemplos: Se utilizan expresiones formadas por dígitos y signos más y menos, sea el caso, 9-5+2, 3-1,, y 7. Como un signo más o menos debe aparecer entre dos dígitos, se dice de dichas expresiones que son “listas de dígitos separados por signos más o menos”. De acuerdo con las convenciones, los componentes léxicos de la gramática son los símbolos + - 0 1 2 3 4 5 6 7 8 9
  13. 13. Los no terminales son los nombres en cursva lista y dígito, siendo lista el no terminal inicial, porque sus producciones se dieron primero Se dice que una producción es para un no terminal si el no terminal aparece en el lado izquierdo de la producción. Una cadena de componentes léxicos es una secuencia de cero o más componentes léxicos. La cadena que contiene cero componentes léxicos, que se escribe є , recibe el nombre de cadena vacía.
  14. 14. Indica gráficamente cómo del símbolo inicial de una gramática deriva una cadena de lenguaje. Si el no terminal A tiene una producción A  XYZ, entonces un árbol de análisis sintáctico puede tener un nodo interior etiquetado con A y tres hijos etiquetados con X, Y y Z, de izquierda a derecha: A X Y Z
  15. 15. <ul><li>Un árbol de análisis sintáctico es un árbol con las propiedades siguientes: </li></ul><ul><li>La raíz está etiquetada con el símbolo inicial </li></ul><ul><li>Cada hoja está etiquetada con un componente léxico o con є . </li></ul><ul><li>Cada nodo interior está etiquetado con un no terminal. </li></ul><ul><li>Si A es el no terminal que etiqueta a algún nodo interior y X1, X2….. Xn, son las etiquetas de los hijos de ese nodo, de izquierda a derecha, entonces A  X1,X2… Xn es una producción. </li></ul>
  16. 16. Ejemplo: En la figura la raíz está etiquetada con lista, que es el símbolo inicial de la gramática del ejemplo inicial. Los hijos de la raíz están etiquetados, de izquierda a derecha, lista +, y dígito. Obsérvese que Lista  lista + dígito Es una producción en la gramática del ejemplo 1. el mismo patrón – se repite en el hijo izquierdo de la raíz, y cada uno de los tres nodos, etiquetados con dígito tiene un hijo que está etiquetado con un dígito.
  17. 17. Se ha de tener cuidado al considerar la estructura de una cadena según una gramática. Aunque es evidente que cada árbol de análisis sintáctico deriva exactamente la cadena que se lee en sus hojas, una gramática puede tener más de un árbol de análisis sintáctico que genere una cadena dada de componentes léxicos. Para demostrar que una gramática es ambigua, lo único que se requiere es encontrar una cadena de componentes léxicos que tenga más de un árbol de análisis sintáctico.
  18. 18. Como una cadena que cuenta con más de un árbol de análisis sintáctico suele tener más de un significado, para aplicaciones de compilación es necesario diseñar gramáticas no ambiguas o utilizar gramáticas ambiguas con reglas adicionales para resolver las ambigüedades. Supóngase que no se hizo la distinción entre dígitos y listas según el ejemplo 1, se podía haber escrito la gramática: Cadena  cadena + cadena  cadena – cadena   0  1  2  3  4  5  6  7  8  9
  19. 19. Precedencia y asociatividad de operadores La precedencia de operadores especifica cómo se agrupan las expresiones_ Por ejemplo, en la expresión 1 + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicación (&quot;*&quot;) tiene una mayor precedencia que el de adición (&quot;+&quot;)_ La siguiente tabla lista la precedencia de operadores, indicándose primero los de menor precedencia_
  20. 20. Precedencia de Operadores
  21. 21. Precedencia de Operadores
  22. 22. OBJETIVO : La traducción de un lenguaje guiada por la gramática context free que lo define. IDEA BASICA :  Asociar información con las construcciones del lenguaje asociando atributos con los símbolos de la gramática.  Los valores de los atributos son calculados por medio de reglas semánticas asociadas con las producciones de la gramática. Existen dos mecanismos usados en la construcción de compildores para especificar la semántica y traducción de las construcciones del lenguaje usando gramáticas de atributos. Traduccion dirigida por sintaxis
  23. 23. <ul><li>DEFINICIONES DIRIGIDAS POR LA SINTAXIS (SDD) que son gramáticas de atributos en las cuales el orden de evaluación de las reglas semánticas no están dadas. </li></ul><ul><li>ESQUEMAS DE TRADUCCION (TSDS): son gramáticas de atributos en las cuales el orden de evaluación de las reglas semánticas está explícitamente dado. </li></ul>
  24. 24. ESTRUCTURA DE UN COMPILADOR USANDO DDS
  25. 25. GRAFOS DE DEPENDENCIAS <ul><li>ARBOL DE DERIVACION DECORADO O ANOTADO es un árbol de derivación que muestra los valores de los atributos de los símbolos de la grámatica, en cada nodo. </li></ul><ul><li>GRAFO DE DEPENDENCIA DE ATRIBUTOS , un grafo cuyos nodos son atributos y cuyos arcos representan las dependencias entre los atributos de los nodos. </li></ul><ul><li>GRAFO DE DEPENDENCIA es un grafo de dependencia de los atributos de los símbolos rotulando el árbol de derivación. </li></ul><ul><li>CALCULO DE VALORES DE ATRIBUTOS , al proceso de calcular los valores de los atributos, según las reglas semánticas, en cada nodo de un árbol de derivación se lo llama anotación o decoración del árbol de derivación. </li></ul>
  26. 26. FORMA DE UNA DDS <ul><li>cada producción de la forma A   tiene asociada reglas semánticas de la forma: </li></ul><ul><li>b = f(c1, ... , cn) </li></ul><ul><li>donde: </li></ul><ul><li>f es una función b, c1, ... , cn son atributos de los símbolos en A   , b depende de c1, ... , cn . </li></ul><ul><li>Si b es un atributo sintetizado entonces es un atributo de A y c1, ... , cn son atributos de los símbolos de  . </li></ul><ul><li>Si b es un atributo heredado entonces es un atributo de un símbolo en  y c1,..., cn son atributos de A y de símbolos en  . </li></ul>(Definición dirigida por la sintaxis
  27. 27. NOTACION <ul><li>Si b = f(c1, ... , cn) es una regla semántica entonces debe existir un arco ci  b, i=1,...,n, en el grafo de dependencia de atributos. </li></ul><ul><li>Si f no tiene efectos colaterales puede ser una expresión. </li></ul><ul><li>Si f tiene efectos colaterales y es escrita como una invocación a procedimiento o un fragmento de programa define el valor de un atributo vacío (dummy) de A. </li></ul>
  28. 28. EJEMPLO DE DDS <ul><li>Dada la gramática que sigue que define el L(G) = {xnynzn, n  1} construir un DDS que controle que sean iguales las cantidades de x, y y z. </li></ul><ul><li><string> ::= <xstring> <ystring> <ztring> </li></ul><ul><li><xstring> ::= x | <xstring> x </li></ul><ul><li><ystring> ::= y | <ystring> y </li></ul><ul><li><zstring> ::= z | <zstring> z </li></ul><ul><li>En una DDS los símbolos terminales tienen sólo atributos sintetizados que son provistos por el scanner. </li></ul><ul><li>El símbolo distinguido de la gramática no posee atributos heredados. </li></ul>

×