Gramaticas Independientes del Contexto, ejemplos y ejercicios

Documentos relacionados
Procesadores de Lenguaje

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

GUÍA BÁSICA DE SCHEME v.4

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

GRAMATICAS LIBRES DEL CONTEXTO

Tema 3.- Predicados y sentencias condicionales

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

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

CONCEPTOS BASICOS DEL LENGUAJE JAVA

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

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Lección 2 Introducción al lenguaje C

El lenguaje C. 1. Identificadores, constantes y variables

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

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Semántica Denotacional

SEMINARIO DE ESPECIFICACIONES ALGEBRAICAS

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

FUNDAMENTOS DE INFORMÁTICA

Lenguajes y Gramáticas

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

Estructuras de Control. Secuencia y Selección

Principios de Computadoras II

Glucólisis. OpenStax College. Based on Glycolysis by. 1 El ATP en los seres vivos

REFERENCIA DEL LENGUAJE

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Un ejemplo simple de normalización de bases de datos relacionales (hasta 3FN)

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

Elementos léxicos del lenguaje de programación Java

Unidad 4. Autómatas de Pila

Sintaxis del Analizador de consultas Lucene

SINTAXIS DE BÚSQUEDA PARA

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar.

TEMA 10. INTRODUCCCIÓN A SQL. CONSULTAS BASADAS EN UNA TABLA

Expresiones y sentencias

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Programación en java. Estructuras algorítmicas

Universidad de Managua

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Organización de Computadoras. Clase 2

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

INTRODUCCIÓN A BASE DE DATOS. Excel - Access

Proyecto Unico Interpretador de SetCalc

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

4. Operadores Operador asignación

Sentencias o instrucciones en Visual BASIC

Estatutos de Control C# Estatutos de Decisión (Selección)

5. Modulaciones Binarias: Teoría y simulación en LabVIEW

5. Sentencias selectivas o condicionales

Tema 7: Programación con Matlab

Clasificación y Propiedades de los Sistemas

GENERALIDADES DEL LENGUAJE C

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Escribir la expresión regular de un número entero que no acepte que el primer dígito sea cero salvo el número 0. Solución: 0 [1-9][0-9]*

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Procesadores de lenguaje Ejercicios Análisis semántico

Curso de Programación Avanzada en C

Curso PHP Módulo 1 R-Luis

Unidad II: Análisis semántico

Constantes. Variables

Insertar Datos en Tablas

Aprender a programar con Turbo Pascal. Turbo pascal

Introducción al álgebra relacional. Con ejemplos en SQL

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Elementos de un programa en C

INICIACIÓN A LA PROGRAMACIÓN II

Manual de turbo pascal

Instituto Tecnológico de Celaya

1. Computadores y programación

Reingeniería con Netbeans

MANEJO DE EXPRESIONES REGULARES

Tema 2. El lenguaje de programación Java (Parte 1)

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO

OPERADORES Y EXPRESIONES

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

6 CARACTERES Y CADENAS. 6.1 Caracteres y cadenas

Algunos ejercicios de Ampliación de Cálculo

Objetivos. Contenidos. Revisar los principales conceptos de la lógica de primer orden

Ficha de Aprendizaje N 13

Introducción a Códigos

U i n d id d a 3. El Element os á bá i s cos de un programa

Comparando las células procariotas y eucariotas

Hoja de ejercicios del Tema 3

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

Guía práctica de estudio 06: Lenguaje binario

Práctica 1 de Excel (Curso )

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Datos y tipos de datos

Operadores. Javier Fernández Rivera -

Universidad de Guadalajara del 24 al 26 de Octubre del 2012.

Pontificia Universidad Católica del Ecuador

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Java para no Programadores

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 Abstract Las gramáticas libres de contexto permiten describir la mayoría de los lenguajes de programación, de hecho, la síntaxis de la mayoría de lenguajes de programación está denida mediante gramáticas libres de contexto. Por otro lado, estas gramáticas son sucientemente simples como para permitir el diseño de ecientes algoritmos de análisis sintáctico que, para una cadena de caracteres dada determinen como puede ser generada desde la gramática 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 Version 1.1: May 29, 2008 10:12 am +0000 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 digito -> 0 1 2 3 4 5 6 7 8 9 Arbol de analisis sintactico: 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

OpenStax-CNX module: m16320 4 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: 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

OpenStax-CNX module: m16320 5 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 Figure 6

OpenStax-CNX module: m16320 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 7 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 8 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 9 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