OLC2 1SVAC Proyecto 2 V2 PDF

Title OLC2 1SVAC Proyecto 2 V2
Author CARLOS EDUARDO MONZON DUARTE
Course Organización de Lenguajes y Compiladores 2
Institution Universidad de San Carlos de Guatemala
Pages 14
File Size 612.7 KB
File Type PDF
Total Downloads 459
Total Views 919

Summary

Warning: TT: undefined function: 32 Universidad de San Carlos de GuatemalaMinorC Organización de Lenguajes y Compiladores Facultad de Ingeniería Junio- PROYECTO M. Luis Espino Competencias Índice Competencia general Competencias específicas Descripción Componentes IDE Consola Flujo Resaltado de sint...


Description

Universidad de San Carlos de Guatemala Facultad de Ingeniería Organización de Lenguajes y Compiladores 2 Junio 2020 M.Sc. Luis Espino

PRO PROYEC YEC YECTO TO 2 Mi MinorC norC

Índi Índice ce 1.

Competencias .................................................................................................................. 2 1.1.

Competencia general ............................................................................................... 2

1.2.

Competencias específicas ........................................................................................ 2

2.

Descripción ...................................................................................................................... 2

3.

Componentes .................................................................................................................. 2

4.

5.

6.

3.1.

IDE ............................................................................................................................ 2

3.2.

Consola ..................................................................................................................... 3

3.3.

Flujo .......................................................................................................................... 3

3.4.

Resaltado de sintaxis ................................................................................................ 4

Sintaxis de MinorC ........................................................................................................... 4 4.1.

Elementos léxicos ..................................................................................................... 4

4.2.

Tipos de datos .......................................................................................................... 5

4.3.

Expresiones y operadores ........................................................................................ 6

4.4.

Declaraciones ........................................................................................................... 8

4.5.

Funciones ................................................................................................................. 9

4.6.

Ejemplos ................................................................................................................... 9

Reportes ........................................................................................................................ 12 5.1.

Reporte de errores ................................................................................................. 12

5.2.

Reporte de la tabla de símbolos ............................................................................. 12

5.3.

Reporte del AST y del GDA ..................................................................................... 12

5.4.

Reporte gramatical ................................................................................................. 12

Cuestiones de entrega ................................................................................................... 13

6.1.

Entregables............................................................................................................. 13

6.2.

Consideraciones ..................................................................................................... 13

6.3.

Entrega ................................................................................................................... 13

6.4.

Compensación a la excelencia ................................................................................ 14

1. Comp Compe etencia tenciass 1.1. Compet Competenc enc encia ia ge gener ner neral al El estudiante realiza la fase de análisis y síntesis de un compilador para un lenguaje de programación de alto nivel, para este caso MinorC, utilizando la herramienta PLY. 1.2. Co Com mpetenc petencias ias esp especí ecí ecífic fic ficas as -

El estudiante utiliza una herramienta para construir el analizador léxico y sintáctico. El estudiante implementa la traducción dirigida por la sintaxis utilizando reglas semánticas con atributos sintetizados. El estudiante genera una traducción de código de alto nivel, para este caso MinorC, a código de tres direcciones con la sintaxis Augus.

2. Desc Descripció ripció ripción n MinorC es un subconjunto del lenguaje C, creado con el fin de poner en práctica los conceptos del proceso de compilación, para cubrir las competencias del curso.

3. Comp Componen onen onentes tes 3.1. IDE El IDE debe tener una apariencia básica, se puede tomar como base el SimpleIDE de Propeller C:

Fuente: SimpleIDE

Entre las operaciones mínimas que debe tener el IDE están: - En Archivo: Nuevo, Abrir, Guardar, Guardar Como, Cerrar y Salir. - En Editar: las operaciones básicas de copiar, pegar, cortar, buscar, reemplazar, etc. - En Ejecutar: ejecutar utilizando el analizador sintáctico ascendente o el descendente, abajo los tipos de reportes al ejecutar. Para la opción ascendente debe haber una opción ejecutar paso a paso para ver el estado de la pila (una forma de debbuging). - En Opciones: cambiar color del fondo, quitar los números de línea, etc. - En Ayuda: Ayuda y Acerca de. 3.2. Co Cons ns nsola ola El IDE debe tener un área de consola para ejecutar la interpretación del código, se puede tomar como base la consola de CodeBlocks http://www.codeblocks.org/, con la salvedad que en este proyecto la consola debe estar en la misma ventana del IDE. 3.3. Flujo El flujo se describe de la siguiente manera: 1. Se ingresa el código en MinorC ya sea por archivo o editado. 2. Se ejecuta el código con el menú y/o con un ícono (o paso a paso). 3. Se transforma el código de MinorC en código de Augus, como representación intermedia. (tomar en cuenta utilizar las técnicas descritas en el libro de texto,

como la de backpatch, los GDA los cuales podrían generar código de tres direcciones distinto) 4. Se optimiza el código de Augus. (la optmización basada en las reglas de bloques y mirilla descritas en el libro de texto) 5. El resultado de la ejecución se muestra en la consola. 6. Opcionalmente se pueden acceder a los reportes. En la ejecución se debe implementar los dos métodos de recuperación: uno para los errores léxicos y sintácticos descartando hasta el “;”; y otro para los errores semánticos, se debe descartar la instrucción con error. 3.4. Resalt esaltado ado de sinta sintaxis xis Para el resaltado de la sintaxis se debe utilizar como base el IDE CodeBlock:

4. Sin Sintaxi taxi taxiss de M MinorC inorC MinorC es un subconjunto de C (cualquier ambigüedad de la sintaxis se arregla con la referencia de GNU C). MinorC está compuesto por los siguientes elementos: 4.1. Elem lement ent entos os léxic léxicos os Identificadores: es secuencia de letras, y/o números, y/o guión bajo, que inicia con una letra. Distingue entre mayúsculas y minúsculas.

Palabras reservadas: identificadores reservados. Entre algunos están: auto break case char const continue default do double else enum extern float for goto if int register return sizeof struct switch void while. Secuencias de escape: \\ Backlash, \’ apostrophe, \” comilla doble, \n nueva línea, \r retroceso, y \t tabulación. Funciones de lectura y escritura en teclado y pantalla: printf y scanf (según el formato de la referencia del lenguaje C). 4.2. Ti Tipos pos de da datos tos Tipos primitivos:

Estructuras definidas por el programador, con las mismas reglas del struct:

Arreglos:

Punteros: (considerar el operador de acceso indirecto para punteros de structs (->))

4.3. Expre xpresione sione sioness y ope operadore radore radoress Una expresión es una instrucción con al menos un operador y cero o muchos operandos. El operador de asignación (=) almacena valores en las variables, además de existir las asignaciones compuestas +=, -=, *=, /

>

≥ <

Des Descri cri cripción pción Mayor

>= Mayor o igual <

Menor



& | ^ ~

Desplazamiento And bit a bit Or bit a b ti O-Exclusivo Negación bit a bit

Derecha

El operador sizeof() devuelve la cantidad en bytes del tipo de dato como argumento. Los operadores de cambio de tipo (cast), pueden ser aplicados a los tipos de datos primitivos. Las llamadas a funciones retornan un valor que puede ser utilizado como expresión. El operador coma (,) sirve para separar expresiones, como en el caso de declaraciones, asignaciones e incluso en las partes del ciclo for. Operador ternario, evalúa una expresión, si es verdadera retorna el segundo valor, de lo contrario devuelve el tercer valor. a?b:c; Precedencia de operadores, se evaluan de mayor a menor precedencia según la siguiente lista (algunos operadores pueden tener el mismo nivel) y se evaluan de izquierda a derecha: funciones, operador unario, casteo, sizeof, multiplicación, división, módulo, suma, resta, corrimiento de bits, relacionales, igual o diferente, AND, XOR, OR entre bits, AND y OR lógicos, operador ternario, asignaciones, y operador coma. Links de Interes http://lsi.vc.ehu.es/asignaturas//FdIc/labs/a1/htm/oper.html http://lsi.vc.ehu.es/pablogn/docencia/FdI/FdIc/labs/a1/htm/asig.html#:~:text=En%20el%20 lenguaje%20C%20la,el%20de%20su%20parte%20derecha

4.4. Declara eclaracione cione cioness Las etiquetas son identificadores de sección seguidos por el signo dos puntos, para ser utilizada la declaración goto. Las declaraciones de expresiones son instrucciones que finalizan con el punto y coma. La declaración condicional if, con la sintaxis if (condición) declaración else declaración. También se puede extender a multiples condiciones con else if.

La declaración switch, con la sintaxis: switch(condición){ case comparación declaración1 case comparación declaración2 default: declaración_default}. La declaración while, es un ciclo con una condición de salida al inicio del ciclo. Con la sintaxis: while (condición) declaración. La declaración do, es un ciclo con una condición de salida al final del ciclo. Con la sintaxis: do declaración while (condición); La declaración for, es un ciclo con tres partes, una inicialización, otra comparación y una tercera de modificación de variable. Con la sintaxis: for(inicialización; condición; cambio) declaración. Las anteriores declaraciones pueden escribirse de manera anidada, también existe una declaración nula, donde en una declaración se coloca solamente el punto y coma. La declaración goto, es un salto no condicional que salta hacia una etiqueta. La declaración break finaliza cualquier ciclo y el switch. La declaración continue finaliza una iteración para continuar en la siguiente. La declaración return finaliza la ejecución de una función, se puede agregar un valor de retorno. 4.5. Funciones La declaración de una función incluye su nombre, la lista de parámetros y un valor de retorno. La llamada a una función se puede hacer dentro de una declaración escribiendo el nombre de la función y los parámetros necesarios. También se define la función main como obligatoria, no teniendo ningún parámetro que definir, retornando un valor entero. Es permitido hacer funciones recursivas, y no se permiten hacer funciones anidadas. 4.6. Ejemp jemplo lo loss Un ciclo while:

Múltiples llamadas a funciones: (nótese la dependencia de declaración superior al punto de llamada)

Función factorial recursiva:

Struct con arreglos:

Lista simplemente enlazada con structs y punteros:

5. Repo Reporte rte rtess Los reportes deben ser generados después de una ejecución, ya sea correcta o incorrecta. Estos reportes deben estar asociados al código que tiene el “focus” del IDE, si se cambia de ventana de código y ya se había ejecutado puede mostrar los reportes del otro código. 5.1. Report eporte e de eerror rror rrores es En IDE debe generar los siguientes reportes: 1. Errores léxicos 2. Errores sintácticos 3. Errores semánticos Cada reporte debe contener como mínimo, el tipo, la descripción, y el número de línea. 5.2. Report eporte e de la tabla d de e ssímb ímb ímbolos olos El IDE debe mostrar la tabla de símbolos después de la ejecución de un archivo, mostrando las variables, funciones y procedimientos con mínimo los siguientes datos: identificador, tipo, dimensión, valor, declarada en (ámbito), y referencias (estructura interna). Una función o procedimiento se distingue si retorna o no algún valor. 5.3. Report eporte e del A AST ST y de dell GDA El IDE, después de una ejecución, ya sea con el analizador sintáctico ascendente o descendente debe mostrar, en una pestaña nueva, el árbol sintáctico abstracto (definición 2.5.1 del libro de texto) utilizando Graphviz, puede ser una imagen o un documento. El árbol sintáctico para cada analizador no se mostrará ya que en la siguiente sección se realizará un reporte gramatical que incluye de manera implícita a este último árbol. Además mostrar el GDA y mostrar un análisis de las diferencias en la generación de código de tres direcciones, en cuanto a si se genero menos código. 5.4. Report eporte e gramat gramatical ical El IDE debe mostrar la definición dirigida por la sintaxis, indicando que expresiones se utilizaron, precedencia, símbolos terminales y no terminales, y las reglas semánticas. Tomar en cuenta que no es el código escrito, sino es un reporte de explicación generado automáticamente, diferente del producto entregable del proyecto que es más enfocado a la construcción del intérprete. Este reporte está enfocado más a la ejecución específica.

6. Cuesti Cuestione one oness d de e ent entrega rega 6.1. Entr ntregables egables La entrega debe tener los siguientes productos: 1. Código fuente listo para su ejecución (no configuración extra, mejor si es un instalador) 2. Gramáticas utilizadas (no en la ejecución sino en la definición, de eso difiere del reporte gramatical) 3. Manual técnico y de usuario. 4. Archivo de licencia. Por ser un proyecto académico, se utilizar la siguiente licencia: GNU GPL v3. El archivo puede ser descargado del siguiente enlace: https://www.gnu.org/licenses/gpl-3.0.txt

6.2. Co Consi nsi nsiderac derac deracione ione ioness Se debe tomar en consideración lo siguiente: 1. El proyecto es individual y debe generar una aplicación de escritorio escrita en Python. 2. Se deben utilizar una sola gramática para el analizador ascendente. 3. Copias de proyectos obtendrán una nota 0, por lo que pierde automáticamente el laboratorio, se utilizará la herramienta JPlag https://jplag.ipd.kit.edu/ 4. Durante la calificación se verificará la autoría mediante preguntas, si no las responde se considera copia. 5. Cualquier aclaración o modificación del proyecto se realizará mediante el docente, y no deben existir cambios sustanciales. 6.3. Entr ntrega ega Los aspectos de la entrega son: 1. La entrega será virtual, se debe utilizar GitHub https://github.com/, deben colocar el repositorio de manera privada y dar permiso al auxiliar. 2. La fecha de entrega límite del proyecto es el martes 1 de juli julio o a las 7:00 am am. Se puede entregar antes para evitar contratiempos, ya que después de esa hora NO SE RECIBE NINGÚN PROYECTO. 3. La entrega se realiza mediante un archivo comprimido ZIP con el nombre: [OLC2]P2_carné.zip

4. La calificación se realizará de manera virtual (ya sea en meet o zoom) con las cámaras activadas, cada calificación será almacenada. 6.4. Co Com mpensaci pensación ón a llaa eexce xce xcelenc lenc lencia ia La selección de la licencia GNU GPL v3 se hace con el fin de que el proyecto continúe su desarrollo en los próximos semestres, el docente podrá seleccionar al mejor intérprete por plataforma (con la nota más alta y que sea totalmente funcional) y el código se utilizará en un repositorio que el docente administra, siempre con licencia GNU GPL v3, y se le otorgará al estudiante 5 puntos de 100 en cualquiera de los dos proyectos....


Similar Free PDFs