lfundaro / melon-interpreter Goto Github PK
View Code? Open in Web Editor NEWMelon Language Interpreter. A college project for the Compilers Course
Melon Language Interpreter. A college project for the Compilers Course
#################################### # 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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.