Giter Club home page Giter Club logo

compiladorlenguaje's Introduction

Compilador de Lenguaje

Este repositorio contiene el diseño, implementación y documentación de un compilador de lenguaje de programación aplicando las técnicas de construcción de procesadores de lenguajes vistas a lo largo de las clases de la asignatura de Diseño de Lenguajes de Programación del grado en Ingeniería Informática del Software impartida en la Universidad de Oviedo.

Autoría

Este proyecto fue desarrollado por José Antonio García García: MrKarrter. En su desarrollo se han utilizado cuatro herramientas para agilizar la implementación del mismo:

  • JFlex
  • Berkeley Yacc
  • VGen y MAPL. Ambas desarrolladas por el profesor de la asignatura para uso didáctico: Raúl Izquierdo Castanedo.

Diseño

Para facilitar la implementación de este proyecto se ha divido el trabajo en 6 fases:

  • Análisis Léxico. Se encuentra implementado en este fichero.
  • Análisis Sintáctico. Se encuentra implementado en este fichero.
  • Análisis Semántico: Identificación. Se encuentra implementado en este fichero.
  • Análisis Semántico: Comprobación de Tipos. Se encuentra implementado en este fichero.
  • Generación Código: Gestión de Memoria. Se encuentra implementado en este fichero.
  • Generación Código: Selección de Instrucciones. Se encuentra implementado en este fichero.

FasesTraductor

Lenguaje

Las características del lenguaje que maneja este compilador se encuentran detalladas en el fichero: Descripción del Lenguaje. Los puntos más importantes serian:

  • Trabaja con 3 tipos simples: entero, float y char y 2 tipos compuestos: arrays y estructuras.
  • Las variables globales pueden estar definidas en cualquier parte del fichero y serán visibles únicamente en las funciones definidas posteriormente.
  • Las variables locales estarán definidas al principio de las funciones exclusivamente.
  • Se pueden realizar conversiones explicitas entre los tipos simples. cast<int>(5.6)
  • No hay conversión implícita al tipo de la izquierda.
  • La lista de operadores validos es la siguiente: + - * / < <= > >= == != &&(and) ||(or) !(not)
  • Algunas de las sentencias que soporta: condicional (if else), iterativa (while), salida y entrada por consola (print, read), llamada a funciones y/o procedimientos (a = f()) y (f())
  • Como ampliación se ha añadido al asignación múltiple de arrays (a = {444,555,666});

Un ejemplo de un programa de este lenguaje sería el siguiente:

// Comentarios de una línea
/* Comentarios
   de más de una línea */

var numeroTelefono:int;
var letraPreferida:char;
var altura:float;
   
struct DiaSemana { 
  posicion:int;
  mnemonico:char;
};

var lunes:DiaSemana;
var telefonosAmigos:[5]int;

funcion(parametro:real):int {
	var variableLocal:int;
	variableLocal = cast<int>(parametro);
	lunes.posicion = 1;
	lunes.mnemonico = 'L';
	return variableLocal;
}

procedimiento(){
	telefonosAmigos[0] = 111;
	telefonosAmigos[1] = 222;
	telefonosAmigos[2] = 333;
}

main(){	
	procedimiento();
	print telefonosAmigos[0];	// 111
	print telefonosAmigos[1];	// 222
	print telefonosAmigos[2];	// 333
	print '\n';
	print funcion(123.456);		// 123
	print lunes.posicion;		// 1
	print lunes.mnemonico;		// 'L'
	print '\n';

}

compiladorlenguaje's People

Contributors

jose-agg avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

cristian357r4

compiladorlenguaje's Issues

Ampliaciones

Para preparar la autoría de esta practica se intentarán añadir nuevas funcionalidades, que se irán listando aquí

Fase: Análisis Sintáctico

Determina si la secuencia de tokens es válida y, si lo es, identifica las estructuras sintácticas que forman

Fase: Análisis Léxico

Se busca separar los lexemas y clasificarlos en tokens. Se encarga de rechazar secuencias de caracteres que no formen lexemas válidos

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.