Con la calculadora realizada en ANTLR y teniendo como lenguaje objetivo python, realizar las pruebas necesarias sobre: Asociatividad, Precedencia de Operadores, Operadores U-narios. Defina el tipo de datos bool para usar operadores U-narios.
La precedencia de operadores hace referencia a permitir que la suma se realice primero que la multiplicación o viceversa. Esto se realiza simplemente cambiando el orden en que se declaran las reglas de las expresiones.
expr: ('!'+|'-') expr # unary
| expr op=('+'|'-') expr # AddSub
| expr op=('*'|'/') expr # MulDiv
| FLOAT # float
| INT # int
| ID # id
| '(' expr ')' # parens
;
expr: ('!'+|'-') expr # unary
| expr op=('*'|'/') expr # MulDiv
| expr op=('+'|'-') expr # AddSub
| FLOAT # float
| INT # int
| ID # id
| '(' expr ')' # parens
;
Para realizar el cambio simplemente se evaluo recursivamente primero el hijo derecho y luego el izquierdo, lo que cambia la asociatividad a derecha.
def visitAddSub(self, ctx):
left = self.visit(ctx.expr(0))
right = self.visit(ctx.expr(1))
if ctx.op.type == calculadoraParser.ADD:
return right + left
else:
return right - left
def visitAddSub(self, ctx):
left = self.visit(ctx.expr(0))
right = self.visit(ctx.expr(1))
if ctx.op.type == calculadoraParser.ADD:
return left + right
else:
return left - right
'!' -> negación
'-' -> operador cambio de signo
'++' Incremento
'--' Decrecimiento
En este proyecto se dispuso de un directorio para cada opción de precedencia ('PrimeroMultiplicacion', 'PrimeroSuma')
Para cada directorio existen dos archivos de python los cuales hacen referencia a las asociatividades (derecha, izquierda).
pip3 install antlr4-python3-runtime
Nos dirijimos a la carpeta 'PrimeroMultiplicacion'
cd PrimeroMultiplicacion
antlr4 -Dlanguage=Python3 calculadoraPrimeroMult.g4 -visitor -o dist
Nos devolvemos a la carpeta raiz del proyecto
cd ..
Nos dirijimos a la carpeta 'PrimeroSuma'
cd PrimeroSuma
antlr4 -Dlanguage=Python3 calculadoraPrimeroSuma.g4 -visitor -o dist
Use -visitor
to generate Visitor Class
Use -o
to specify output path.
En este archivo de texto están las operaciones que queremos realizar en la calculadora.
nano ejemplo.txt
Para seleccionar el archivo correcto a ejecutar se debe:
- Seleccionar la carpeta de acuerdo a la Precedencia seleccionada.
cd PrimeroMultiplicacion
cd PrimeroSuma
- Dependiendo de la asociativdad que se requiera se debe ejecutar un archivo de python diferente.
python3 asociatividadDerecha.py
python3 asociatividadIzquierda.py
- Nicolas Bautista 🧑💻
- Sara Romero 🧑💻
- Angie Ruiz 🧑💻
- Ricardo Rey 🧑💻