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

Tamaño: px
Comenzar la demostración a partir de la página:

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

Transcripción

1 LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Se trata de realizar, mediante el generador de analizadores léxicos FLEX y sintácticos BISON, un analizador léxico, sintáctico y semántico que reconozca un sencillo lenguaje de programación, que llamaremos MiniModula, cuyas especificaciones léxicas y sintácticas se detallan a continuación. Además se deberá incluir la construcción de la Tabla de Símbolos (TS). Especificación a nivel léxico Consideraremos como comentario todo aquello que vaya entre los símbolos (* y *). Ej.: (*Esto es un comentario *). Los identificadores, id, constarán de una letra seguida opcionalmente de cualquier número de letras, dígitos y símbolos de subrayado _. Existen constantes numéricas de tipo entero, num_integer, un dígito seguido de uno o más dígitos, o de tipo real, num_real, un dígito o más dígitos seguidos de un punto más un dígito o más dígitos. Los símbolos especiales y operadores son: ( ) ;, + - * / = == < > : Las palabras clave son: integer real char boolean if then while do read write begin end function return module var and or not true false Especificación a nivel sintáctico La gramática que utilizaremos representa un sencillo lenguaje de programación que incluye como tipos simples de datos los tipos char, integer, real y bool. Como sentencias incluye las sentencias condicionales (if_then_), sentencias repetitivas (while_do), asignaciones, llamadas y retorno de funciones y E/S de datos. También permite trabajar con expresiones aritméticas (+,-,*,/), relacionales (<,==, >) y lógicas (and, or, not). Al final del enunciado se incluye ejemplos de código fuente que genera esta gramática. Generación de la tabla de símbolos A la hora de generar la tabla de símbolos es necesario almacenar tanto variables globales como locales, para ello tendremos que diferenciar las variables mediante su ámbito. Se usará el valor cero para las variables globales y se irá incrementando para las variables locales dependiendo de la función en la que están declaradas. A las variables declaradas en la primera función se les asignará el ámbito 1, a las declaradas en la segunda función se les asignará el ámbito 2, así sucesivamente. Ver ANEXO I sobre la construcción de la TS. 1

2 La gramática que define el lenguaje es: Program module id ; DeclarationList begin StatementList end id. DeclarationList Declaration DeclarationsList Declaration Var Function Var var id : SimpleType ; Function function id ( ParameterList ) : SimpleType ; VarList begin StatementList end id ; VarList Var VarList ParameterList Parameter MasParameter Parameter SimpleType id MasParameter, Parameter MasParameter SimpleType char integer real boolean StatementList Statement ; StatementList Statement AssignStm IfStm WhileStm FunctionStm ReturnStm WriteStm ReadStm AssignStm id = Exp IfStm if Exp then StatementList ElseStm end ElseStm StatementList WhileStm while Exp do StatementList end FunctionStm id ( ArgList ) ArgList Exp MasArg MasArg, Exp MasArg ReturnStm return Exp WriteStm write Exp ReadStm read id Exp id numinteger numreal ( Exp ) true false FunctionStm Exp * Exp Exp / Exp Exp - Exp Exp + Exp - Exp Exp or Exp Exp and Exp not Exp Exp < Exp Exp > Exp Exp == Exp Nota: Se podrán incluir modificaciones a la gramática siempre que se genere el mismo lenguaje. Los operadores =, <, >, == no son asociativos. La precedencia de los operadores es, de menor a mayor, la siguiente: < > == + - or * / and menos unario not 2

3 Comprobaciones semánticas Se deberán realizar las siguientes comprobaciones semánticas: Comprobaciones de tipos en asignaciones, en paso de parámetros a funciones y en expresiones aritméticológicas. Todos los operandos en una expresión deben de ser del mismo tipo y los operadores deben estar definidos para ese tipo de variables. Asumiremos que, para variables de tipo entero y real, tenemos definidos los operadores aritméticos y relacionales. Para variables booleanas sólo están definidos los operadores lógicos. Para variables tipo carácter sólo están definidos los operadores relacionales. Comprobaciones relacionadas con la Tabla de Símbolos: No insertar un identificador de una función o variable dos veces con el mismo nombre y con el mismo ámbito. En las llamadas a funciones el número y tipo de los de argumentos y valor de retorno debe coincidir con la definición. Cuando se usen variables deben estar previamente almacenadas en la tabla de símbolos y deben tener el ámbito adecuado. En las sentencias condicionales la expresión de la condición debe ser booleana. Los identificadores al principio y al final del programa principal y de las funciones deben coincidir. Opcionalmente se podrán incluir otro tipo de comprobaciones. Ver ANEXO II sobre cómo se realizan las comprobaciones semánticas. Se pide: 1. Implementar los ficheros de flex y bison con la especificación léxica y sintáctica. 2. Implementar la construcción de la TS e imprimirla por pantalla. 3. Implementar las comprobaciones semánticas. Recordad emitir un mensaje en el caso de que se produzca un error léxico, sintáctico o semántico, indicando la fila donde se ha producido y el tipo de error de que se trata. Fecha de entrega: Todos los grupos antes del día 6 de marzo. Duración: 2 sesiones. Ejemplo maximo.mod module Maximo ; (* Este programa calcula el máximo de dos variables leidas desde el teclado *) var max : real; var a : real; var b : real; function fnc_max(real x, real y): real; var res : real; begin if (x > y) then res = x; res = y; end; return res; end fnc_max ; (* programa principal *) begin read a; read b; max = fnc_max(a,b); write max; 3

4 end Maximo. ANEXO I: La Tabla de Símbolos Qué es la tabla de símbolos? La Tabla de Símbolos (TS) es una estructura de datos que nos permite almacenar la información de los símbolos (variables y funciones) que aparecen a lo largo del programa. Esta información es necesaria para realizar las comprobaciones semánticas como: declaración de variables antes de uso, comprobaciones de tipos en expresiones y asignaciones, paso de parámetros a funciones (tipo y número), etc. Cómo se implementa? En esta práctica se implementará la TS como un vector de símbolos (podéis usar también una estructura de datos dinámica como una lista enlazada). Cada símbolo se puede implementar como una estructura tipo registro. Los campos a considerar son: #define MAXSIMBS 1024 #define TIPO_VAR 0 #define TIPO_FUNCION 1 #... typedef struct simb_tab char nombre[maxtamnombre]; //nombre del símbolo int tipo_simb; //tipo de símbolo, TIPO_VAR o TIPO_FUNCION int tipo_dato; //tipo de dato de la variable: TIPO_INT, TIPO_REAL, TIPO_BOOL, TIPO_CHAR. Si es una función almacena aquí el tipo del valor de retorno int nargs; //num. de argumentos para una función char nombre_argumentos[maxnumarg][maxtamnombre]; //nombre de los argumentos de una función int tipo_argumentos[maxnumarg]; //tipo de los argumentos para las funciones int ambito; //ámbito de definición de las variables SIMB_TAB; SIMB_TAB tabla_simbs[maxsimbs]; El ámbito se define como la parte del programa donde el símbolo tiene validez. Supondremos que el programa principal tiene ámbito cero. Todas las variables y funciones definidas en el programa principal tienen ámbito cero. Las variables definidas dentro de funciones tendrán ámbito 1, 2,... así sucesivamente siguiendo el orden en que se han definido las funciones. Para manipular la TS y realizar las comprobaciones semánticas, necesitamos implementar las funciones de inserción y búsqueda de símbolos sobre la TS. void insertar_simb(...); //inserta un simb. en la TS // se le puede pasar directamente una estructura de tipo símbolo o bien pasándole toda la información del símbolo para que ella lo cree y lo añada. 4

5 SIMB_TAB buscar_simb(...); //se le pasa el nombre del símbolo a buscar y lo devuelve. Si el símbolo no existe devolveria un símbolo vacio o una indicación de error. Recuerda pasar también el ámbito, ya que puede ocurrir que haya varías variables declaradas con el mismo nombre pero distinto ámbito. void imprimir_tabla_simbolos( ); //imprime la TS Cómo se rellena la TS? La tabla de símbolos se va rellenando conforme van definiéndose variables y funciones a lo largo del programa, en la sección de declaraciones. Vamos insertando símbolos mediante instrucciones de código C (encerrado entre llaves ), en determinados sitios de las producciones. Para ello, debéis analizar MINUCIOSAMENTE la gramática y determinar sobre papel cuáles son estos sitios, y después se implementa. Nos debemos preguntar: Dónde se definen variables y funciones? Por ejemplo: Las variables se definen en la producción Var var id : SimpleType ; SIMB_TAB s; s = buscar($2,ambito); if ( s == NULL ) //insertar el símbolo s.tipo_simb = TIPO_VAR; strcpy(s.nombre,$2); //recordad rellenar en flex la variable yylval con el lexema del id. s.tipo_dato = $4; s.ambito = ambito; //ámbito es una vble que va ir almacenando el ámbito actual insertar(s); Dónde recogemos el tipo de dato? SimpleType char $$ = TIPO_CHAR; integer $$ = TIPO_INT; real $$ = TIPO_REAL; boolean $$ = TIPO_BOOL; De forma similar se insertan en la TS las funciones y la información de sus argumentos y del valor de retorno. 5

6 ANEXO II: Comprobaciones Semánticas Cómo se realizan las comprobaciones semánticas? Las comprobaciones semánticas se realizan insertando instrucciones de código C (encerrado entre llaves ), en determinados sitios de las producciones. Por ejemplo, vamos a ilustrar las comprobaciones de declaración de variables antes de uso en las asignaciones y la compatibilidad de tipos en las asignaciones. AssignStm id = Expression SIMB_TAB s; s = buscar($1,ambito); if ( s! = NULL) if ($3!= s.tipo_dato) printf( Error. Incompatibilidad de tipos en asignación.\n ); printf( Error el identificador %s no existe, $1); En las expresiones es posible almacenar el tipo de dato, de manera que podamos hacer una inferencia de tipos y comprobaciones de forma sencilla. En efecto, si en las variable $i almacenamos el tipo: Expression id SIMB_TAB s; s = buscar($1,ambito); if ( s! = NULL) $$ = s.tipo_dato; printf( Error el identificador %s no existe, $1); numinteger $$ = TIPO_INT; true $$ = TIPO_BOOL; Expression * Expression if ( ($1 == TIPO_BOOL) ($3 == TIPO_BOOL) ) printf( Error. El operador mult no esta definido para tipos de datos BOOL ); if ( ($1 == TIPO_INT) && ($3 == TIPO_INT) ) $$ = TIPO_INT; $$ = TIPO_REAL; De forma similar para el resto de alternativas Cuidado al definir %union en Bison. Nota: La tabla de símbolos como se utiliza en muchas partes del programa se puede definir como variable global. También se pueden utilizar variables auxiliares para ir recogiendo información sobre el tipo de dato, ámbito, etc, conforme nos movemos dentro de las producciones durante el análisis sintáctico. La TS y sus funciones de manipulación se deberían implementar en un modulo independiente, para después enlazar todos los módulos (yylex.c, sintactico.tab.c, tablasimb.c). Con esta información se trata de guiaros para implementar las comprobaciones semánticas y la TS y no hay que entenderla como una obligación. Cada uno puede implementar la estructura de datos y las funciones que considere adecuadas para resolver la práctica. 6

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

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el

Más detalles

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA El objetivo de la práctica es desarrollar un compilador utilizando las herramientas flex y bison y el lenguaje

Más detalles

FLEX: A FAST LEXICAL ANALYZER GENERATOR

FLEX: A FAST LEXICAL ANALYZER GENERATOR FLEX: A FAST LEXICAL ANALYZER GENERATOR Especificación Léxica Fichero.l flex Programa con la implementación del AFD, código fuente, yy.lex.c yy.lex.c Compilador de C milex (ejecutable) Para compilar flex

Más detalles

FLEX: A FAST LEXICAL ANALYZER GENERATOR

FLEX: A FAST LEXICAL ANALYZER GENERATOR FLEX: A FAST LEXICAL ANALYZER GENERATOR Especificación Léxica Fichero.l flex Programa con la implementación del AFD, código fuente, yy.lex.c yy.lex.c Compilador de C milex (ejecutable) cc yylex.c o milex

Más detalles

Yacc/Bison. Introducción

Yacc/Bison. Introducción Yacc/Bison Índice Marina de la Cruz Alfonso Ortega Introducción Uso de Yacc/Bison con Lex/Flex Construcción del programa objetivo casple Comunicación entre las funcionesmain(), yylex() eyyparse() Formato

Más detalles

Análisis semántico. Análisis semántico. Índice (I)

Análisis semántico. Análisis semántico. Índice (I) Análisis semántico Índice (I) Marina de la Cruz Alfonso Ortega Objetivo del análisis semántico Decisiones para la construcción de un analizador semántico Análisis semántico con Bison Nivel de indirección

Más detalles

Bison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison

Bison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison Bison Índice Marina de la Cruz Alfonso Ortega Introducción Uso de Bison con Flex Construcción del programa objetivo alfa Comunicación entre las funciones main(), yylex() e yyparse() Formato del fichero

Más detalles

Procesamiento de Lenguajes (PL) Curso 2015/2016. Práctica 5: traductor a código m2r

Procesamiento de Lenguajes (PL) Curso 2015/2016. Práctica 5: traductor a código m2r Procesamiento de Lenguajes (PL) Curso 2015/2016 Práctica 5: traductor a código m2r Fecha y método de entrega La práctica debe realizarse de forma individual o por parejas 1, y debe entregarse a través

Más detalles

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Apunte Laboratorio ALPI - El lenguaje de programación Pascal Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................

Más detalles

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

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

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

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript Algoritmo

Más detalles

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

Tema 3. Introducción al análisis sintáctico

Tema 3. Introducción al análisis sintáctico Tema 3 Introducción al análisis sintáctico Bibliografía: Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, técnicas y herramientas, Tema 4, pág.: 163-186. Louden, K.C. (1997), Compiler

Más detalles

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009 PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009 PRÁCTICA 2: ANALIZADOR SINTÁCTICO Y TABLA DE SÍMBOLOS. Objetivo de la Práctica Esta práctica tiene como primer objetivo la codificación de un analizador

Más detalles

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

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica. EQUIVALENCIAS BÁSICAS ENTRE PASCAL Y C A continuación se presentan algunas equivalencias básicas entre estos lenguajes de programación : Operadores en lenguaje C: Operador Descripción % Módulo = Asignación

Más detalles

µ-c: Manual de referencia del lenguaje Micro-C

µ-c: Manual de referencia del lenguaje Micro-C µ-c: Manual de referencia del lenguaje Micro-C Introducción Este manual de referencia describe en detalle el lenguaje Micro-C, para ser implementado como proyecto de los cursos de Compíladores I y II en

Más detalles

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Justificación: Se pretende con éste contribuir a que el alumno se inicie y conozca el entorno del IDE en la creación de pequeños programas en java Objetivos:

Más detalles

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

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE) Repaso Lenguaje C OBJETOS Variables Constantes Variable: objeto del ambiente cuyo contenido puede cambiar. Constante: objeto cuyo contenido no puede cambiar. Variables: - un nombre que la identifica. Deben

Más detalles

Java. Introducción a la Programación Orientada a Objetos

Java. Introducción a la Programación Orientada a Objetos Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

Tema 2: Análisis léxico

Tema 2: Análisis léxico Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 21 Fundamentos del análisis

Más detalles

Análisis semántico. Análisis semántico. Índice

Análisis semántico. Análisis semántico. Índice Análisis semántico Índice Marina de la Cruz Alfonso Ortega Notación Objetivo del análisis semántico Pasos para la construcción de un analizador semántico Análisis semántico con Bison Definición de los

Más detalles

Autoestudio 2: Variables y Operadores

Autoestudio 2: Variables y Operadores Autoestudio 2: Variables y es Componentes de un programa Cuando escribimos en un lenguaje de programación tenemos que entender la sintaxis del lenguaje. A continuación empezaremos con la sintaxis básica

Más detalles

Resolución de Problemas y Algoritmos

Resolución de Problemas y Algoritmos RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS CLASE 3 Definición y compatibilidad de tipos de datos. Sentencia condicional CASE. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la

Más detalles

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

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Tema 2: Elementos básicos de un programa. Tipos de datos, variables y constantes Asignación Operadores y expresiones

Tema 2: Elementos básicos de un programa. Tipos de datos, variables y constantes Asignación Operadores y expresiones Tema 2: Elementos básicos de un programa Tipos de datos, variables y constantes Asignación Operadores y expresiones Ejemplo de programa Dados dos números, leídos desde el teclado, visualizar el mayor #include

Más detalles

Unidad II: Análisis semántico

Unidad II: Análisis semántico Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de

Más detalles

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN CONTINUA CURSO 2009/2010

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN CONTINUA CURSO 2009/2010 PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN CONTINUA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA El objetivo de la práctica es desarrollar un compilador utilizando las herramientas flex y bison y el leguaje

Más detalles

Introducción a la Programación

Introducción a la Programación Introducción a la Programación Fundamentos de Programación Ingeniería Informática en Sistemas de Información Alicia Troncoso 1 Contenido l Introducción l Mi primer programa l Etapas a seguir en la programación

Más detalles

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores aritméticos Son operadores binarios (requieren siempre dos operandos) que realizan las operaciones aritméticas

Más detalles

LABORATORIO DE PROCESADORES DE LENGUAJE. Práctica 3: Analizador léxico/sintáctico y generación de código intermedio con PCCTS

LABORATORIO DE PROCESADORES DE LENGUAJE. Práctica 3: Analizador léxico/sintáctico y generación de código intermedio con PCCTS 13048 - LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2005-2006 Práctica 3: Analizador léxico/sintáctico y generación de código intermedio con PCCTS Esta práctica consta de dos partes diferenciadas. En

Más detalles

Datos Elementales y formato de un programa en Java

Datos Elementales y formato de un programa en Java Datos Elementales y formato de un programa en Java PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Datos, variables y mi primer programa 1 Introducción a la programación o Programa:

Más detalles

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante. Javascript (II) 1 Elementos Básicos: Comentarios: Para una línea // Esto es un Comentario Para un bloque /*......... */ Literales: Valores que puede tomar una variable o una constante. Ejemplos: "Soy una

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Cuando la complejidad de los problemas aumenta, la tarea de hallar una solución

Más detalles

Tema 05: Elementos de un programa en C

Tema 05: Elementos de un programa en C Tema 05: Elementos de un programa en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1

Más detalles

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona

Más detalles

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,

Más detalles

COMPILADORES. Tema 4. Análisis semántico

COMPILADORES. Tema 4. Análisis semántico COMPILADORES Tema 4. Análisis semántico Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido 1. Funcionalidad del

Más detalles

Introducción a c++ Introducción a la programación EIS Informática III

Introducción a c++ Introducción a la programación EIS Informática III Introducción a c++ Un lenguaje de programación es un lenguaje formal diseñado para realizar procesos que pueden ser llevados a cabo por máquinas como las computadoras. Pueden usarse para crear programas

Más detalles

Tema 2: Análisis léxico

Tema 2: Análisis léxico Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 22 Fundamentos del análisis

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Elementos de lenguaje: Identificadores Tipos de datos 2 Tipos de datos primitivos 3 Tipos de datos referenciados Clases Interfaces Arrays

Más detalles

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

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANALIZADOR LÉXICO (AL) El Analizador léxico (scanner), lee la secuencia de caracteres del programa fuente, caracter a caracter, y los agrupa para formar unidades

Más detalles

Manual de referencia del lenguaje Micro-C

Manual de referencia del lenguaje Micro-C Manual de referencia del lenguaje Micro-C Profesor: Egdares Futch H. Introducción Una parte importante de los cursos de (Ingeniería de Lenguajes de Programación) se centra en la experiencia de escribir

Más detalles

UNIDAD V. Analisis Semantico. 5.1 Introduccion. Analizador Semántico. Verifica que el significado de las construcciones del lenguaje tengan sentido.

UNIDAD V. Analisis Semantico. 5.1 Introduccion. Analizador Semántico. Verifica que el significado de las construcciones del lenguaje tengan sentido. UNIDAD V Analisis Semantico 5.1 Introduccion Analizador Semántico. Ejemplo: Verifica que el significado de las construcciones del lenguaje tengan sentido. Tareas del analizador semántico: 1) Comprobación

Más detalles

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

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,

Más detalles

24/8/2018. cuota monto/cantcuotas

24/8/2018. cuota monto/cantcuotas PROBLEMA: A partir del monto de un crédito y la cantidad de cuotas se desea calcular el monto de cada cuota. Datos de entrada y de salida? Algoritmo ValorDeCuota DE: monto, cantcuotas (enteros) DS: cuota

Más detalles

Índice general 7. Presentación 15

Índice general 7. Presentación 15 ÍNDICE GENERAL Índice general 7 Presentación 15 1. Introducción 19 1.1. Antecedentes históricos de la computación................... 19 1.2. Definiciones previas............................... 24 1.3.

Más detalles

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 2. Lenguaje de programación y ejecución de un programa 1 Léxico, sintaxis y semántica de un lenguaje #include #include

Más detalles

LENGUAJE FORTRAN. ESTRUCTURAS Y SENTENCIAS

LENGUAJE FORTRAN. ESTRUCTURAS Y SENTENCIAS LENGUAJE FORTRAN. ESTRUCTURAS Y SENTENCIAS BÁSICAS Programación en Fortran Valentín Moreno ÍNDICE 1. Introducción al lenguaje Fortran 2. Estructura de un programa 3. Variables y constantes 4. Tipos de

Más detalles

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

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript - Programación

Más detalles

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO LICENCIATURA EN INGENIERÍA DE SOFTWARE UNIDAD DE APRENDIZAJE: PROGRAMACIÓN Créditos institucionales de la UA: 8 Material visual: Diapositivas Unidad de competencia

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya ELEMENTOS BÁSICOS DE C++: DECLARACIÓN DE VARIABLES A través de operaciones aritméticas (suma, resta, etc.) y lógicas (por ejemplo, comparaciones) los programas manipulan datos tales como números y caracteres.

Más detalles

Yacc/Bison. Índice. Construcción del programa objetivo Flujo de control de las funciones yylex() e yyparse()

Yacc/Bison. Índice. Construcción del programa objetivo Flujo de control de las funciones yylex() e yyparse() Yacc/Bison Índice Marina de la Cruz Introducción Uso de Yacc/Bison con Lex/Flex Construcción del programa objetivo Flujo de control de las funciones yylex() e yyparse() Formato del fichero de especificación

Más detalles

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

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2013-2014

Más detalles

Descripción de un Programa

Descripción de un Programa Unidad 2 Descripción de un Programa 1 El Lenguaje C (1) El lenguaje C fue creado en 1972 por Ken L. Thompson y Dennis M. Ritchie en los Laboratorios Bell. Es evolución de un lenguaje más antiguo: B (a

Más detalles

Esquemas repetitivos en Fortran 90

Esquemas repetitivos en Fortran 90 Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,

Más detalles

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

El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad type con la cadena text/javascript: Javascript Qué es JavaScript? Es un lenguaje de scripting (Código interno en las páginas HTML) necesario para los elaboradores de sitios Web, mediante el cual se puede hacer que las páginas sean activas

Más detalles

10 Introducción a BISON/YACC

10 Introducción a BISON/YACC 10 Introducción a BISON/YACC Objetivos: Construir un analizador sintáctico haciendo uso de la herramienta Bison Recursos: Maquina virtual Linux distribución Bodhi LXterminal, Flex, Bison Introducción GNU

Más detalles

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

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2016-2017

Más detalles

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS Programación en Fortran Valentín Moreno ÍNDICE 1. Subprogramas 2. Funciones 3. Subrutinas 2 3 1. SUBPROGRAMAS 1. SUBPROGRAMAS Si necesitamos usar con frecuencia

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Tema: Análisis Semántico

Tema: Análisis Semántico Compiladores. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Semántico Contenido En esta guía se desarrollará una tabla de símbolos y se asociará al analizador

Más detalles

PRÁCTICA. Apellidos, Nombre: Calificación:

PRÁCTICA. Apellidos, Nombre: Calificación: Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de 2004 3 er Curso de I.T. Informática de Sistemas. Apellidos, Nombre: Calificación: PRÁCTICA El lenguaje Protolen posee

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. Tema 2. TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. PARTE : VARIABLES, OPERADORES Y CONSTANTES.. INTRODUCCIÓN AL LENGUAJE C 2. PROGRAMAS BÁSICOS EN LENGUAJE C 3. DATOS EN LENGUAJE C

Más detalles

PARTE I ANALISIS LEXICO

PARTE I ANALISIS LEXICO PARTE I ANALISIS LEXICO Un cierto lenguaje de programación está formado, entre otros elementos, por los siguientes: 1. Palabras clave: alias, check, class, creation, do, else, elseif,, ensure, feature,

Más detalles

28/08/2018. Dra. Jessica Andrea Carballido. cuota monto/cantcuotas

28/08/2018. Dra. Jessica Andrea Carballido. cuota monto/cantcuotas PROBLEMA: A partir del monto de un crédito y la cantidad de cuotas se desea calcular el monto de cada cuota. Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Datos de entrada y de salida? Algoritmo ValorDeCuota

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones

Más detalles

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28 Componentes Básicos InCo InCo Componentes Básicos 1 / 28 Modelo de Computación Vemos al computador como un procesador de datos. +------------+ Entrada ===> Computador ===> Salida +------------+ InCo Componentes

Más detalles

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase 1. Ejecute el siguiente programa y diga que hace la función calcula: #include

Más detalles

Analizador Sintáctico RECURSIVO

Analizador Sintáctico RECURSIVO Compiladores 1 Argueta Cortes Jairo I. Universidad Nacional Autónoma de México Facultad de Ingeniería Compiladores Grupo 1 Analizador Sintáctico RECURSIVO ALUMNOS: ARGUETA CORTES JAIRO I. MENDOZA GAYTAN

Más detalles

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

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso. Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos

Más detalles

GUÍA BÁSICA DE SCHEME v.4

GUÍA BÁSICA DE SCHEME v.4 Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los

Más detalles

PRINCIPIOS DE PROGRAMACIÓN. Mtro. en Ingeniería de Software. Especialidad en e-commerce Ismael Jiménez Hernández

PRINCIPIOS DE PROGRAMACIÓN. Mtro. en Ingeniería de Software. Especialidad en e-commerce Ismael Jiménez Hernández PRINCIPIOS DE PROGRAMACIÓN Mtro. en Ingeniería de Software. Especialidad en e-commerce Ismael Jiménez Hernández Consideraciones Generales Instructor: Ismael Jiménez Hernández Duración: 3.2 horas/semana

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 En esta práctica trabajaremos con ANTLR a nivel semántico utilizando gramáticas con atributos. ANTLR permite implementar con facilidad los dos modelos

Más detalles

Conceptos Básicos. Programación

Conceptos Básicos. Programación Conceptos Básicos Programación Introducción Lenguaje. Código Máquina. Lenguajes de alto nivel. Criterios clasificación Nivel de abstracción. Propósito. Evolución histórica. Manera de ejecutarse. Paradigma

Más detalles

Resolución de Problemas y Algoritmos

Resolución de Problemas y Algoritmos RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS CLASE Estructura de control condicional. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur,

Más detalles

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

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal. LENGUAJE DE PROGRAMACIÓN TURBO PASCAL El lenguaje de programación de alto nivel Pascal fue diseñado el 1968 por Niklaus Wirth con una finalidad eminentemente pedagógica El 1983, el Pascal fue estandarizado

Más detalles

Tema 5 Tabla de Símbolos

Tema 5 Tabla de Símbolos Traductores, Compiladores e Intérpretes 1 Tema 5 También se la llama tabla de nombres o tabla de identificadores y tiene dos funciones principales: - Efectuar chequeos semánticos. - Generación de código.

Más detalles

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados

Más detalles

UNIDAD 2 Descripción de un programa

UNIDAD 2 Descripción de un programa Descripción de un programa Estructura general de un programa. Elementos básicos. Tipos de datos simples: enteros, reales y carácter. Representación de datos en memoria. Operaciones sobre tipos de datos

Más detalles

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola) Objetivos de la sesión Entender el tipo de programas que se pueden realizar con aplicaciones de consola. Conocer el concepto de variable, la forma en que se declaran y su utilización. Conocer la forma

Más detalles

Tipos de Datos Simples Contenido del Tema

Tipos de Datos Simples Contenido del Tema T E M A 3 Tipos de Datos Simples Contenido del Tema 3.1. Concepto de Tipo 3.1.1. Elementos básicos: atributos y operaciones 3.1.2. Tipos. Concepto y necesidad 3.1.3. Operadores básicos 3.2. Tipos de Datos

Más detalles

Tema 1: Introducción a C

Tema 1: Introducción a C Fundamentos de Informática I ETSII Tema 1: Introducción a C. Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Tema 1: Introducción a C Índice: Objetivos Conceptos

Más detalles

8- LEX-Expresiones regulares

8- LEX-Expresiones regulares 8- LEX-Expresiones regulares Objetivos: Utilizar la herramienta KEX para trabajar con expresiones regulares Recursos: Maquina virtual Linux distribución Bodhi LXterminal y FLEX Introducción Flex le permite

Más detalles

TEMA 02 TIPOS, OPERADORES Y EXPRESIONES

TEMA 02 TIPOS, OPERADORES Y EXPRESIONES TEMA 02 TIPOS, OPERADORES Y EXPRESIONES 2.1.- Introducción. 2.2.- Datos. 2.3.- Entrada y salida básica. 2.4.- Modificadores. 2.5.- Cadenas de caracteres. 2.6.- Operadores. 2.7.- Precedencia de operadores.

Más detalles