forked from codestrange/cool-compiler-2020
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 1b02bb6
Showing
62 changed files
with
3,428 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
language: python | ||
python: | ||
- "3.7" | ||
# command to install dependencies | ||
install: | ||
- pip install -r requirements.txt | ||
# command to run tests | ||
script: | ||
- cd src | ||
- make clean | ||
- make | ||
- make test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2020 School of Math and Computer Science, University of Havana | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
<!-- Update the repository URL to your own --> | ||
[](https://travis-ci.org/matcom/cool-compiler-base) | ||
|
||
# COOL: Proyecto de Compilación | ||
|
||
> Proyecto base para el compilador de 4to año en Ciencia de la Computación. | ||
## Generalidades | ||
|
||
La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la | ||
Universidad de La Habana, consiste este curso en la implementación de un compilador completamente | ||
funcional para el lenguaje _COOL_. | ||
|
||
_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. | ||
|
||
## Cómo comenzar (o terminar) | ||
|
||
El proyecto de Compilación será recogido y evaluado **únicamente** a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. A continuación le damos las instrucciones mínimas necesarias para ello: | ||
|
||
### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). | ||
|
||
 | ||
|
||
### 2. Haga click en [este link](https://classroom.github.com/g/QrlsVQA4) y acepte la tarea, creando un nuevo equipo, o uniéndose a un equipo existente. | ||
|
||
 | ||
|
||
### 3. Una vez hecho esto, tendrá un nuevo repositorio en [Github/MatCom Compilers 2019](https://github.com/matcom-compilers-2019). Revise que el repositorio de su equipo está en la lista. | ||
|
||
 | ||
|
||
### 4. Clone este proyecto en un repositorio local. Busque la URL de su proyecto en la interfaz web de Github. | ||
|
||
 | ||
|
||
```bash | ||
$ git clone [email protected]:matcom-compilers-2019/cool-compiler-<team>.git | ||
``` | ||
|
||
> Donde `<team>` es posiblemente el nombre de su equipo. | ||
A partir de este punto debe tener un proyecto `cool-compiler-<team>` local. | ||
El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. | ||
|
||
### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): | ||
|
||
5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: | ||
|
||
```bash | ||
$ cd cool-compiler-<team> | ||
$ git pull <my-old-compiler-project> master | ||
``` | ||
|
||
5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. | ||
|
||
```bash | ||
$ mv <my-old-code> src/ | ||
$ git add . | ||
$ git commit -a -m "Mezclado con el proyecto base" | ||
``` | ||
|
||
5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir: | ||
|
||
```bash | ||
$ git push origin master | ||
``` | ||
|
||
### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): | ||
|
||
5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit: | ||
|
||
```bash | ||
$ mv <my-old-code> src/ | ||
$ git commit -a -m "Hello Git!" | ||
``` | ||
|
||
5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. Si necesita saber más sobre `git`, todo lo imprescindible está [esta guía](doc/github-git-cheat-sheet.pdf). | ||
|
||
5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir: | ||
|
||
```bash | ||
$ git push origin master | ||
``` | ||
|
||
### 6. Asegúrese de que sus cambios están online en el momento de revisar el compilador. | ||
|
||
 | ||
|
||
## Sobre la implementación | ||
|
||
Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). | ||
|
||
## Sobre la documentación | ||
|
||
Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). | ||
|
||
## Sobre los Equipos de Desarrollo | ||
|
||
Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Documentación | ||
|
||
> Introduzca sus datos (de todo el equipo) en la siguiente tabla: | ||
**Nombre** | **Grupo** | **Github** | ||
--|--|-- | ||
Nombre1 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/<user>) | ||
Nombre2 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/<user>) | ||
Nombre3 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/<user>) | ||
|
||
## Readme | ||
|
||
Modifique el contenido documento para documentar de forma clara y concisa los siguientes aspectos: | ||
|
||
- Cómo ejecutar (y compilar si es necesario) su compilador. | ||
- Requisitos adicionales, dependencias, configuración, etc. | ||
- Opciones adicionales que tenga su compilador. | ||
|
||
## Reporte escrito | ||
|
||
En esta carpeta ponga además su reporte escrito. Ya sea hecho en LaTeX, Markdown o Word, **además** genere un PDF y póngale nombre `report.pdf`. | ||
|
||
El reporte debe resumir de manera organizada y comprensible la arquitectura e implementación de su compilador. | ||
El documento **NO** debe exceder las 5 cuartillas. | ||
En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. | ||
|
||
El informe debe incluir además una dirección a un repositorio git público con el código fuente de su compilador. Para la evaluación del proyecto, se clonará el repositorio y se procederá a su revisión. El proyecto debe contener un fichero `README.md` con las indicaciones para ejecutar su compilador, y los mecanismos pertinentes para garantizar su correcto funcionamiento en la máquina del revisor (instalación de dependencias, etc.). | ||
|
||
### Estructura del reporte | ||
|
||
Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: | ||
|
||
- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. | ||
- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. | ||
- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. |
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
pytest | ||
pytest-ordering |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# Código Fuente | ||
|
||
Incluya en esta carpeta **todo** el código fuente que es necesario para compilar y/o ejecutar su compilador desde cero. | ||
|
||
**No incluya** archivos generados automáticamente, tales como binarios (e.g, `.exe`, `.pyc`), archivos auxiliares o archivos de logs, reportes, etc. | ||
|
||
## Compilando su proyecto | ||
|
||
Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en el archivo [`/src/makefile`](/src/makefile) que está en esta misma carpeta. | ||
Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: | ||
|
||
```bash | ||
$ cd source | ||
$ make clean | ||
$ make | ||
``` | ||
|
||
## Ejecutando su proyecto | ||
|
||
Incluya en el archivo [`/src/coolc.sh`](/src/compile.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. | ||
|
||
Para lanzar el compilador, se ejecutará la siguiente instrucción: | ||
|
||
```bash | ||
$ cd source | ||
$ ./compile.sh <input_file.cl> | ||
``` | ||
|
||
> **NOTA:** Su proyecto será ejecutado y evaluado en un entorno **Linux**. Si usted desarrolló en un entorno diferente, asegúrese de que es posible ejecutar su proyecto en Linux. En el caso de **.NET**, vea las instrucciones para portar su proyecto a **.NET Core** (la versión Open Source) [aquí](https://dotnet.microsoft.com/) y asegúrese de probar que funciona en Linux. **NO es posible** entregar su proyecto en forma de una solución que necesite abrirse con Visual Studio para funcionar. | ||
## Sobre el lenguaje COOL | ||
|
||
Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento [_COOL Language Reference Manual_](../doc/cool-manual.pdf), que se distribuye junto con el presente texto. | ||
|
||
## Sobre el funcionamiento del compilador | ||
|
||
El compilador de COOL se ejecutará como se ha definido anteriormente. | ||
En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: | ||
|
||
<línea_con_nombre_y_versión_del_compilador> | ||
<línea_con_copyright_para_el_compilador> | ||
|
||
En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código | ||
de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... | ||
|
||
<línea_con_nombre_y_versión_del_compilador> | ||
<línea_con_copyright_para_el_compilador> | ||
<línea_de_error>_1 | ||
... | ||
<línea_de_error>_n | ||
|
||
... donde `<línea_de_error>_i` tiene el siguiente formato: | ||
|
||
(<línea>,<columna>) - <tipo_de_error>: <texto_del_error> | ||
|
||
Los campos `<línea>` y `<columna>` indican la ubicación del error en el fichero **.cl** procesado. En caso | ||
de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de | ||
código fuente, el valor de dichos campos debe ser 0. | ||
|
||
El campo `<tipo_de_error>` será alguno entre: | ||
|
||
- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. | ||
- `LexicographicError`: errores detectados por el lexer. | ||
- `SyntacticError`: errores detectados por el parser. | ||
- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. | ||
- `TypeError`: se reporta al detectar un problema de tipos. Incluye: | ||
- incompatibilidad de tipos entre `rvalue` y `lvalue`, | ||
- operación no definida entre objetos de ciertos tipos, y | ||
- tipo referenciado pero no definido. | ||
- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. | ||
- `SemanticError`: cualquier otro error semántico. | ||
|
||
## Sobre la Implementación del Compilador de COOL | ||
|
||
Para la implementación del compilador Ud. debe utilizar una herramienta generadora de analizadores | ||
lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Incluya aquí las instrucciones necesarias para ejecutar su compilador | ||
|
||
INPUT_FILE=$1 | ||
OUTPUT_FILE=${INPUT_FILE:0: -2}mips | ||
|
||
# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto | ||
echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas | ||
echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos | ||
|
||
# Llamar al compilador | ||
echo "Compiling $INPUT_FILE into $OUTPUT_FILE" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
.PHONY: clean | ||
|
||
main: | ||
# Compiling the compiler :) | ||
|
||
clean: | ||
rm -rf build/* | ||
|
||
test: | ||
pytest ../tests -v --tb=short -m=${TAG} | ||
|
Oops, something went wrong.