Menu

Tree [76f13c] default tip /
 History

Read Only access


File Date Author Commit
 ANTLR 2013-05-11 mjonir@ubuntu mjonir@ubuntu [b91bba] Merge
 grammars 2013-03-03 Mjonir Mjonir [ccb61b] init
 include 2013-03-09 mjonir@ubuntu mjonir@ubuntu [c1cecc] Ported to linux
 insstd 2013-05-12 Karl Karl [bccbbb] Merge
 lib 2013-03-09 mjonir@ubuntu mjonir@ubuntu [c1cecc] Ported to linux
 report 2013-05-13 Porteffroi Porteffroi [5638c4] Merge
 .hgignore 2013-05-03 Mjonir Mjonir [4b7d48] Fusion
 ANTLRLP.h 2013-03-09 mjonir@ubuntu mjonir@ubuntu [c1cecc] Ported to linux
 Inspiration.pdf 2013-05-15 Mjonir Mjonir [76f13c] Update PPT
 Inspiration.pptx 2013-05-15 Mjonir Mjonir [76f13c] Update PPT
 LINKS 2013-03-18 mjonir@ubuntu mjonir@ubuntu [d6e9f0] Add: Option to run program from compiler
 LLVMinc.h 2013-05-11 Porteffroi Porteffroi [ddd229] Merge
 Makefile 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 OOPdemo.insp 2013-05-12 Karl Karl [4834bd] Merge
 README 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 Rapport.odt 2013-05-12 Karl Karl [1fcf42] Merge
 TODO 2013-05-06 mjonir@ubuntu mjonir@ubuntu [9d1631] Length metamethod
 blockinformation.cpp 2013-05-03 Mjonir Mjonir [4b7d48] Fusion
 blockinformation.h 2013-05-03 Mjonir Mjonir [4b7d48] Fusion
 class.insp 2013-05-12 Mjonir Mjonir [3f41b3] Fusion
 closurecatcher.cpp 2013-05-12 Mjonir Mjonir [3f41b3] Fusion
 closurecatcher.h 2013-05-04 mjonir@ubuntu mjonir@ubuntu [47ffbf] Fixed closurecatcher
 codegenerator.cpp 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 codegenerator.h 2013-05-12 Porteffroi Porteffroi [3cc2a1] Merge
 compilateur.cbp 2013-05-12 Karl Karl [1fcf42] Merge
 compilerconfig.cpp 2013-05-09 Porteffroi Porteffroi [79a8db] Merge
 compilerconfig.h 2013-05-04 mjonir@ubuntu mjonir@ubuntu [437f84] Merge
 exceptions.cpp 2013-03-17 mjonir@ubuntu mjonir@ubuntu [f45dbf] Now supporting input configuration and compilat...
 exceptions.h 2013-03-17 mjonir@ubuntu mjonir@ubuntu [f45dbf] Now supporting input configuration and compilat...
 extendedparser.cpp 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 extendedparser.h 2013-05-09 mjonir@ubuntu mjonir@ubuntu [f7e26e] Merge
 functions.cpp 2013-05-11 Porteffroi Porteffroi [ddd229] Merge
 functions.h 2013-05-11 Porteffroi Porteffroi [ddd229] Merge
 guess.insp 2013-05-12 Porteffroi Porteffroi [3cc2a1] Merge
 input.insp 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 insp.lang 2013-05-12 Mjonir Mjonir [a30997] Fusion
 insp.lang.install.sh 2013-05-03 mjonir@ubuntu mjonir@ubuntu [1a2500] Merge
 libdebug.insp 2013-05-09 Porteffroi Porteffroi [79a8db] Merge
 libio.insp 2013-05-13 Porteffroi Porteffroi [5638c4] Merge
 libmath.insp 2013-05-12 Mjonir Mjonir [3f41b3] Fusion
 main.cpp 2013-05-09 mjonir@ubuntu mjonir@ubuntu [f7e26e] Merge
 noncopyable.cpp 2013-03-17 mjonir@ubuntu mjonir@ubuntu [cd7823] Add: ABC needed for config singleton
 noncopyable.h 2013-03-17 mjonir@ubuntu mjonir@ubuntu [cd7823] Add: ABC needed for config singleton
 qs.txt 2013-03-09 Mjonir Mjonir [5a8fd8] Starting code generation
 quicksort.insp 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 regression.insp 2013-05-12 Karl Karl [4834bd] Merge
 runtgenerator.cpp.inc 2013-05-13 mjonir@ubuntu mjonir@ubuntu [d1e299] Final version
 runtgenerator.h.inc 2013-05-12 Karl Karl [1fcf42] Merge
 scope.cpp 2013-05-04 mjonir@ubuntu mjonir@ubuntu [47ffbf] Fixed closurecatcher
 scope.h 2013-05-04 mjonir@ubuntu mjonir@ubuntu [47ffbf] Fixed closurecatcher
 singleton.cpp 2013-03-17 mjonir@ubuntu mjonir@ubuntu [cd7823] Add: ABC needed for config singleton
 singleton.h 2013-03-17 mjonir@ubuntu mjonir@ubuntu [cd7823] Add: ABC needed for config singleton
 stdlib.insp 2013-05-12 mjonir@ubuntu mjonir@ubuntu [34ed32] Merge

Read Me

Lexer/Parser:
______________

La grammaire de notre langage est écrite pour le logiciel ANTLRv3.4. La grammaire actuelle est disponible dans "ANTLR/LP.g". Celle-ci intègre à la fois les éléments de lexer, de parser, ainsi que des règles de réécriture permettant déjà de simplifier l'arbre syntaxique obtenu en sortie.

La grammaire peut être transformée en Lexer/Parser C via la commande suivante: "java -jar antlr-3.4-complete-no-antlrv2.jar LP.g". Une version prégénérée à partir de la dernière grammaire se trouve à la racine, avec le code du compilateur.



Compilateur:
______________

Un makefile fourni à la racine de cette archive permet de compiler notre compilateur. Celui-ci suppose la présence des fichiers générés par ANTLR, du runtime C ANTLR (-lantlr3c) ainsi que du runtime C LLVM. Si nécessaire, une version précompilée du runtime C ANTLR est disponible dans './lib'.  La compilation s'effectue via la commande:

make

Une commande "make clean" permet de nettoyer les fichiers temporaires générés. 


Le compilateur peut se lancer en ligne de commande de la façon suivante:

./inspiration [flags] ./input.txt


Les flags de compilation suivant sont disponibles:

-dAST: Affichage de l'arbre syntaxique obtenu sur la sortie standard
-dLL: Affichage du code LLVM obtenu sur la sortie standard
-O0: Force le compilateur à désactiver les optimisations. Ce paramètre est transmis à llc/gcc
-On (n>=1): Active les optimisations (comportement par défaut). Ce paramètre est transmis à llc/gcc
-o filename: Enregistre le code LLVM généré dans 'filename' (préfixez de './' pour le dossier courant).
-c filename: Si une version binaire du runtime est disponible (voir ci-dessous), utilise les outils LLC et GCC (supposés disponibles et appelables) pour compiler le programme d'entrée en format natif à la machine courante et l'enregistre sous 'filename' (préfixez de './' pour le dossier courant).
-r: Si l'option -c a été sélectionnée, lance le programme compilé dans le même invite de commande



Runtime:
______________

Le runtime nécessaire à notre langage est divisé en 3 parties:

1) Les fonctions les plus primitives résident directement dans le code du compilateur, et leur code LLVM est généré en début de compilation.

2) Les fonctions primitives de plus haut niveau sont autant que possible implémentées directement dans notre langage. Leur présence dans l'unité de compilation est nécessaire à la compilation des opérations qui en découlent, le compilateur y faisant référence lors de la génération de code. Ce runtime est disponible sous la forme de "stdlib.insp", lequel inclue "libmath.insp", "libio.insp" et "libdebug.insp".

3) Certaines opératations nécessaires au runtime sont programmées en C++ et entourées d'un wrapper C connu du compilateur. Cette librairie doit-être compilée séparément au moyen du makefile founi dans le dossier './insstd' et de la commande 'make'. La bibliothèque dynamique résultante doit être accessible à la compilation ainsi qu'à l'exécution. Le moyen le plus simple de l'installer sur un système UNIX est de la placer dans '/usr/local/lib', et d'ajouter ce même chemin à la variable d'environnement $LD_LIBRARY_PATH. La commande  'make install' exécutée avec les droits suffisants automatise cette opération. Si nécessaire, une version précompilée se trouve à la racine de cette archive ('./libinsstd.so').
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.