Gramaticas Independientes del Contexto, ejemplos y ejercicios *

Documentos relacionados
Gramaticas Independientes del Contexto, ejemplos y ejercicios

LENGUAJES Y GRAMÁTICAS

Región de Convergencia para la Transformada- Z

Programación 1. Tema I Clase de problemas. Notación BNF (Backus Naur Form) o notación de Backus Naur

Licenciatura de Matemáticas Informática I Notación algorítmica - Descripción BNF

Clasificación y Propiedades de las Señales

Conceptos básicos sobre gramáticas

COMPILADORES E INTERPRETES

Curso de Java Introducción a la Programación III

Procesadores de Lenguaje

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

6. Modulaciones M-arias

GUÍA BÁSICA DE SCHEME v.4

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Clase 14: Gramáticas libres de contexto

Se pueden agrupar las reglas que tienen la misma parte izquierda:

TUTORIAL PROLOG. Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato

Control de concurrencia en bases de datos relacionales

Receptor Superheterodino para detectar emisoras AM

Compiladores. Análisis Sintáctico Ascendente. Adrian Ulises Mercado Martínez. Facultad de Ingeniería, UNAM. 5 de septiembre de 2013

JavaScript: Operadores

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

GRAMÁTICAS LIBRES DE CONTEXTO

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

Entendiendo las Graficas de Polos y Ceros en el Plano-Z

Expresiones Aritméticas, relacionales y lógicas. Prof. Hilda Contreras Programación 1

Algebra Lineal: Conceptos Básicos

DISEÑO ESTRUCTURADO USANDO HERRAMIENTAS DE

- AnallogicA - Software para crear tablas de verdad

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

Eigenvectores y Eigenvalores *

Tema 2. Concepto de Algoritmo

Ciencias de la Computación I

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

UNIDAD 7: PROGRAMACIÓN EN R

El lenguaje C. 1. Identificadores, constantes y variables

4. Códigos de Línea *

16 Análisis sintáctico I

El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o español, que facilitan

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Tema 3.- Predicados y sentencias condicionales

Sintaxis de PSeInt Tutorial

El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad type con la cadena text/javascript:

Programación Web Tema 3.2 Java Script Estructura del Lenguaje. Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

DEFINICIONES BÁSICAS E INTRODUCCIÓN A LENGUAJES FORMALES

3. Ortogonalización Gram-Schmidt y teoría básica de las Constelaciones

Lic. Edinson Cuero Ramos Página 1

Pre-Laboratorio 1 MA-33A : Introducción a Matlab

Escuela Normal Superior N 40 Mariano Moreno. Cuadernillo Propedéutico 2017 Nivel Superior

Tema 2. Tipos predefinidos

Series de Fourier: El Método de Eigenfunciones *

EXPRESIONES Y OPERADORES

Introducción a Python. Cecilia Manzino

Clase 11: Gramáticas. Solicitado: Ejercicios 09: Gramáticas

Sentencias en LabVIEW *

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones

introducción a la computación

Lección 2 Introducción al lenguaje C

Lenguaje TIMBA. Fundamentos de la Informática Int. a la Programación Resolución de Problemas y Algoritmos

UNIDAD 2: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACiÓN R

Semántica: principales usos. Semántica: principales enfoques. Semántica Operacional. Sintaxis abstracta de un lenguaje (sujeto) Semántica Operacional

UNIDAD 2 Descripción de un programa

Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales.

Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars)

INTRODUCCIÓN A COMPILADORES Y LENGUAJES FORMALES LENGUAJES FORMALES

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017

Diseño de Compiladores I. Estructura General de un Compilador

Inducción, Recursión y Alcance. Inducción, Recursión y alcance. Inducción, Recursión y Alcance. Inducción, Recursión y Alcance

Compiladores e Intérpretes

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

UNIVERSIDAD MODULAR ABIERTA FACULTAD DE CIENCIAS ECONOMICAS

LENGUAJE. Tema 2 Elementos de un programa

8. Detección no Coherente para modulaciones OOK y FSK

Lenguajes y Compiladores Traducción Dirigida por la Sintaxis

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

Transcripción:

OpenStax-CNX module: m16320 1 Gramaticas Independientes del Contexto, ejemplos y ejercicios * Carlos Arturo Cortés Fuentes This work is produced by OpenStax-CNX and licensed under the Creative Commons Attribution License 2.0 Gramáticas Independientes del Contexto, ejemplos y ejercicios Una Gramática independientes del contexto (GIC) es una gramática formal 1 en la que cada regla de producción es de la forma: Exp x Donde Exp es un símbolo no terminal 2 y x es una cadena de terminales y/o no terminales. El término independiente del contexto se reere al hecho de que el no terminal Exp puede siempre ser sustituido por x sin tener en cuenta el contexto en el que ocurra. Un lenguaje formal 3 es independiente de contexto 4 si hay una gramática libre de contexto que lo genera, este tipo de gramática fue creada por Backus-Naur 5 y se utiliza para describir la mayoría de los lenguajes de programación. Una GIC está compuesta por 4 elementos: 1. Símbolos terminales (elementos que no generan nada) 2. No terminales (elementos del lado izquierdo de una producción, antes de la echa "- >") 3. Producciones (sentencias que se escriben en la gramática) 4. Símbolo inicial (primer elemento de la gramática) Ejemplo 1: Teniendo un lenguaje que genera expresiones de tipo: 9 + 5 2 Para determinar si una GIC esta bien escrita se utilizan los arboles de analisis sintáctico 6, así: Producciones: lista -> lista + digito lista -> lista - digito lista -> digito digito -> 0 1 2 3 4 5 6 7 8 9 Arbol de analisis sintactico: * Version 1.1: May 29, 2008 10:12 am -0500 http://creativecommons.org/licenses/by/2.0/ 1 http://es.wikipedia.org/wiki/gramática_formal 2 http://es.wikipedia.org/w/index.php?title=símbolo_no_terminal&action=edit&redlink=1 3 http://es.wikipedia.org/wiki/lenguaje_formal 4 http://es.wikipedia.org/wiki/lenguaje_libre_de_contexto 5 http://es.wikipedia.org/w/index.php?title=backus-naur_form&action=edit&redlink=1 6 http://es.wikipedia.org/w/index.php?title=arbol_de_analisi_sintacticol&action=edit&redlink=1

OpenStax-CNX module: m16320 2 Figure 1 La gramática es correcta siempre y cuando el símbolo inicial este al lado izquierdo de las producciones y sea la raíz del árbol. Ejemplo 2: Hacer una gramática que genere el número 5 Símbolo inicial (no terminal): Exp y Símbolo terminal: 5 Exp -> 5 Ejemplo 3: Hacer una gramática que genere un dígito. Exp -> 0 1 2 3 4 5 6 7 8 9 Arbol de analisis sintactico: Exp 3 Ejemplo 4: Hacer una gramática que repita muchas veces el número 5 Exp -> Exp 5 5 Prueba con el número 555

OpenStax-CNX module: m16320 3 Figure 2 Ejemplo 5: Gramática que genera muchos dígitos Exp -> Exp dig dig dig -> 0 1 2 3 4... 9 Prueba: Figure 3 Ejemplo 6: Hacer una GIC que genere un número binario Exp -> Exp bin bin bin -> 0 1 Ó con una sola producción: Exp -> Exp 0 Exp 1 0 1 Prueba:

OpenStax-CNX module: m16320 4 Figure 4 Aunque esta producción puede generar expresiones como 0000, para evitar errores como este: dig -> 1 Exp 1 Exp -> Exp 0 Exp 1 0 1 Nota 1: El símbolo inicial siempre debe estar en la primera producción de la gramática. Nota 2: Expresiones de tipo, Exp -> Exp 0 1, genera potencias de 10, ejemplo Figure 5 Ejemplo 7: Hacer una gramática que genere un conjunto de 1 seguido de un conjunto de 0, donde el número 1 debe ser impar y el número de 0 debe ser par. Exp -> unos ceros ceros -> ceros 00 00 unos -> unos 11 1

OpenStax-CNX module: m16320 5 Figure 6 Figure 7 Ejemplo 8: ¾Cuál es el lenguaje de la siguiente producción? Pal -> Pal letras letras Letras -> a b c d e f g... z R/ Es una GIC que genera palabras escritas en minúsculas. Ejemplo 9: Hacer una GIC que genere una frase cuya letra inicial de cada palabra sea mayúscula. Frase -> Frase Exp pal pal Exp -> Pal -> may pal min min -> a b c d... z may -> A B C D... Z

OpenStax-CNX module: m16320 6 Figure 8 Ejercicios 1. Hacer una gramática independiente del contexto (G.I.C), que genere nombres de persona, mínimo un nombre y un apellido, máximo dos nombres y dos apellidos. Cada nombre y apellido debe comenzar por mayúscula. Nota: Se tiene en cuenta que =vacio; no se aceptan apellidos compuestos. nombre nom nom2 esp nom nom2 nom2 esp nom nom nom min may may A B C D... Z min a b c d... z esp Árbol de análisis sintáctico

OpenStax-CNX module: m16320 7 Figure 9 2. Hacer una gramática independiente del contexto (G.I.C), que genere frases cuyas palabras empiecen en una vocal mayúscula y terminen en una consonante minúscula. En medio de la vocal mayúscula y la consonante pueden haber letras minúsculas. frase frase esp pal2 pal2 esp pal2 pal1 conmin pal1 pal2 min vocmay vocmay A E I O U min conmin vocmin conmin b c d f g... z vocnim a e i o u 3. Hacer una gramática independiente del contexto (G.I.C), que genere la sentencia condicional if con las siguientes restricciones: Siempre se va a comparar una variable con un número entero o una variable con otra variable. Los operadores relacionales son: < > ==!=

OpenStax-CNX module: m16320 8 Las variables deben empezar en una letra y después de esa letra pueden haber cualquier cantidad de números o letras. Los números solamente van a ser enteros de cualquier cantidad de dígitos. Un número no debe empezar en cero, pero puede ser cero. Se pueden utilizar los operadores lógicos && (and) y II (or). Solamente se van a utilizar los paréntesis después del if y al nal del if. Solución 1 if2 if1 term if1 if cond5 inicio cond5 cond5 oprlog cond4 cond4 cond1 cond2 cond3 cond3 var opr var cond2 var opr cero cond1 var opr num2 oprlog '&&' 'II' opr < > ==!= var var todo letras todo A B C D... Z 0 1 2... 9 letras A B C D... Z num2 num2 num1 num3 num1 num3 cero num3 1 2 3 4 5... 9 cero 0 inicio if ( term ) Solución 2 si if (exp) exp comp comp oplog exp comp var oprel num var oprel var oprel < > ==!= oplog '&&' 'II' var var numero var letra letra letra a b c d... z A B C D... Z numero num 0 num num dig num 0 dig dig 1 2 3 4 5 6 7 8 9