Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SSL2021-TP1 InterpreteLenguaje
SSL2021-TP1 InterpreteLenguaje
Equipo docente:
Director de Cátedra
Nombre y Apellido: Ing. Gabriela P. TOMASELLI
Categoría docente: Profesora Asociada
e-mail: gabriela.tomaselli@gmail.com
Docentes
Contenido
Indice de Contenido
1. Introducción.............................................................................................3
Competencias................................................................................................................. 3
Objetivo.......................................................................................................................... 3
2. Elaboración y entrega..............................................................................3
3. Características de lenguaje de pseudocódigo..........................................4
a) Componentes léxicos o tokens...................................................................................4
Palabras reservadas................................................................................................................. 4
Identificadores......................................................................................................................... 4
Tipos de Datos:....................................................................................................................... 4
Operadores.............................................................................................................................. 4
Operadores relacionales de números y cadenas:..................................................................... 5
Operadores lógicos.................................................................................................................. 5
Comentarios............................................................................................................................ 5
Fin de sentencia (implementación opcional)............................................................................ 5
b) Sentencias.................................................................................................................. 5
4. Control de errores....................................................................................7
5. Modos de ejecución del intérprete...........................................................7
• Modo interactivo......................................................................................................... 7
• Ejecución desde un archivo........................................................................................7
6. Documentación del trabajo......................................................................7
7. Criterios de evaluación............................................................................8
Documentación y Presentación: 40 %............................................................................8
Funcionamiento del intérprete (software): 60 %............................................................9
8. Algoritmos de ejemplo.............................................................................9
Hola Mundo.................................................................................................................... 9
Factorial de un número................................................................................................10
Numeros Primos........................................................................................................... 10
1. Introducción
Competencias
El presente trabajo práctico integrador pretende desarrollar las siguientes competencias de la
asignatura:
# Capacidad para conocer los fundamentos teóricos de los lenguajes de programación y
las técnicas de procesamiento léxico, sintáctico asociadas, y saber aplicarlas para la creación,
diseño y procesamiento de lenguajes de programación .
# Capacidad de diseño, y habilidad instrumental necesaria para llevar a cabo proyectos
de cierta envergadura, cuya complejidad exige la utilización de conocimientos adquiridos en
diversas asignaturas a lo largo de la carrera.
#Aptitud y actitud para trabajo en grupo.
Objetivo
Se debe elaborar un intérprete de pseudocódigo en español utilizando algún lenguaje de
programación o un generador de lexer y parser.
Para ello deberán construir los analizadores léxico y sintáctico. El analizador lexicográfico es un
módulo que recibe una secuencia de caracteres que componen el programa a analizar y lo
convierte lógicamente en una secuencia de tokens. El analizador sintáctico recibe la secuencia
de tokens que le entrega el analizador lexicográfico y verifica que la secuencia pueda ser
generada por la gramática del lenguaje.
Hay dos grupos de herramientas que se pueden usar para generar los analizadores:
1) Se utilizan expresiones regulares y autómatas finitos para el análisis lexicográfico y la
técnica LALR para el análisis sintáctico. Ejemplos de esto son lex y yacc, que generan código C
o C++, o JLex y CUP, que generan código Java. flex y bison son implementaciones libres y
gratuitas de lex y yacc.
2) El otro utiliza la técnica LL(k) tanto para el análisis léxico como para el sintáctico, generando
parsers descendentes recursivos. Ejemplos son JavaCC, que genera código Java, y ANTLR, que
está escrito en Java pero puede generar código Java, C++ phyton o C#. ANTLR se puede
conseguir en http://www.antlr.org/.
https://en.wikipedia.org/wiki/Comparison_of_parser_generators
2. Elaboración y entrega
• Modo de realización del trabajo
o El trabajo se debe realizar de forma grupal en grupos de hasta cuatro (4) alumnos,
donde cada integrante deberá presentar una parte del trabajo durante la presentación final.
o Cada grupo estará representado por un delegado, encargado de subir las entregas
parciales y el trabajo final al campus virtual, enviará consultas o dudas,etc. A su vez cada
grupo tendrá un docente designado como tutor encargado del seguimiento del trabajo,
responder inquietudes y la evaluación final.
• Presentaciones.
Se preveen tres instancias de presentación:
. 1er entrega: Primera documentación del proyecto y gramática a generar.
Domingo 25 de Abril de 2021
. 2da entrega: Presentación del lexer o scanner que reconozca los tokens del
lenguaje.
Domingo 30 de Mayo de 2021
. 3er entrega final: Presentación de trabajo completo. Lexer y parser, incluye la
presentación del trabajo ante la clase con una exposición de no más de 20 minutos.-
Domingo 4 de Julio de 2021
Observaciones
# No se distinguirá entre mayúsculas ni minúsculas.
# Las palabras reservadas no se podrán utilizar como identificadores.
l Identificadores
Características
# Estarán compuestos por una serie de letras, dígitos y el guión bajo.
# Deben comenzar por una letra
# No podrán terminar con el símbolo de guión bajo, ni tener dos guión bajo
seguidos.
Identificadores válidos:
# dato, dato_1, dato_1_a
Identificadores no válidos:
# _dato, dato_, dato__1
No se distinguirá entre mayúsculas ni minúsculas.
Tipos de Datos:
l Número
# Se utilizarán números enteros, reales de punto fijo.
# Todos ellos serán tratados conjuntamente como números.
l Cadena
# Estará compuesta por una serie de caracteres delimitados por comillas dobles:
“Ejemplo de cadena”
“Ejemplo de cadena con salto de línea \n y tabulador \t”
# Deberá permitir la inclusión de la comilla doble utilizando la barra (\):
“Ejemplo de cadena con \” comillas\” simples”.
l Operadores
l Operador de asignación
# asignación: :=
l Operadores aritméticos
#suma: +
# Binario: 2 + 3
#resta: -
# Binario: 2 - 3
#producto: *
#división real: /
#división entera: _div
#módulo: _mod
#potencia: **
l Operadores lógicos
#disyunción lógica: _o
#conjunción lógica: _y
#negación lógica: _no
Por ejemplo: (A >= 0) _y _no (control <> “stop”)
l Comentarios
#De encabezado o descripción de file: delimitado por símbolos /** y */
/** Fantástico comentario de descripción de contenido de archivos
puede incluir varias lineas */
b) Sentencias
o Asignación
identificador := expresión numérica
# Declara a identificador como una variable numérica y le asigna el valor de la expresión
numérica.
# Las expresiones numéricas se formarán con números, variables numéricas y operadores
numéricos.
identificador := “expresión alfanumérica”
# Declara a identificador como una variable alfanumérica y le asigna el valor de la expresión
alfanumérica.
o Lectura
Leer (identificador)
#Declara a identificador como variable numérica o alfanumérica y le asigna el caracter leído.
o Escritura
Escribir (expresión alfanumérica y/o identificadores)
#El valor de la expresión numérica es escrito en la pantalla.
# Se debe permitir la interpretación de comandos de saltos de línea (\n) y tabuladores (\t) que
puedan aparecer en la expresión alfanumérica.
escribir (“\t Introduzca el dato \n”);
escribir(“escribir texto mas identificador”, identificador)
o Sentencias de control
fin_para
Observación
o Se valorará la inclusión de nuevos operadores o sentencias
# Ejemplos
# Operadores unarios: ++, --
# Operadores aritméticos y de asignación: +:=, -:=,
etc.
# Sentencia “según”
segun (expresión) hacer
valor v1: ...
valor v2: ...
...
defecto: ...
fin_segun
Etc.
4. Control de errores
El intérprete deberá controlar de errores:
• Léxicos:
o Identificadores y sentencias mal escritas.
o Utilización de símbolos no permitidos.
o Etc.
• Sintácticos:
o Sentencias de control más escritas.
o Sentencias con argumentos incompatibles.
o Etc.
o Observación : Se valorará la utilización de “reglas de producción de control de
errores” que no generen conflictos.
• Semánticos
o Argumentos u operandos incompatibles
• De ejecución
o Sentencia “para” que pueda generar un bucle infinito.
o archivo de entrada inexistente o con una extensión incorrecta.
o Etc.
• Funciones auxiliares
o Se deben indicar y describir las funciones auxiliares que se hayan codificado.
• Modo de obtención del intérprete
o Nombre y descripción de cada archivo utilizado
• Modo de ejecución del intérprete
o Interactiva
o A partir de un archivo
• Ejemplos
o Al menos se deben proporcionar dos ejemplos.
o Se valorará la cantidad, originalidad y complejidad de los ejemplos propuestos.
o También se puede incluir el ejemplo propuesto por el docente y/o otros grupos.
• Conclusiones:
o Reflexión sobre el trabajo realizado.
o Puntos fuertes y puntos débiles del intérprete desarrollado.
• Bibliografía o referencias web.
• Anexos
o Se podrían incluir aquellos anexos que se consideren oportunos para mejora la calidad
de la documentación
7. Criterios de evaluación
Documentación y Presentación: 40 %
Se tendrá en cuenta lo indicado en el apartado no 6.
o El código elaborado deberá estar documentado.
o El intérprete deberá:
# funcionar correctamente tanto de forma interactiva como ejecutando las
instrucciones desde los archivos de ejemplo .
# Indicar si el análisis fue exitoso (sin errores) , en otro caso indicar los errores
existentes (indicando tipo de error , numero de línea y cadena que genero el error)
# Traducir la documentación, generando un archivo de texto HTML ,incluyendo
todos los comentarios del archivo fuente. Formateado de la siguiente manera:
$Nombre de archivo: igual al archivo fuente con extensión HTM o HTML.
$Comentarios de Inicio: encerrados entre tags <H2> y negrita.
$ Comentarios de bloque: encerrados entre tags <H4>
$Comentarios de linea: párrafo común .<p>
o Se valorará
# la completitud del lenguaje de pseudocódigo.
# La calidad en el diseño del lenguaje y la gramática.
# El control de errores.
# La ampliación del lenguaje de pseudocódigo.
Observación:
# Además, se valorará la asistencia a clase de prácticas y la resolución de dificultades
encontradas durante la elaboración del trabajo.
8. Algoritmos de ejemplo
Hola Mundo
/** Universidad Tecnologica Nacional
Facultad Regional Resistencia
Sintaxis y Semantica de los Lenguajes
Ciclo:2021
Autor:
Ambiente
/* Definimos el ambiente
variables que usamos
*/
nombre_usuario : cadena
@ clasico algoritmo de Hola Mundo
Proceso
escribir("Ingrese su nombre de usuario:"); // Imprimir por pantalla
leer(nombre_usuario); // Leer nombre usuario
escribir("Hola Mundo"); // Imprimir por pantalla
escribir("Bienvenido al super lexer y parser del pseudocodigo", nombre_usuario);
// Imprimir por pantalla
fin_accion //Fin de programa
Factorial de un número
/** Universidad Tecnologica Nacional
Facultad Regional Resistencia
Sintaxis y Semantica de los Lenguajes
Ciclo:2021
Autor:
Proceso
escribir(“Ingrese numero a calcular su factorial:”);
leer(nro_calculo);
res_factorial := 1;
Numeros Primos
/** Universidad Tecnologica Nacional
Facultad Regional Resistencia
Sintaxis y Semántica de los Lenguajes
Ciclo:2021
Autor:
Proceso
Escribir(“ingresé número entero para saber si es número primo:”);
leer (nro_ingresado);
para (aux := 2) hasta nro_ingresado, 1 hacer;
modulo := 2;
bool := 1;
mientras (bool = 1 _y modulo < aux) hacer ;
si (aux _mod modulo =0) entonces;
bool := 0;
sino;
modulo := modulo + 1;
fin_si;
fin_mientras;
si (bool = 1) entonces;
escribir ("el numero es primo", aux);
fin_si;
fin_para
fin_accion @fin programa