Está en la página 1de 11

Universidad Tecnológica Nacional Facultad Regional Resistencia

Departamento de Ingeniería en Sistemas de Información


Sintaxis y Semántica de Lenguajes

Sintaxis y Semántica del Lenguaje

Trabajo Práctico Integrador:


Diseño e implementación
de Lexer y Parser

Ciclo lectivo: 2021

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

Ing. Gabriela P. TOMASELLI e-mail: gabriela.tomaselli@gmail.com


Ing. Rodrigo VIGIL e-mail: rodrigovigil@gmail.com
Ing. Nicolas G. Tortosa e-mail: nicotortosa@gmail.com
Ing. Juliana Torre e-mail: julitorre025@gmail.com

Interprete de Pseudocodigo 2021 1/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

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

Interprete de Pseudocodigo 2021 2/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

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

• Metodología de entregas parciales y final.

Interprete de Pseudocodigo 2021 3/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

o Un archivo comprimido deberá ser “subido” a la tarea correspondiente dentro del


curso en el campus virtual.
o Dicho archivo comprimido deberá contener:
# directorio doc. Documentación del trabajo (véase el apartado n° 6)
# directorio src. archivos fuente del proyecto (flex, bison, python,archivos de C
(“.c”, “.h”)
# directorio bin. Archivos binarios listos para ser ejecutados. (lexer y scanner)
# directorio prueba. Archivos de ejemplo de pseudocódigo con la extensión “.e”

3. Características de lenguaje de pseudocódigo


a) Componentes léxicos o tokens
l Palabras reservadas
# _div , _mod
# _o, _y, _no,
# leer,
# escribir
# si, entonces, sino, fin_si
# mientras, hacer, fin_mientras
# repetir, hasta_que
# para, hasta, fin_para
# segun, fin_segun
# accion, _es, fin_accion, proceso, ambiente

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

Interprete de Pseudocodigo 2021 4/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

# 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 relacionales de números y cadenas:


#menor que: <
#menor o igual que: <=
#mayor que: >
#mayor o igual: >=
#igual que: =
#distinto que: <>
Por ejemplo:
# si A es una variable numérica y control una variable alfanumérica, se pueden generar
las siguientes expresiones relacionales:
(A >= 0) _y (control <> “stop”)

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 */

#De varias líneas: delimitados por los símbolos /* y */


/* ejemplo maravilloso
de un comentario
de tres líneas */
#De una línea: Todo lo que siga al carácter // o @ hasta el final de la línea.
// ejemplo espectacular de comentario de una línea
@ Otro ejemplo de linea

l Fin de sentencia (implementación opcional)


Punto y coma ;
# Se utilizará para indicar el fin de una sentencia.

b) Sentencias

o Inicio y fin de Algoritmo


Accion identificador _es
sentencias
fin_accion
# Declara nombre del algoritmo a utilizar, delimita las sentencias que forman el programa

Interprete de Pseudocodigo 2021 5/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

o Inicio de declaración de variables


Ambiente
identificador : tipo de dato
# Declara nombre de variable de un tipo determinado

o Inicio de declaración de sentencias


Proceso
sentencias
# Declara inicio de proceso o conjunto de 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

# Sentencia condicional simple


si (condición) entonces
sentencias
fin_si
# Sentencia condicional compuesta
si (condición) entonces
sentencias
sino
sentencias
fin_si
# Bucle “mientras”
mientras (condición) hacer
sentencias
fin_mientras
#Una condición será una expresión relacional o una expresión lógica compuesta.
# Bucle “repetir”
repetir
sentencias
hasta_que (condición)
# Bucle “para”
para (identificador:=valor_inicial) hasta valor_final, incremento
hacer
sentencias

Interprete de Pseudocodigo 2021 6/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

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.

5. Modos de ejecución del intérprete


El intérprete se podrá ejecutar de dos formas diferentes:
• Modo interactivo
o Se ejecutarán las instrucciones tecleadas desde un terminal de texto
ipe.exe
> ...
o Se utilizará el carácter de fin de archivo para terminar la ejecución: Control + D
• Ejecución desde un archivo
o Se interpretarán las sentencias de un archivo pasado como argumento desde
la línea de comandos
o El archivo deberá tener la extensión “.e”
ipe.exe ejemplo.e

6. Documentación del trabajo


Se deberá elaborar un documento de texto con las siguientes características:
• Portada
o Título del trabajo desarrollado

Interprete de Pseudocodigo 2021 7/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

o Nombre y apellidos de las personas que forman el grupo


o Nombre de la asignatura
o Nombre de la carrera
o Primer cuatrimestre
o Curso académico: 2021
o Universidad y regional
o Lugar y fecha
• Índice
o Las páginas deberán estar numeradas.
• Introducción
o Breve descripción del trabajo realizado y de las partes del documento.
o Descripción de cómo se implementó la solución.
o Información y requerimientos de software para ejecutar y recompilar el tp (versiones
de compiladores, herramientas, plataforma, etc).
• Lenguaje de pseudocódigo
o Se corresponde con el apartado no 3 de este documento
# Componentes léxicos
# Sentencias
o Observación: Si se ha ampliado el lenguaje de pseudocódigo entonces se deberá
indicar en este apartado.
• Gramática
o Descripción de cada regla de la gramática libre de contexto a utilizar.
# Símbolos de la gramática
# Símbolos terminales (componentes léxicos)
# Símbolos no terminales
#Reglas de producción de la gramática
# Se valorará la inclusión de gráficos explicativos.
• Análisis léxico
o Descripción del archivo del lexer para definir y reconocer los componentes léxicos.
• Análisis sintáctico:
o Descripción del archivo del parser utilizado para definir la gramática libre de contexto

• 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.

Interprete de Pseudocodigo 2021 8/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

o Se valorará la inclusión de gráficos o figuras.


o Se valorará la cantidad, originalidad y complejidad de los ejemplos propuestos.
o También se valorará:
# la acentuación,
# la corrección ortográfica
# y la calidad y claridad de la redacción.
o Conocimiento que cada integrante del grupo aporte durante la exposición final del
trabajo.

Funcionamiento del intérprete (software): 60 %

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>

# en particular, deberá ejecutar correctamente el ejemplo propuesto por el


grupo y dos ejemplos más: uno al azar de los presentados por otros grupos y otro ejemplo
elaborado por la cátedra.
#Ejemplo utilizado por la cátedra: “Imprimir todos los números primos
menores o iguales a un número ingresado”

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:

Programa basico que imprime hola mundo


*/

ACCION HolaMundo _es

Interprete de Pseudocodigo 2021 9/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

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:

Programa basico que calcula el factorial de un numero ingresado


Ademas la parte de comentario incluye caracteres ….
*/
ACCION factorial _es
Ambiente
res_factorial : entero
nro_calculo : entero

/* calcula el factorial de un numero,


pide ingresar un numero
y calcula cual es su factorial
finaliza imprimiendo el resultado
#*/

Proceso
escribir(“Ingrese numero a calcular su factorial:”);
leer(nro_calculo);
res_factorial := 1;

mientras (nro_calculo <> 0) hacer;


res_factorial := res_factorial * nro_calculo;
nro_calculo := nro_calculo - 1;
fin_mientras

escribir(“El factorial del numero ingresado es :”, res_factorial);

fin_accion // ACA termina el programa. ;)

Interprete de Pseudocodigo 2021 10/11


Universidad Tecnológica Nacional Facultad Regional Resistencia
Departamento de Ingeniería en Sistemas de Información
Sintaxis y Semántica de Lenguajes

Numeros Primos
/** Universidad Tecnologica Nacional
Facultad Regional Resistencia
Sintaxis y Semántica de los Lenguajes
Ciclo:2021
Autor:

Programa que calcula si un numero ingresado es un numero primos .


*/

ACCION NumerosPrimos _es


Ambiente
nro_ingresado : numero
bool : numero
aux : numero

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

Interprete de Pseudocodigo 2021 11/11

También podría gustarte