/Melon-Interpreter

Melon Language Interpreter. A college project for the Compilers Course

Primary LanguagePython

####################################
# Proyecto 3                       #
# Integrantes:                     #
#     - Lorenzo Fundaro   06-39559 #
#     - Marion  Carambula 06-39312 #
####################################

########################################
#   ¿Para qué sirve cada archivo?      #
########################################

Exceptions.py: contiene las excepciones que 
manejan errores de sintaxis, lexicográficos 
o de funciones  desbalanceadas.

lex.py: lexer de PLY

lexmelon.py: donde se construye el analizador
lexicográfico.

lexparam.py: donde se indican los parámetros
del lexer, por ejemplo, tokens y expresiones
regulares para cada uno de ellos.

parse_melon: programa cliente.

syntree.py: implementación del árbol sintáctico. 
Aquí se encuentran todas las estructuras que se
 usan para construir el árbol sintáctico.

yacc.py: parser de PLY.

yaccmelon.py: donde se especifican todas las 
gramáticas que el parser debe usar.

interpreter.py: interpretador sintactico para el 
lenguaje MeLon.

#############################################
# Implementacion del  Analizador Sintactico #
#############################################

-- Match de Listas --

Para la verificacion del match entre dos listas se hizo
uso de una funcion que permite recorrer la lista y ver
si las cabezas hacen match y sus colas tambien.
Primero se verifica que sus cabezas hagan match, si esta
condicion no se cumple se retorna false de una vez. En
caso de que si hagan match, procedemos a evualar los elementos
que posee su cola. Para ello evaluamos que ambas colas sean una
lista, de ser asi entonces llamamos recursivamente a la funcion,
si no procedemos a ver las distintas combinaciones que se pueden 
presentar y desde ahi llamamos a la funcion match para verificar
el matcheo entre los otros tipos de elementos que puede poseer
la lista..
Si al final, todos los elementos de cada una de las listas hicieron
match entonces retornamos una lista de tuplas de la forma (p1,p2)
donde p1 es el elemento de la lista 1 que hizo match con el elemento
p2 de la lista 2.


-- Eval ---

Para la evaluacion de los programas se creo una funcion que recibe el 
arbol sintactico del programa y un diccionario el cual hara el papel de 
tabla de simbolos donde se guardara las variables utilizadas junto con 
su valor asociado.
Para lograr la evaluacion se hicieron casos segun el tipo que posee el nodo,
para cada uno de ellos hay una forma de evaluacion diferente, los casos bases
para esta funcion son los nodos enteros, las variables y las constantes.
Basicamente lo que hace es ir recorriendo el arbol sintactico hasta llegar
a los casos bases y operarlos segun el caso en el que nos encontremos.