Skip to content
This repository was archived by the owner on Feb 14, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
14f560a
Update coolc.sh
TTigre Mar 1, 2020
5cf691b
Add files via upload
TTigre Mar 1, 2020
e2db042
Update requirements.txt
TTigre Mar 1, 2020
3bf9100
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
a5e4939
Add files via upload
TTigre Mar 1, 2020
208c058
Update coolc.sh
TTigre Mar 1, 2020
1919e4a
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
5050676
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
ef3bc27
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
e946461
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
c93e1c8
Update coolc.sh
TTigre Mar 1, 2020
019dd64
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
a804068
Update coolc.sh
TTigre Mar 1, 2020
aac3f43
Add files via upload
TTigre Mar 1, 2020
a91f6ba
Add files via upload
TTigre Mar 1, 2020
8f74f72
Add files via upload
TTigre Mar 1, 2020
7fb7116
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
70086dd
Update TigerandButiCompiler.py
TTigre Mar 1, 2020
0d2a57f
Add files via upload
TTigre Mar 1, 2020
a6a248e
Add files via upload
TTigre Mar 1, 2020
5165ac0
Add files via upload
TTigre Mar 1, 2020
a31911c
Add files via upload
TTigre Mar 1, 2020
32cc69d
Update Readme.md
TTigre Mar 1, 2020
5398759
Intento de arreglar un viejo bug
TTigre Aug 5, 2020
69f1304
Old bug refix
TTigre Aug 11, 2020
34b0c72
Old bug refix 2
TTigre Aug 11, 2020
3741d67
Print que se escapo eliminado
TTigre Aug 11, 2020
423579a
Old bug refix 3
TTigre Aug 11, 2020
5c05ee1
Old bug refix 4
TTigre Aug 11, 2020
6c54c25
Inicio en la parte dependiente del contexto
TTigre Aug 12, 2020
1a6b293
Agregado sistema para verificar herencia correcta
TTigre Oct 6, 2020
59efcfe
Incluido AST interno por el Buti
TTigre Oct 6, 2020
ff6e839
Merge branch 'herencia_01' into entrega-parser
TTigre Oct 6, 2020
3f2b26e
Agregados varios elementos para el análisis semántico por el Buti
TTigre Oct 14, 2020
c9f8ad4
Primer modelo de clases CIL
TTigre Oct 17, 2020
9bf73eb
Agregado AST to CIL inicial:
TTigre Oct 19, 2020
7cf8ad3
Agregados varios tipos de instrucciones CIL y su generación a partir …
TTigre Oct 21, 2020
4f29f22
Agregados nuevos tipos de instrucciones CIL y nuevos parseps de AST a…
TTigre Oct 21, 2020
102d44d
-Agregadas Clases Object e IO por defecto
TTigre Oct 26, 2020
720b563
Finalizada versión simple sin probar de CIL y conversión a este:
TTigre Nov 3, 2020
ced4e78
Actualizado con cambios por el Buti.
TTigre Nov 3, 2020
1d579e6
Agregado parámetro self a invocación de métodos
TTigre Nov 5, 2020
803b0ad
-Agregada clase String inicial
TTigre Nov 5, 2020
a1f7849
-Agregado atributo self a definición de object
TTigre Nov 6, 2020
1e53a57
Bugfix y agregada inicialización de atributos
TTigre Nov 8, 2020
6002b25
-Agregados métodos default
TTigre Nov 9, 2020
62dec57
Creadas unas macros bases para usar en la generación de código
TTigre Nov 10, 2020
d62298e
-Pequeño cambio en el AST
TTigre Nov 13, 2020
3eed1dc
Comenzada conversión a MIPS con visitor
TTigre Nov 14, 2020
27fc50c
-Gran debug de errores obvios
TTigre Nov 17, 2020
a3949a8
Hecho merge con un pendiente del Buti muy importante
TTigre Nov 18, 2020
d6c4403
-Comenzada real integración con lo demás de CIL y MIPS
TTigre Nov 18, 2020
354ecae
Fixing wrong method name
Al3ERT Nov 19, 2020
418e4fd
Fixing wrong ast definition
Al3ERT Nov 19, 2020
8d7bf19
Gran Debug CIL y merge con Semantic Checking del Buti
TTigre Nov 19, 2020
3359119
Compila a CIL aunque falta comprobar correctitud
TTigre Nov 20, 2020
4a95de4
-Métodos por defecto en CIL
TTigre Nov 20, 2020
16c587c
Finalmente pasa todos los programas de codegen sin explotar
TTigre Nov 24, 2020
d3bf905
Arreglo simple al programa de MIPS
TTigre Nov 24, 2020
97ebeca
-El IsVoid en caso de que sea con un tipo siempre falso se pone así g…
TTigre Nov 24, 2020
3206eb6
Ya al parecer los programas que se generan en MIPS son código válido
TTigre Nov 25, 2020
79ef5bc
Implementación en MIPS de CILTypeCheck
TTigre Nov 26, 2020
b679b73
Agregado método Main a MIPS
TTigre Nov 26, 2020
ff7e332
-Agregado llamada a método Init
TTigre Nov 26, 2020
4e40861
Debugueo general
TTigre Nov 26, 2020
3d3a376
Logrado que Spim acepte el programa como válido despues de modificaci…
TTigre Nov 26, 2020
5061dfa
Debugueo con SPIM, todavía falta
TTigre Nov 26, 2020
8788f33
Arreglado problema en llamado de métodos y pila
TTigre Nov 27, 2020
5316c3d
helloworld.cl ya funciona
TTigre Nov 27, 2020
1d0246b
Merge branch 'entrega-final' of https://github.com/matcom/cool-compil…
TTigre Nov 28, 2020
98eb0d8
atoi.cl funciona
TTigre Nov 28, 2020
bf0ba98
Solucionada inicialización por defecto de los strings
TTigre Nov 28, 2020
173f712
Solucionado grave problema con los atributos en MIPS
TTigre Nov 28, 2020
6234b9a
-Arreglo a métodos estáticos de lectura
TTigre Nov 28, 2020
2414fd0
Arreglado error en el loop
TTigre Nov 28, 2020
49d5c32
Added invalidation for semantically wrong programs
Al3ERT Nov 28, 2020
86dd3be
Arreglado error en lectura de enteros
TTigre Nov 29, 2020
15ae1a6
-Arreglos al let
TTigre Nov 29, 2020
cfa7a26
-Arreglado complemento de entero en MIPS
TTigre Nov 29, 2020
be7f484
Arreglo del orden en los subcasos de los casenode
TTigre Nov 29, 2020
019c53b
Ya todos los tests de generación de código pasan aparentemente
TTigre Nov 29, 2020
59c28dd
Merge branch 'entrega-parser' of https://github.com/Tigre-Buti/cool-c…
TTigre Nov 29, 2020
cfb1e95
Prueba de un formato para entregar
TTigre Nov 29, 2020
b12a781
Agregado exit cuando da error
TTigre Nov 29, 2020
7463100
Eliminado el exit
TTigre Nov 29, 2020
349bf39
Arreglado algo que cambié sin querer
TTigre Nov 29, 2020
cc483d0
Cambiando archivo de salida
Al3ERT Nov 29, 2020
378c1a8
Fixing bug
Al3ERT Nov 29, 2020
5da5fef
Probando
Al3ERT Nov 29, 2020
d2dd940
Limpiando y sobreescribiendo tests, etc
TTigre Nov 29, 2020
49d22be
Merge branch 'entrega-parser' of https://github.com/Tigre-Buti/cool-c…
TTigre Nov 29, 2020
08bdaa8
Eliminados algunos caracteres no ASCII
TTigre Nov 29, 2020
d4bfc99
Agregados exit(1)
TTigre Nov 29, 2020
324dd3d
Indentación rectificada
TTigre Nov 29, 2020
7edec18
Rectificación de la creación de archivos
TTigre Nov 29, 2020
0fe35aa
Enabling tracking
Al3ERT Nov 29, 2020
914a8a1
Intento de otro modo de guardado del programa .mips
TTigre Nov 29, 2020
32a2fce
Merge branch 'entrega-parser' of https://github.com/Tigre-Buti/cool-c…
TTigre Nov 29, 2020
e075e86
Changing compiling directory
Al3ERT Nov 29, 2020
2977e0b
Probando de nuevo
Al3ERT Nov 29, 2020
f7c8bef
Probando 3
Al3ERT Nov 29, 2020
2b01f4f
Probando 4
Al3ERT Nov 29, 2020
28c8d9a
Probando 5
Al3ERT Nov 29, 2020
1b4de33
Probando 6
Al3ERT Nov 29, 2020
9cdc45c
Probando 7
Al3ERT Nov 29, 2020
fd57a8c
Probando 8
Al3ERT Nov 29, 2020
35642bd
Arreglando error de direccion
Al3ERT Nov 30, 2020
079e476
Probando 9
Al3ERT Nov 30, 2020
b8bc569
Probando 10
Al3ERT Nov 30, 2020
ef148f7
Pequeño bug
Al3ERT Nov 30, 2020
bc12eca
Intento de arreglo del index_error no definido
TTigre Nov 30, 2020
a02abe6
Intento de arreglo del bug con los strings con cambio de linea
TTigre Nov 30, 2020
e139b25
Agregadada clase Int a clases por defecto
TTigre Nov 30, 2020
d475495
Agregando el prereporte
Al3ERT Dec 1, 2020
4a60650
Agregando el archivo de la gramática
Al3ERT Dec 1, 2020
9da1d67
Arreglando typos
Al3ERT Dec 1, 2020
c2b3485
Limpieza y actualización de docs
TTigre Dec 1, 2020
228777f
Codegen Report Update
TTigre Dec 2, 2020
e8f8621
Optimizando ints y metodos
Al3ERT Dec 14, 2020
2c55307
Arreglando un bug
Al3ERT Dec 14, 2020
7f27811
Actualizando el reporte
Al3ERT Dec 15, 2020
1427754
Omisión de métodos aplicada en CIL
TTigre Dec 15, 2020
47dc29a
Gran Update de codegen en el reporte
TTigre Dec 15, 2020
e6f3da7
Pequeña rectificación
TTigre Dec 15, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,8 @@ dmypy.json
.pyre/

### VisualStudioCode ###
.vscode/*
.vs/
.vscode/
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
Expand Down
72 changes: 72 additions & 0 deletions doc/Gramatica.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Gramática usada
En lo siguiente mostraremos la gramática BNF usada para la realización de nuestro compilador:
```
program : classdec program
| classdec
classdec : class type lbracket featurelist rbracket pcoma
| class type inherits type lbracket featurelist rbracket pcoma
featurelist : feature featurelist
| empty
feature : attribute pcoma
| methoddef pcoma
methoddef : id lparen rparen dpoint type lbracket expression rbracket
| id lparen param paramslistdef rparen dpoint type lbracket expression rbracket
paramslistdef : coma param paramslistdef
| empty
param : id dpoint type
attribute : id dpoint type
| id dpoint type assign expression
empty :
expression : constantexp
| identifier
| assignment
| dispatch
| conditional
| loopexp
| blockexp
| letexp
| caseexp
| newexp
| isvoidexp
| aritmetica
| comparison
|parenexpression
dispatch : id lparen rparen
| id lparen expression expressionparams rparen
| expression point id lparen rparen
| expression point id lparen expression expressionparams rparen
| expression arroba type point id lparen rparen
| expression arroba type point id lparen expression expressionparams rparen
expressionparams : coma expression expressionparams
| empty
conditional : if expression then expression else expression fi
loopexp : while expression loop expression pool
blockexp : lbracket expressionlist rbracket
expressionlist : expression pcoma expressionlist
| empty
letexp : let attribute letattributelist in expression
letattributelist : coma attribute letattributelist
| empty
caseexp : case expression of subcase listcase esac
listcase : subcase listcase
| empty
subcase : id dpoint type implica expression pcoma
newexp : new type
isvoidexp : isvoid expression
aritmetica : expression plus expression
| expression minus expression
| expression mult expression
| expression div expression
| intnot expression
comparison : expression less expression
| expression lesse expression
| expression equal expression
| not expression
parenexpression : lparen expression rparen
constantexp : number
| string
| true
| false
identifier : id
assignment : id assign expression
```
5 changes: 2 additions & 3 deletions doc/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@

**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>)
José Gabriel Navarro Comabella | C412 | [@TTigre](https://github.com/TTigre)
Alberto Helguera Fleitas | C412 | [@Al3ERT](https://github.com/Al3ERT)

## Readme

Expand Down
128 changes: 128 additions & 0 deletions doc/Reporte.md

Large diffs are not rendered by default.

Binary file added doc/compilers-1.pdf
Binary file not shown.
Binary file added doc/images/ASTtoCIL.py.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/CILClass.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/CILGlobalMethod.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/Definicióndeclase.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/Diagrama.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/Estructura.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/Instancia.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/ProgramaCIL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/ProgramaMIPS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/mips_and_spim_manual.pdf
Binary file not shown.
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
pytest
pytest-ordering
ply
177 changes: 177 additions & 0 deletions src/AST.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
class Node:
index=0
line=0

class ProgramNode(Node):
def __init__(self, classes):
self.classes = classes

class ClassNode(Node):
def __init__(self, name, parent, features):
self.name = name
self.parent = parent
self.methods = []
self.attributes = []
if features is not []:
for foo in features:
if isinstance(foo,AttributeNode):
self.attributes.append(foo)
else:
self.methods.append(foo)

class ClassFeatureNode(Node):
pass

class MethodNode(ClassFeatureNode):
def __init__(self, name, parameters, return_type, body):
self.name = name
self.parameters = parameters
self.return_type = return_type
self.body = body

class AttributeNode(ClassFeatureNode):
def __init__(self, name, attr_type, value):
self.name = name
self.type = attr_type
self.value = value

class ParameterNode(ClassFeatureNode):
def __init__(self, name, param_type):
self.name = name
self.type = param_type

class ExpressionNode(Node):
pass


class AssignNode(ExpressionNode):
def __init__(self, variable, expr):
self.variable = variable
self.expression = expr

class ConditionalNode(ExpressionNode):
def __init__(self, predicate, then_body, else_body):
self.predicate = predicate
self.then_body = then_body
self.else_body = else_body

class LoopNode(ExpressionNode):
def __init__(self, predicate, body):
self.predicate = predicate
self.body = body

class LetNode(ExpressionNode):
def __init__(self, declarations, in_body):
self.declarations = declarations
self.body = in_body

class AtomicNode(ExpressionNode):
pass

class ConstantNode(AtomicNode):
pass

class StringNode(ConstantNode):
def __init__(self, value):
self.value = value

class IntegerNode(ConstantNode):
def __init__(self, value):
self.value = value

class BoolNode(ConstantNode):
def __init__(self, value):
self.value = value

class NewNode(AtomicNode):
def __init__(self, new_type):
self.type = new_type

class BlockNode(AtomicNode):
def __init__(self, expressions):
self.expressions = expressions

class CaseNode(AtomicNode):
def __init__(self, expression, subcases):
self.expression = expression
self.subcases = subcases

class SubCaseNode:
def __init__(self, name, sub_type, expression):
self.name = name
self.type = sub_type
self.expression = expression

class DispatchNode(AtomicNode):
def __init__(self, func_id, parameters, left_expr, left_type=None):
self.func_id = func_id
self.parameters = parameters
self.left_expression = left_expr
self.left_type=left_type

class StaticDispatchNode(AtomicNode):
def __init__(self, func_id, parent_id ,parameters, left_expr):
self.func_id = func_id
self.parent_id = parent_id
self.parameters = parameters
self.left_expression = left_expr

class VariableNode(AtomicNode):
def __init__(self, var_id):
self.id = var_id

class UnaryOperatorNode(ExpressionNode):
operator = ""
pass

class IsVoidNode(UnaryOperatorNode):
def __init__(self, expr, tipo="Class"):
self.expression = expr
self.tipo=tipo

class IntComplementNode(UnaryOperatorNode):
def __init__(self, right):
self.right = right

class BoolComplementNode(UnaryOperatorNode):
def __init__(self, right):
self.right = right

class BinaryOperatorNode(ExpressionNode):
operator=""
def __init__(self, left, right):
self.left = left
self.right = right

class ComparisonNode(BinaryOperatorNode):
pass

class LesserNode(ComparisonNode):
pass

class LesserEqualNode(ComparisonNode):
pass

class EqualNode(ComparisonNode):
def __init__(self,left,right, isString=False):
self.left = left
self.right = right
self.isString = isString

class ArithmeticNode(BinaryOperatorNode):
pass

class PlusNode(ArithmeticNode):
pass

class MinusNode(ArithmeticNode):
pass

class MultNode(ArithmeticNode):
pass

class DivNode(ArithmeticNode):
pass



Loading