¿PORQUÉ APRENDER AWK?
¿PORQUÉ APRENDER AWK?
Es un lenguaje intérprete completo de aplicación general
¿PORQUÉ APRENDER AWK?
Es un OPEN SOURCE
¿PORQUÉ APRENDER AWK?
Es un lenguaje en C muy parecido a C más expresiones regulares C + /ER/ = awk
¿PORQUÉ APRENDER AWK?
Es un lenguaje en C muy parecido a C más expresiones regulares C + /ER/ = awk
¿PORQUÉ APRENDER AWK?
Si awk es parecido a C y C es el lenguaje por excelencia, al ser el lenguaje de nivel medio, tiene el poderío de un lenguaje ensamblador más el hecho
de ser amigable con el usuario programador
¿PORQUÉ APRENDER AWK?
Existen versiones gratuitas para MS-DOS, MS-WINDOWS,
UNIX Y LINUX
¿QUÉ SON LAS EXPRESIONES
REGULARES?
¿QUÉ SON LAS EXPRESIONES REGULARES?
❖Una Expresión regular es un METALENGUAJE basado en la teoría de conjuntos con cuatro operaciones: Concatenación o unión, disyunción, cerradura positiva y cerradura de Kleene. Con lo se pueden especificar los componentes léxicos que forman parte de un lenguaje aceptado finito o infinito.
❖Es un patrón que define los símbolos, cadenas o elementos que integrarán un lenguaje formal.
❖Es una representación matemática del comportamiento de un sistema cuyas entradas se pueden definir con símbolos, cadenas y un lenguaje regular
¿QUÉ SON LOS COMPONENTES
LÉXICOS?
¿QUÉ SON LOS COMPONENTES LÉXICOS?
Son los elementos básicos que conforman un lenguaje formal.
Son todos aquellos elementos necesarios para integrar un lenguaje regular y se encuentran en la TABLA DE SIMBOLOS por ejemplo:
Palabras reservadas = INSTRUCCIONES Parámetros para cada instrucción
IDENTIFICADORES para nombrar variables, nombres de funciones, rutinas, subrutinas, programas, subprogramas, etc.
¿QUÉ ES UNA TABLA DE
SIMBOLOS?
¿QUÉ ES UNA TABLA DE SIMBOLOS?
Es una estructura de datos que contiene todos y cada uno de los elementos básicos o componentes léxicos que conforman un lenguaje formal. Todos estos componentes léxicos deben estar en la TABLA DE SIMBOLOS conjuntamente con los TOKENS
¿QUÉ SON LOS TOKENS?
¿QUÉ SON LOS TOKENS?
Son identificadores numéricos para cada uno de los componentes léxicos.
Estos son la salida de un analizador léxico conjuntamente con los errores léxico que se detectan y se dan de alta en el manejador de errores.
¿QUÉ ES UN MANEJADOR DE
ERRORES?
¿QUÉ ES UN MANEJADOR DE ERRORES?
También es una estructura de datos que contiene los código de error con su descripción para poder guardar e informar al usuario programador todos y cada uno de los errores en el código fuente analizado.
Una vez que se realiza el analizador léxico se generan TOKENS y códigos de error que también son datos numéricos que se guardan con el numero de línea donde se encuentran el código fuente.
¿QUÉ ES UN ANALIZADOR
LÉXICO?
¿QUÉ ES UN ANALIZADOR LÉXICO?
Es un escrutinio (scanning) que se realiza con el código fuente o de entrada para identificar cada uno de los símbolos que se integran en cadenas y con ellas se realiza una identificación para determinar si las cadenas aceptadas son parte de los componentes léxicos definidos para el lenguaje.
¿CUÁLES SON LAS FUNCIONES BÁSICAS DE UN ANALIZADOR
LÉXICO?
¿CUÁLES SON LAS FUNCIONES BÁSICAS DE UN ANALIZADOR
LÉXICO?
1) Elimina comentarios 2) Elimina signos extraños
3) Identifica símbolos faltantes como “, (, {, [, etc. del código fuente.
4) Genera tokens por cada componente léxico.
¿CUALES SON LAS
APLICACIONES DE UN
ANALIZADOR LÉXICO?
¿CUALES SON LAS
APLICACIONES DE UN ANALIZADOR LÉXICO?
Un analizador léxico es como un filtro, el cual tiene múltiples aplicaciones. Todo sistema bien diseñado tiene un filtro o selección que analiza los elementos que acepta o rechaza el sistema.
Por ejemplo en sistemas de gestión 1) CHEQUES
2) NOMINA
3) PRESUPUESTOS 4) FACTURACIÓN, etc.
¿CUALES SON LAS
APLICACIONES DE UN
ANALIZADOR LÉXICO?
¿CUALES SON LAS
APLICACIONES DE UN ANALIZADOR LÉXICO?
Es la primer fase de la primera etapa de un traductor, los cuales tienen infinidad de usos, como:
Pre-compiladores, compiladores, pseudo-compiladores, intérpretes y son parte de los sistemas operativos que se consideran software de base o básico.
LOS ERRORES LEXICOS SE CONSIDERAN HASTA LA SIGUIENTE ETAPA QUE ES EL ANÁLISIS SINTÁCTICO POR LO QUE EL MENSAJE MÁS COMUNES ES:
Sintax error
EDITE EL ARCHIVO:
SOURCEAWK.TXT
# unbundle - unpack a bundle into separate files
$1 != prev { close(prev); prev = $1 }
{ print substr($0, index($0, " ") + 1) >$1 }
EDITE EL ARCHIVO:
SOURCEAWK.TXT
calc1 # calc1 - reverse-Polish calculator, version 1 calc1 # input: arithmetic expressions in reverse Polish calc1 # output: values of expressions
calc1
calc1 { for (i = 1; i <= NF; i++)
calc1 if ($i ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$/) { calc1 stack[++top] = $i
calc1 } else if ($i == "+" && top > 1) { calc1 stack[top-1] += stack[top]; top--
EDITE EL ARCHIVO:
SOURCEAWK.TXT
calc1 } else if ($i == "-" && top > 1) { calc1 stack[top-1] -= stack[top]; top-- calc1 } else if ($i == "*" && top > 1) { calc1 stack[top-1] *= stack[top]; top-- calc1 } else if ($i == "/" && top > 1) { calc1 stack[top-1] /= stack[top]; top-- calc1 } else if ($i == "^" && top > 1) { calc1 stack[top-1] ^= stack[top]; top-- calc1 } else {
EDITE EL ARCHIVO:
SOURCEAWK.TXT
calc1 printf("error: cannot evaluate %s\n", $i) calc1 top = 0
calc1 next calc1 }
calc1 if (top == 1)
calc1 printf("\t%.8g\n", stack[top--]) calc1 else if (top > 1) {
calc1 printf("error: too many operands\n")