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. 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. 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. .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. 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. 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. 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. 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.
11.
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. 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. 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.
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. 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. 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. 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 ("*") tiene una mayor precedencia que el de adición ("+")_ La siguiente tabla lista la precedencia de operadores, indicándose primero los de menor precedencia_
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