Compilateur C Map/Reduce pour multicoeurs

Le but de ce projet est de réaliser un compilateur d'un langage proche du C, permettant de faire 2 opérations parallèles qu'on trouve dans la plupart des langages fonctionnels: map et reduce. Ce travail est à réaliser en binôme. Le langage sera compilé en du code intermédiaire du compilateur LLVM. L'appel au compilateur LLVM permettra ainsi de finir la compilation en binaire et de générer du code efficace. La grammaire et l'analyseur syntaxique pour le langage commun sont fournis pour lex et yacc et pour une programmation C, mais vous pouvez choisir tout autre langage que le C et d'autres outils que lex et yacc (en python, java, ...). Voir sur cette page pour des alternatives.

Objectifs du projet

L'objectif du projet est d'implémenter un compilateur pour le langage défini par la grammaire donnée. La sémantique sera celle du C, avec les restrictions suivantes: Le compilateur devra indiquer s'il trouve des erreurs de syntaxe, sur quelle ligne, et si il y a des erreurs de typage.

Map / Reduce

Les deux fonctions, map et reduce, sont des opérations parallèles. Pour chaque appel à map ou reduce, le compilateur devra générer un code vectoriel: les instructions manipuleront les données 8 éléments par 8 éléments (entiers ou flottants). Une fonctionnalité facultative est de pousser le parallélisme en utilisant des threads pour effectuer ces opérations.

Fonctionnalités facultatives

Un ensemble de fonctionnalités facultatives peut être implémenté: Tout autre extension pourra être proposée.

À Rendre

La réalisation du compilateur donnera lieu à 2 livrables Une soutenance orale sera organisée, ou chaque groupe présentera en 5min ce que fait son compilateur.

Évaluation

L'évaluation sera basée sur ces critères (dans cet ordre, du plus important au moins important):