DEFINICIONES BÁSICAS E INTRODUCCIÓN A LENGUAJES FORMALES

Documentos relacionados
SSL Guia de Ejercicios

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

CAPITULO 2: LENGUAJES

LENGUAJES Y GRAMÁTICAS

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Lenguajes y Gramáticas

1. Cadenas EJERCICIO 1

GRAMATICAS LIBRES DEL CONTEXTO

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Gramáticas tipo 0 o Estructura de frase En este tipo de gramáticas no hay restricción en su producciones y tienen la forma siguiente.

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

Modelos De Computación. Guía Modelos de Computación. Tema I: Lenguajes y Gramáticas

Expresiones regulares, gramáticas regulares

INTRODUCCIÓN A COMPILADORES Y LENGUAJES FORMALES LENGUAJES FORMALES

Lenguajes, Gramáticas y Autómatas Conceptos

Alfabetos, cadenas y lenguajes

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

DEFINICIÓN FORMAL DE UN AFP

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas

Capítulo 9. Introducción a los lenguajes formales. Continuar

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

16 Análisis sintáctico I

ESPECIFICACIÓN DE SÍMBOLOS

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

Expresiones regulares, gramáticas regulares Unidad 3

Procesadores de Lenguaje

Introducción a la Lógica y la Computación

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

LENGUAJES Y GRAMÁTICAS

GRAMÁTICAS LIBRES DE CONTEXTO

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

Conceptos básicos sobre gramáticas

06 Análisis léxico II

Proyecto Intermedio Algoritmo de Earley

Introducción a la Lógica y la Computación

08 Análisis léxico IV

Máquinas de estado finito y expresiones regulares

Lenguajes formales y autómatas

Introducción a la lingüística computacional

Las Gramáticas Formales

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

Curso Básico de Computación Preliminares

GRAMÁTICAS y LENGUAJES INDEPENDIENTES DEL CONTEXTO

Compiladores e Intérpretes

TEORÍA DE CONJUNTOS.

Lenguajes Regulares. Antonio Falcó. - p. 1

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 4: Expresiones Regulares. Luis Peña

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS

CONJUTOS NÚMERICOS NÚMEROS NATURALES

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

TEORIA DE AUTOMATAS.

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Teoría de Autómatas y Compiladores [ICI-445] Capítulo 1: Lenguajes y Gramáticas Formales

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

Gramaticas Independientes del Contexto, ejemplos y ejercicios

Clase 14: Gramáticas libres de contexto

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

Introducción a Haskell. Cecilia Manzino

Lenguajes Incontextuales

Tema 1: Introducción. Teoría de autómatas y lenguajes formales I

CONJUNTOS. Los conjuntos son conceptos primitivos que representan una totalidad, una reunión de cosas.

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

Álgebra y Trigonometría

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R.

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Curso de Programación Avanzada en C

Inducción en definiciones y demostraciones AUTÓMATAS Y LENGUAJES FORMALES PRELIMINARES MATEMÁTICOS. Números naturales. Inducción matemática

ANÁLISIS LÉXICO AUTÓMATAS FINITOS

DEL AUTÓMATA FINITO A LA EXPRESIÓN REGULAR

ANÁLISIS SINTÁCTICO I GRAMÁTICAS

Sumario: Máquinas Secuenciales, Autómatas y Lenguajes Formales. Tema 1: Conceptos básicos (parte 1) Tema 1: Conceptos básicos

09 Análisis léxico V Compiladores - Profr. Edgardo Adrián Franco Martínez

{ } Listado de elementos del conjunto

SISTEMA DE NUMEROS REALES

Autómatas de Pila y Lenguajes Incontextuales

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

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

CAPITULO 5: GRAMÁTICAS

22, 23 y 24 Análisis sintáctico V Compiladores - Profr. Edgardo Adrián Franco Martínez

TEORÍA DE AUTÓMATAS Y LENGUAJES

Lenguajes independientes de contexto o incontextuales

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

8- LEX-Expresiones regulares

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

Programación en Lenguaje C

Tema 5: Autómatas a pila. Teoría de autómatas y lenguajes formales I

Analizador Sintáctico Ascendente

Expresiones Regulares

Sintaxis y Semántica. Tema 3. Sintaxis y Semántica. Expresiones y Lenguajes Regulares. Dr. Luis A. Pineda ISBN:

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

Transcripción:

1 DEFINICIONES BÁSICAS E INTRODUCCIÓN A LENGUAJES FORMALES Los LENGUAJES FORMALES están formados por PALABRAS, las palabras son CADENAS y las cadenas están constituidas por SÍMBOLOS de un ALFABETO. SÍMBOLOS y ALFABETOS Simbolo: elemento constructivo básico; es la entidad fundamental, indivisible. ALFABETO conjunto finito de símbolos. Se lo identifica, habitualmente, con la letra griega (sigma) La letra a es un símbolo o carácter que forma parte del alfabeto español, del alfabeto inglés, etc. Los símbolos >, = y + son elementos del alfabeto de los operadores de los lenguajes Pascal y ANSI C. El alfabeto = {0, 1} proporciona los caracteres utilizados en la construcción de los números binarios. Los números enteros con signo en base 10 se construyen con símbolos del siguiente alfabeto: = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -, +} CADENAS secuencia finita de caracteres tomados de cierto alfabeto y colocados uno a continuación de otro. LONGITUD DE UNA CADENA La LONGITUD de una cadena S (se representa S ) es la cantidad de caracteres que la componen. CADENA VACÍA Se simboliza habitualmente con la letra griega (épsilon), es la cadena que no tiene caracteres. ( = 0). Este símbolo no forma parte de ningún alfabeto. Algunos autores utilizan la letra griega (lambda). UNA SIMPLIFICACIÓN: LA POTENCIACIÓN DE UN SÍMBOLO La POTENCIACIÓN de un símbolo simplifica la escritura. El operador supraíndice utilizado para potenciar un símbolo indica el número de veces que aparece el símbolo potenciado. CONCATENACIÓN DE DOS CADENAS aplicada a cadenas (S 1 S 2 ) produce una nueva cadena formada por los caracteres de la primera cadena seguidos inmediatamente por los caracteres de la segunda cadena. La concatenación NO ES CONMUTATIVA (excepto en casos muy especiales). La cadena vacía ( ) es la IDENTIDAD para la concatenación. S = S = S. POTENCIACIÓN DE UNA CADENA representa la cadena que resulta de concatenar la cadena S, consigo misma, n-1 veces; S 0 es (la cadena vacía), PREFIJO, SUFIJO Y SUBCADENA DE UNA CADENA 1º Un PREFIJO de una cadena es una secuencia de cero o más caracteres iniciales de esa cadena. 2º Un SUFIJO de una cadena es una secuencia de cero o más caracteres finales de esa cadena. 3º Una SUBCADENA de una cadena es una secuencia de caracteres que se obtiene eliminando cero o más caracteres iniciales y cero o más caracteres finales de esa cadena. LENGUAJES NATURALES Y LENGUAJES FORMALES Los Lenguajes Naturales tienen tres características fundamentales: 1º Evolucionan con el paso del tiempo 2º Sus Reglas Gramaticales surgen después que el lenguaje para poder explicar su estructura. 3º El significado de cada palabra y de cada oración, en general, más importante que su composición sintáctica. LENGUAJE FORMAL (LF) es un conjunto de cadenas formadas con los caracteres de un alfabeto dado PALABRA: si una cadena pertenece a un determinado lenguaje es una PALABRA de ese lenguaje. Describamos un lenguaje por enumeración: sea el lenguaje L = {1, 10, 100, 1000, 10000}. este lenguaje puede ser descripto por comprensión, en forma más compacta, así: L = {10 n / 0 n 4} Entonces, la cadena 100 ( uno-cero-cero ) es una palabra del lenguaje L, Un LF puede ser descripto por enumeración, por comprensión, mediante una frase en un lenguaje natural, por gramáticas O

2 PROPIEDADES DE LAS PALABRAS longitud de una palabra, palabra vacía, concatenación de dos o más palabras, potenciación de una palabra, prefijos y sufijos de una palabra, subpalabras. La concatenación de dos palabras produce una cadena que no siempre es una palabra del lenguaje CARDINALIDAD DE UN LENGUAJE FORMAL: es la cantidad de palabras que lo componen. SUBLENGUAJES Dado que un Lenguaje Formal es un conjunto, un SUBLENGUAJE es un subconjunto de un lenguaje dado. Sea L1 = {a, ab, aab}. Entonces, L2 = {ab, aab} es un sublenguaje de L1, mientras que L3 = { } es el sublenguaje vacío de L1. El sublenguaje vacío, habitualmente representado con el símbolo ø, es sublenguaje de cualquier lenguaje. No se debe confundir el sublenguaje vacío, que tiene cardinalidad 0, con el lenguaje que solo contiene la palabra vacía, que tiene cardinalidad 1. LENGUAJES FORMALES INFINITOS L = {a n / n 1} es un LF infinito ya que no existe un límite superior para el supraíndice n. LENGUAJE UNIVERSAL SOBRE UN ALFABETO Dado un alfabeto, el LENGUAJE UNIVERSAL sobre este alfabeto es un lenguaje infinito que contiene todas las palabras que se pueden formar con los caracteres del alfabeto, más la palabra vacía. *. Una propiedad fundamental del Lenguaje Universal es que es cerrado bajo concatenación. Ejemplo 41 Si = {a, b}, entonces el Lenguaje Universal para este alfabeto es: * = {, a, b, aa, ab, ba, bb, aaa, aab, aba, abb,..., aabaabbbab, }, Cualquier lenguaje L sobre el alfabeto es un sublenguaje de *. Por lo tanto, existen infinitos lenguajes sobre un alfabeto dado. EJERCICIOS 1. Dado el alfabeto = {a, b, c}, escriba las palabras del lenguaje L = {x / x }. 2. Cuál es la cardinalidad del lenguaje L = {, a, aa, aaa}? 3. Describa, mediante una frase en castellano, el lenguaje del Ejercicio 2. 4. Escriba todas las palabras del lenguaje L = {a 2n+1 / 1 n 4}. 5. Describa, mediante una frase en castellano, el lenguaje del Ejercicio (4). 6. Sea el lenguaje L = {, a, ba, abc}. Cuál es el mínimo alfabeto sobre el que se puede construir este lenguaje? 7. Sea el lenguaje L = {0, 00, 01, 010}. Escriba una concatenación de dos palabras que produce otra palabra de este lenguaje. 8. Sea el lenguaje anterior. Escriba una concatenación de dos palabras que produce una cadena que no es palabra del lenguaje. 9. Sea el lenguaje del Ejercicio (7). Escriba tres sublenguajes de L, de distinta cardinalidad. 10. Sea el lenguaje L = {(ab) 2n / 0 n 100}. Escriba las tres palabras de menor longitud de este lenguaje. 11. Sea el lenguaje del Ejercicio (10). Es cerrado bajo concatenación? 12. Describa, mediante una frase en castellano, el lenguaje del Ejercicio (10). 13. Describa, mediante una frase en castellano, el lenguaje L = {a n b n / 1 n 3000}. 14. Sea = {a, b} y sea el lenguaje *. Cuántas palabras de longitud 3 tiene este lenguaje? Y cuántas de longitud 4?

3 15. Sea el lenguaje infinito L = {ab n / n 1}. Escriba las tres palabras de menor longitud. 16. Sea el lenguaje infinito L = {(ab) n / n 1}. Escriba las tres palabras de menor longitud. 17. Sea el alfabeto = {0, 1}. Describa, por comprensión, un lenguaje infinito L sobre (que no sea *). 18. Describa, mediante una frase en castellano, el lenguaje definido en el ejercicio anterior. IMPLEMENTACIÓN EN ANSI C Para cada una de los ejercicios que siguen, construir en ANSI C la función solicitada y un programa que la pruebe con todos los datos constantes que sean necesarios. Longitud de una cadena Determinar si una cadena dada es vacía. Concatenación de dos cadenas. Determinar si una subcadena es Prefijo de una cadena dada.

4 GRAMÁTICAS FORMALES Y JERARQUÍA DE CHOMSKY Existen estructuras para generar las palabras que forman un LF. Se denominan GRAMÁTICAS FORMALES (GFs). GRAMÁTICA FORMAL (GF) Una GF es, básicamente, un conjunto de PRODUCCIONES Sea el lenguaje L = {a}, S -> a (se lee S produce a ). Sea el lenguaje L = {a, b}, S -> a y S -> b L = {aa, ab} S -> aa y S -> ab. Pero también S -> at, T -> a y T -> b. Toda producción está formada por tres partes: el lado izquierdo, el lado derecho, y la flecha, que indica que el lado izquierdo de la producción produce (o es reemplazado por o equivale a) el lado derecho. DEFINICIÓN FORMAL DE UNA GF Toda GF es una 4-upla (V N, V T, P, S), donde: V N es el vocabulario de no-terminales o variables (un conjunto finito), V T es el vocabulario de terminales o caracteres del alfabeto sobre el cual se construye el LF que es generado por la gramática descripta (otro conjunto finito), P es el conjunto finito de producciones, y S V N es un no-terminal especial, llamado símbolo inicial o axioma, desde el cual siempre debe comenzar a aplicarse las producciones que generan todas las palabras de un determinado LF. LA JERARQUÍA DE CHOMSKY Las GFs se clasifican según las restricciones que se imponen a sus producciones, y la Jerarquía de Chomsky establece estos cuatro niveles: - Gramáticas Regulares o Gramáticas Tipo 3 - Gramáticas Independientes del Contexto o Gramáticas Tipo 2 - Gramáticas Sensibles al Contexto o Gramáticas Tipo 1 - Gramáticas Irrestrictas o Gramáticas Tipo 0 GRAMÁTICA REGULAR (GR) Sus producciones tienen las siguientes restricciones: el lado izquierdo debe tener un solo no-terminal, el lado derecho debe estar formado por un solo terminal o un terminal seguido por un no-terminal. Algunos autores (no todos) incluyen la posibilidad de que una GR pueda contener producciones-épsilon, es decir: producciones cuyo lado derecho es ε. Sea la gramática G = ({S, X}, {a, b}, {S -> ax, X -> b}, S}. esta GF es una Gramática Regular. También es válida una GR en la que se invierte el orden en el lado derecho de aquellas producciones que tienen dos símbolos. Una GF es Regular si sus producciones tienen las siguientes restricciones: el lado izquierdo debe tener un solo no-terminal, el lado derecho debe estar formado por un solo terminal, o un no-terminal seguido de un terminal. La GF ({S, X}, {a, b}, {S -> Xa, X -> b}, S} es Regular. En general: v -> t, v -> tv y v -> ε o v -> t, v -> v t y v -> ε Sin embargo, la mezcla de ambas definiciones porque la GF resultante no será una Gramática Regular. Sea G = ({S, X}, {a, b}, {S -> Xa, S -> bx, X -> b}, S}. Esta GF no es Regular. GRAMÁTICA INDEPENDIENTE DEL CONTEXTO (GIC) no tienen restricciones con respecto a la forma del lado derecho de sus producciones, aunque sí se requiere que el lado izquierdo de cada producción siga siendo un único no-terminal. v -> (v + t)*

5 La frase independiente del contexto refleja que, como el lado izquierdo de cada producción únicamente puede contener un solo no-terminal, la producción puede aplicarse sin importar el contexto donde se encuentre dicho noterminal. GRAMÁTICA IRRESTRICTA (GI) Son las GFs más amplias. Sus producciones tienen la forma general: α -> β, donde α y β pueden ser secuencias de no-terminales y/o terminales, con α ε. GRAMÁTICA SENSIBLE AL CONTEXTO (GSC) Es una GI con la siguiente restricción en las longitudes: β α. GRAMÁTICAS QUE GENERAN LENGUAJES FORMALES INFINITOS El diseño de una GF que genere un LF infinito requiere que, al menos una de sus producciones sea recursiva, esto es La GR con producciones S -> as y S -> a genera el LR infinito {a n / n 1}. LA DERIVACIÓN proceso que permite obtener cada una de las palabras de un LF a partir del axioma de una GF que lo genera, aplicando sucesivamente producciones convenientes de esa GF. Sea la GIC con producciones S -> asb y S -> ab. Esta GIC genera el lenguaje {a n b n / n 1}. Una de las palabras de este lenguaje es aaabbb. Verifiquemos por derivación: S => asb => aasbb => aaabbb. DERIVACION 1. Horizotal: S => asb => aasbb => aaabbb. 2. Verical a. A izquierda: en cada paso de la derivación se reemplaza el noterminal que se encuentra primero (de izquierda a derecha) en la cadena de derivación b. A derecha: en cada paso de la derivación se reemplaza el noterminal que se encuentra primero (de derecha a izquierda) en la cadena de derivación 3. Árbol de derivacion Sea la GIC con producciones: 1 S -> ST 2 S -> ab 3 T -> aat 4 T -> b obtener la palabra abaabaab DERIVACIÓN VERTICAL A IZQUIERDA: en cada paso de la derivación se reemplaza el noterminal que se encuentra primero (de izquierda a derecha) en la cadena de derivación. Derivación Vertical a Comentario Izquierda S Se aplica la producción (1) ST Se aplica la producción (1) STT Se aplica la producción (2) abtt Se aplica la producción (3) abaatt Se aplica la producción (4) abaabt Se aplica la producción (3) abaabaat Se aplica la producción (4) abaabaab DERIVACIÓN VERTICAL A DERECHA: en cada paso de la derivación se reemplaza el noterminal que se encuentra primero (de derecha a izquierda) en la cadena de derivación. Derivación Vertical a Comentario

6 Derecha S Se aplica la producción (1) ST Se aplica la producción (3) SaaT Se aplica la producción (4) Saab Se aplica la producción (1) STaab Se aplica la producción (3) SaaTaab Se aplica la producción (4) Saabaab Se aplica la producción (2) abaabaab GQR Tanto las GQRs como las GICs son de gran utilidad en la representación de la sintaxis de los Lenguajes de Programación. Son similares a una GR, pero donde un conjunto de terminales es reemplazado por un noterminal en una o varias producciones. S -> N NS N -> a b c Supongamos que un Lenguaje de Programación tiene nombres de variables que deben comenzar con una letra minúscula entre a y d, que puede estar seguida por letras en este mismo intervalo y por dígitos entre 2 y 6. La GQR puede tener estas producciones: S -> L SL SD L -> a b c d D -> 2 3 4 5 6 EJERCICIOS Sea el LF L = {aa, ab, aba}. Describa la Definición Formal de dos GFs que generen este LF: una debe ser una GR y la otra una GIC (no GR). Sea el LF infinito L = {a n bc n / n 1}. Describa la Definición Formal de una GIC que genere este LF.

7 LENGUAJES REGULARES E INTRODUCCIÓN A BNF DETERMINACIÓN DE LENGUAJES REGULARES Si un LF es FINITO, entonces SIEMPRE es un LENGUAJE REGULAR (más adelante veremos porqué). En cambio, si un LF es INFINITO, entonces puede ser un Lenguaje Regular o un Lenguaje No Regular. L 1 = {a n b n / 1 n 4} es un lenguaje finito y, por lo tanto, es un LR El lenguaje Todas las palabras formadas por una o más aes es un LR infinito. Este lenguaje se puede escribir así: L 2 = {a n / n 1}. Un lenguaje es Regular si existe una GRAMÁTICA REGULAR que lo genere (ver capítulo 2). Un lenguaje es Regular si se puede representar mediante una EXPRESIÓN REGULAR. Un lenguaje es Regular si puede ser reconocido por un AUTÓMATA FINITO. Obviamente, todo lenguaje que no es Regular es un Lenguaje No Regular. Sea el lenguaje Todas las palabras que comienzan con una secuencia de una o más aes y terminan con una secuencia de bes cuya cantidad es igual a la cantidad de aes que las preceden. L 3 = {a n b n / n 1}. Consideremos el lenguaje infinito definido de esta manera: L 5 = {a n b t / n 1, t 1}. Este lenguaje es Regular. Sea el lenguaje infinito L 6 = {(ab) n (cde) t a z / n 1, t 1, z 1}. Este lenguaje también es Regular El lenguaje Todos los números binarios que comienzan con una cantidad impar de 1s y terminan con un 0, que por comprensión se escribe L = {1 2n+1 0 / n 0}, es un Lenguaje Regular infinito. INTRODUCCIÓN A BNF DESCRIPCIÓN SINTÁCTICA EN BNF DE COMPONENTES BÁSICOS La notación BNF consiste en un conjunto de reglas que definen, con absoluta precisión, la sintaxis de los componentes del LP. Cada regla en BNF se forma con: variables, que son palabras o frases encerradas entre corchetes angulares (ejemplo: <identificador>) terminales, que son los caracteres del alfabeto sobre el cual se construye el LR descripto metasímbolos, que ayudan a escribir estas reglas (ejemplo: < >) BNF del lenguaje ALGOL. <símbolo básico> ::= <letra> <dígito> <valor lógico> <delimitador> <letra> ::= a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z <dígito> ::= 0 1 2 3 4 5 6 7 8 9 A partir de estos dos símbolos básicos, que corresponden a dos LRs finitos, podemos definir la sintaxis de dos elementos del lenguaje ALGOL que constituyen LRs infnitos: los identificadores y los números enteros. <identificador> ::= <letra> <identificador> <letra> <identificador> <dígito> <entero sin signo> ::= <dígito> <entero sin signo> <dígito> <número entero> ::= <entero sin signo> + <entero sin signo> - <entero sin signo> 1. Escriba reglas en BNF que definan la sintaxis del siguiente lenguaje: Todos los números binarios que comienzan con una cantidad impar de 1s y terminan con un 0. 2. Sea un LP cuyos identificadores deben comenzar con dos letras en el rango A..F, y que a continuación pueden tener (no obligatoriamente) dígitos decimales en el rango 1..4. Escriba reglas en BNF que describan este LR.

8 3. Sea un LP cuyos números reales son sin signo y están formados por uno o más dígitos (parte entera), un punto y uno o más dígitos (parte fraccionaria). Escriba reglas en BNF que describan este LR. Algo de C las funciones están incompletas solo pongo lo importante int strlen(char* s) char *p = s while(*p) p++; return p-s; for(n=0; *s; s++,n++); return n; (char s[]) for(n=o; s[n];n++); return n; void strcpi(char s[]; char t[]) while((s[i] = t[i])!0 \0 ) i++; while((*s = *t)!= \0 ) s++; t++; while(*s++=*t++) int strcmp(char s[], char t[]) for(i=0;s[i] == t[i]; i++) if (s[i] == \0 ) return 0; return s[i] t[i]; programas con argumentos desde la linea de commando int main (int argc, char *argv[])