Skip to content

Third Assignment #2

@felix91gr

Description

@felix91gr

From SIDING:

Deberán completar la detección de errores en su programa recorriendo el AST generado y detectando todos los errores no capturados en las etapas anteriores.

El analizador semántico (...) debe ser capaz de extender la representación del AST con información de nombres, scope y tipos de datos. (...) Para cumplir con este requisito será necesario implementar una estructura llamada Tabla de Símbolos que mantenga un registro de todos los símbolos (variables, constantes, funciones, tipos, clases, o lo que corresponda a su lenguaje) presentes en su programa, junto con la información relevante de nombre, token, lexema, scope y tipo de dato cuando corresponda. Al ejecutar su programa deberá ser capaz de imprimir (...) una representación de la Tabla de Símbolos. También debe ser claro que el AST ha sido extendido con la información necesaria. (...) por ejemplo, mediante una referencia a la entrada correspondiente de la Tabla de Símbolos.

(...) el compilador debe ser suficientemente robusto, (...) no debe fallar al encontrar errores léxicos, sintácticos ni semánticos, sino que reportarlos al usuario. Es aceptable que ante un error (...) no se genere ni el AST ni la Tabla de Símbolos, o que se generen de manera incompleta. Los mensajes de errores debe ser reportados (...) de manera que sean una ayuda para el programador (por ejemplo, indicando fila y columna del código fuente). (...) El analizador debe ser capaz de detectar la mayor cantidad de errores posible en una sola ejecución, sin embargo, es aceptable que si hay errores sintácticos, por ejemplo, no se pase a la etapa de análisis semántico.

Requisitos:

  • 50% Código de su compilador (lexer+parser+semantic en un solo ejecutable)

    • 8% Entrega de código fuente para generar el compilador. Descripción léxica (3%) y descripción de la gramática (5%). No subir binarios.
    • 2% Instrucciones para compilar (readme, make o algo equivalente, de manera que facilite las pruebas)
    • 10% Entregar al menos dos archivos de código fuente en el lenguaje a compilar, que deben pasar sin errores.
    • 10% Entregar al menos dos archivos de código fuente en el lenguaje a compilar, que deben poseer errores semánticos representativos.
    • 10% Si no hay errores en el código de su lenguaje, el programa debe generar el AST correspondiente extendido con la información de tipos y scope. El AST debe permitir ver o al menos acceder a la información relevante de cada nodo (tipo de token, lexema si corresponde, fila, columna, tipo de dato), y la relación padre-hijo. Para esta parte podremos probar con programas generados por el profesor+ayudante, además de los que deben entregar.
    • 5% Si hay errores en el código de entrada, el programa no necesita generar ni el AST ni la Tabla de Símbolos (podría hacerlo, pero no es necesario), pero sí debe avanzar lo más que pueda en el procesamiento del código de manera de detectar la mayor cantidad posible de errores. Para esta parte podremos probar con programas generados por el profesor+ayudante, además de los que deben entregar.
    • 5% Los mensajes de error deben corresponder al error encontrado, ser suficientemente explicativos, e indicar fila y columna donde lo detectaron. No necesitan mostrar el contexto que provocó el error, ni sugerir su corrección (bonus si hace sugerencias).
  • 30% Documento PDF con la descripción de:

    • 5% Lenguaje a compilar y lista de características incluidas (solo lista, sin justificación) actualizada. Snippets de código solo si es necesario para la comprensión.
    • 5% Lista de tokens y gramática del lenguaje actualizada.
    • 10% Reglas semánticas usadas para inferencia de tipos. No necesita poner todas, pero sí las más representativas.
    • 10% Decisiones importantes sobre restricciones adicionales a la gramática, sobre las reglas de tipos utilizadas, y los criterios para definir los scopes.
  • 20% Presentación donde deben mostrar:

    • 2% Recordatorio del lenguaje (menor a 1 min)
    • 2% Token y elementos importantes de la gramática. Por ejemplo, si restringieron o agregaron algo respecto a la presentación anterior (ejemplos solo si lo necesitan) (menor a 1 min)
    • 4% Reglas de tipos y de scope más importantes utilizadas (menor a 4 min)
    • 10% Demo de un programa sin errores (5%), y un programa con un error (5%) (menor a 4 min)
    • 2% Enviar la presentación.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions