begin process at 2010 03 21 05:54:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > COMPILATEUR DE PSEUDO PASCAL

COMPILATEUR DE PSEUDO PASCAL


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Application Classé sous :Compilateur, Interpréteur, Langage rationnelle, Traits Metaprogrammation, Assembleur Niveau :Expert Date de création :21/02/2009 Date de mise à jour :11/03/2009 20:33:23 Vu / téléchargé :2 359 / 287

Auteur : CptPingu

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
C'est un compilateur et un interpréteur d'un langage basé sur du pascal et du C.
Le langage en lui même n'est pas très évolué:
- 3 types (entier, booléen, chaîne de caractères).
- 2 structures de contrôles (if, while)
- 3 builtins (read, print, exit)
- Pas de pointeurs
- Pas de tableau.
- Fonctions et fonctions récursives, avec mot clé return débranchant.
- 5 opérateurs de calcul +,-,/,*,%
- 6 opérateurs de comparaison ==, !=, >, >=, <, <=
- Pas de "et" et de "ou". (Pas encore, mais c'est prévu).
- Les parenthèses sont obligatoires sur des expressions composées. (Temporaire !)
Ex: 1 + 2 + 3 ne fonctionne pas, il faut écrire: 1 + (2 + 3)
- Possibilité de faire des variables globales ou locales.

L'intérêt premier de ce projet était de présenter les étapes de compilation d'un code source. C'est pour cela que le langage compilé n'est pas compliqué.
Chacune des étapes peut être affiché, des options permettant de voir les étapes désirées.

Pour rappeler brièvement les étapes:
- Lexing (option -L): On récupère tout les tokens d'un fichier. Un token est le plus petit morceau atomique définit dans une grammaire. Par exemple, dans une phrase, un token est un mot. Cette étape vérifie aussi que certains mots impossible ne soit pas présent. Par exemple: "if @ then" génèrera une erreur de lexing, car @ n'est pas un token valide.
- Parsing (option -P): On vérifie que tout les tokens récupérés sont bien agencé dans l'ordre définis par la grammaire du langage. Cette étape vérifie qu'il n'y ait pas de token mal agencé. Par exemple: "then if while" est une erreur de parsing, puisque cette agencement n'est pas correcte. Créer un AST, réutilisé par toutes les étapes suivantes, à l'aide du design pattern visitor.
- Binding (option -B): On vérifie que toute les variables et fonctions soient bien définis, et ne soient pas redéfinis. Par exemple: a = 10; levera une erreur de binding puisque "a" n'est pas déclaré. De même: "var a : integer; var a : integer;" provoquera aussi une erreur de binding puisque "a" est déclaré deux fois.
- Type Checking (option -T): On vérifie que le typage des variables est respecté. Par exemple: "var a : integer;" puis "a = 10;" est correcte, tandis que: "var a : string;" puis "a = 10" est incorrecte.

Une fois toutes ces étapes effectuées, notre code source est considérée comme valide. On peut alors exécuter les étapes suivantes:
- Exécution (option -X): Exécute le code, et montre le cheminement d'exécution. Option par défaut.
- Compilation (option -S): Génère de l'assembleur, qu'il ne reste qu'à assembler avec nasm de la manière suivante:
./minicompil -S prog.mmc > prog.asm
nasm -o prog.o -f elf -d ELF_TYPE prog.asm
PUIS
ld -s --dynamic-linker /lib/ld-linux.so.2 -lc prog.o -o prog
OU
./auto_compile.sh prog.asm


Étapes bonus:
- Conversion en C++ (option -C): Convertit le code en C++. Compilable en tapant:
./minicompil -C prog.mmc > prog.cc
PUIS
g++ -W -Wall prog.cc -o prog
OU
./auto_compile.sh prog.cc
- Debugging (option -D): Fait office de debuggeur. Lance une exécution en montrant l'état de toute les variables, à chaques instructions.
- All (option -V): Lance et affiche toutes les étapes jusqu'à l'exécution.
- Grammar generator (option -G): Génère une grammaire valide, aléatoirement.
- Dotty tree (option -O): Génère une sortie pour dotty de l'AST crée. (Dotty est un logiciel qui permet de dessiner entre autres des graphes et des arbres, cf capture). Une image peut être crée en tapant:
./minicompil -O prog.mmc > prog.dot
PUIS
dot -Tpng prog.dot > prog.png
OU
./auto_compile.sh prog.dot

Critiques:
- L'assembleur généré n'est pas optimisé. Les puristes de l'assembleur trouveront certaines routines écrite de manière peu élégante. De plus je passe beaucoup de chose par la pile.
- Certains morceaux de code pourraient être optimisés, je vais y travailler.
- L'AST pourrait être amélioré, par exemple en ne créant qu'un seul noeud lors d'une expression constante. Ex: 1 + (2 + 3), génère beaucoup de noeud, alors qu'un seul noeud contenant 6, serait suffisant.
- L'overloading, l'inling, les instructions "ou" et "et", la possibilité de découper le code en plusieurs fichiers ne sont pas gérés.
- Non testé sous windows, mais devrait fonctionner facilement, puisque je me suis imposé de ne pas avoir de dépendance ni sur flex/bison, ni sur boost...
- L'arborescence n'est pas terrible (tout dans src).
- L'assembleur généré utilise des fonctions de la libc. J'aurais aimé ne pas avoir de dépendance là dessus.

Source

  • Dans le zip ou sur svn : http://svn.assembla.com/svn/cubs
Dans le zip ou sur svn : http://svn.assembla.com/svn/cubs

 Conclusion

Documentation:
- Documentation technique (33mo): http://0217021.free.fr/cubs/refman.pdf

Notes:
Cod é entièrement sous linux avec emacs.
Compilé avec succès sous g++ 4.2.4.
Assembleur assemblé sous NASM version 2.06rc2.
Commentaires au format Doxygen.

Pour compiler: ./configure && make
Pour compiler en mode debug (-g + -lefence + assert): ./configure --with-debugmax && make
Pour générer la doc: make doc
Pour lancer les tests: make check

La dernière version est librement "checkoutable" ici: http://svn.assembla.com/svn/cubs
Sous unix: svn co http://svn.assembla.com/svn/cubs
Sous windows, il y a "tortoise svn" qui permet de le faire.

Bibliographie:
- Dr Paul Carter: http://www.drpaulcarter.com/pcasm/, à qui j'ai emprunté la seule partie de ce projet que je n'ai pas faite seul: les routines "read_int", "read_char", "print_int" et print_string".
- Mes cours sur les langages rationnelles et la compilation que je ne peux pas diffuser ici.

Bugs:
- Merci de me contacter si vous trouvez un bug: cptpingu AT gmail DOT com
- Toutes les remarques constructives sont les bienvenue.

Binaires:
Si vous ne voulez pas compiler le projet, j'ai déjà crée les binaires ici:
- Linux: http://0217021.free.fr/cubs/cubs
- Windows: http://0217021.free.fr/cubs/cubs.exe

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   cubs
    •   check
      •   binder
        • bug-funclight.mmcTélécharger ce fichier [Réservé aux membres club]176 octets
        • bug-funclight2.mmcTélécharger ce fichier [Réservé aux membres club]95 octets
        • redefined.mmcTélécharger ce fichier [Réservé aux membres club]56 octets
        • redefined2.mmcTélécharger ce fichier [Réservé aux membres club]42 octets
        • redefined-func-with-arg.mmcTélécharger ce fichier [Réservé aux membres club]71 octets
        • redefined-func-with-arg2.mmcTélécharger ce fichier [Réservé aux membres club]93 octets
        • redefined-func-with-arg3.mmcTélécharger ce fichier [Réservé aux membres club]110 octets
        • redefined-func-with-arg4.mmcTélécharger ce fichier [Réservé aux membres club]111 octets
        • redefined-var-in-func.mmcTélécharger ce fichier [Réservé aux membres club]81 octets
        • return-outside-any-func.mmcTélécharger ce fichier [Réservé aux membres club]44 octets
        • return-outside-any-func2.mmcTélécharger ce fichier [Réservé aux membres club]96 octets
        • undeclared.mmcTélécharger ce fichier [Réservé aux membres club]40 octets
      •   execution
        • complex-func-call-no-args.mmcTélécharger ce fichier [Réservé aux membres club]201 octets
        • complex-func-call-no-args-no-return.mmcTélécharger ce fichier [Réservé aux membres club]188 octets
        • cond-infequal.mmcTélécharger ce fichier [Réservé aux membres club]107 octets
        • div-by-zero.mmcTélécharger ce fichier [Réservé aux membres club]63 octets
        • exit.mmcTélécharger ce fichier [Réservé aux membres club]42 octets
        • exit-in-func.mmcTélécharger ce fichier [Réservé aux membres club]229 octets
        • func-call.mmcTélécharger ce fichier [Réservé aux membres club]154 octets
        • func-call2.mmcTélécharger ce fichier [Réservé aux membres club]171 octets
        • func-call-no-args.mmcTélécharger ce fichier [Réservé aux membres club]120 octets
        • func-call-no-return.mmcTélécharger ce fichier [Réservé aux membres club]142 octets
        • func-call-var-as-arg.mmcTélécharger ce fichier [Réservé aux membres club]166 octets
        • func-light.mmcTélécharger ce fichier [Réservé aux membres club]199 octets
        • func-light-recursive.mmcTélécharger ce fichier [Réservé aux membres club]218 octets
        • func-multi-args.mmcTélécharger ce fichier [Réservé aux membres club]255 octets
        • func-multi-args-int-light.mmcTélécharger ce fichier [Réservé aux membres club]344 octets
        • func-multi-args-light.mmcTélécharger ce fichier [Réservé aux membres club]192 octets
        • func-no-return.mmcTélécharger ce fichier [Réservé aux membres club]105 octets
        • func-recursive.mmcTélécharger ce fichier [Réservé aux membres club]218 octets
        • func-return-abort.mmcTélécharger ce fichier [Réservé aux membres club]187 octets
        • funcs-multi-args.mmcTélécharger ce fichier [Réservé aux membres club]357 octets
        • func-test.mmcTélécharger ce fichier [Réservé aux membres club]737 octets
        • func-test2.mmcTélécharger ce fichier [Réservé aux membres club]300 octets
        • func-test3.mmcTélécharger ce fichier [Réservé aux membres club]370 octets
        • function-max.mmcTélécharger ce fichier [Réservé aux membres club]309 octets
        • globa-var-in-function.mmcTélécharger ce fichier [Réservé aux membres club]123 octets
        • good-affect-var-with-var.mmcTélécharger ce fichier [Réservé aux membres club]86 octets
        • good-alone-expr.mmcTélécharger ce fichier [Réservé aux membres club]41 octets
        • good-bool-expr.mmcTélécharger ce fichier [Réservé aux membres club]63 octets
        • good-expr.mmcTélécharger ce fichier [Réservé aux membres club]79 octets
        • good-expr2.mmcTélécharger ce fichier [Réservé aux membres club]181 octets
        • good-expr-light.mmcTélécharger ce fichier [Réservé aux membres club]66 octets
        • good-simple-affects.mmcTélécharger ce fichier [Réservé aux membres club]119 octets
        • good-simple-expr.mmcTélécharger ce fichier [Réservé aux membres club]132 octets
        • good-simple-expr2.mmcTélécharger ce fichier [Réservé aux membres club]153 octets
        • good-simple-expr-negativ.mmcTélécharger ce fichier [Réservé aux membres club]64 octets
        • good-useless-prog.mmcTélécharger ce fichier [Réservé aux membres club]1 099 octets
        • good-useless-prog-light.mmcTélécharger ce fichier [Réservé aux membres club]158 octets
        • good-var-decl.mmcTélécharger ce fichier [Réservé aux membres club]139 octets
        • if-else-bad-cond-body.mmcTélécharger ce fichier [Réservé aux membres club]135 octets
        • if-good-cond-body.mmcTélécharger ce fichier [Réservé aux membres club]100 octets
        • if-with-var.mmcTélécharger ce fichier [Réservé aux membres club]105 octets
        • infequal.mmcTélécharger ce fichier [Réservé aux membres club]66 octets
        • print.mmcTélécharger ce fichier [Réservé aux membres club]236 octets
        • print-modulo.mmcTélécharger ce fichier [Réservé aux membres club]68 octets
        • proc-light-recursive.mmcTélécharger ce fichier [Réservé aux membres club]215 octets
        • simple-affect.mmcTélécharger ce fichier [Réservé aux membres club]59 octets
        • simple-op.mmcTélécharger ce fichier [Réservé aux membres club]66 octets
        • while-10-loop.mmcTélécharger ce fichier [Réservé aux membres club]106 octets
      •   generated
        • 1.mmcTélécharger ce fichier [Réservé aux membres club]1 011 octets
        • 3.mmcTélécharger ce fichier [Réservé aux membres club]615 octets
      •   interactiv
        • func-recursive.mmcTélécharger ce fichier [Réservé aux membres club]298 octets
        • read.mmcTélécharger ce fichier [Réservé aux membres club]399 octets
        • readbool.mmcTélécharger ce fichier [Réservé aux membres club]68 octets
        • readint.mmcTélécharger ce fichier [Réservé aux membres club]68 octets
        • readstring.mmcTélécharger ce fichier [Réservé aux membres club]67 octets
      •   lexer
        • bad-grammar.mmcTélécharger ce fichier [Réservé aux membres club]41 octets
        • basic.mmcTélécharger ce fichier [Réservé aux membres club]445 octets
        • bool.mmcTélécharger ce fichier [Réservé aux membres club]76 octets
        • comment.mmcTélécharger ce fichier [Réservé aux membres club]81 octets
        • invalid-id.mmcTélécharger ce fichier [Réservé aux membres club]61 octets
        • invalid-id2.mmcTélécharger ce fichier [Réservé aux membres club]142 octets
        • pseudo-pascal.mmcTélécharger ce fichier [Réservé aux membres club]1 191 octets
        • pseudo-pascal2.mmcTélécharger ce fichier [Réservé aux membres club]788 octets
      •   parser
        • addition.mmcTélécharger ce fichier [Réservé aux membres club]46 octets
        • affect.mmcTélécharger ce fichier [Réservé aux membres club]41 octets
        • alone-expression.mmcTélécharger ce fichier [Réservé aux membres club]41 octets
        • bad-add-add.mmcTélécharger ce fichier [Réservé aux membres club]51 octets
        • callfunc.mmcTélécharger ce fichier [Réservé aux membres club]42 octets
        • callfuncmulti.mmcTélécharger ce fichier [Réservé aux membres club]46 octets
        • callfuncstr.mmcTélécharger ce fichier [Réservé aux membres club]49 octets
        • emptyfunc.mmcTélécharger ce fichier [Réservé aux membres club]63 octets
        • emptyinstr.mmcTélécharger ce fichier [Réservé aux membres club]32 octets
        • end-of-bad-instr.mmcTélécharger ce fichier [Réservé aux membres club]83 octets
        • funcdecl.mmcTélécharger ce fichier [Réservé aux membres club]141 octets
        • funcdeclinstr.mmcTélécharger ce fichier [Réservé aux membres club]154 octets
        • funcfull.mmcTélécharger ce fichier [Réservé aux membres club]373 octets
        • funcfull2.mmcTélécharger ce fichier [Réservé aux membres club]228 octets
        • func-has-builtin-name.mmcTélécharger ce fichier [Réservé aux membres club]94 octets
        • funcmultivar.mmcTélécharger ce fichier [Réservé aux membres club]79 octets
        • funcmultivars.mmcTélécharger ce fichier [Réservé aux membres club]97 octets
        • funconevar.mmcTélécharger ce fichier [Réservé aux membres club]73 octets
        • funcsdecl.mmcTélécharger ce fichier [Réservé aux membres club]548 octets
        • funcsnoinstrdecl.mmcTélécharger ce fichier [Réservé aux membres club]315 octets
        • function-misc.mmcTélécharger ce fichier [Réservé aux membres club]373 octets
        • function-misc2.mmcTélécharger ce fichier [Réservé aux membres club]320 octets
        • functwovars.mmcTélécharger ce fichier [Réservé aux membres club]85 octets
        • funcvar.mmcTélécharger ce fichier [Réservé aux membres club]87 octets
        • good-add-add.mmcTélécharger ce fichier [Réservé aux membres club]53 octets
        • good-add-add-invert.mmcTélécharger ce fichier [Réservé aux membres club]53 octets
        • if.mmcTélécharger ce fichier [Réservé aux membres club]67 octets
        • incomplete-if-bug.mmcTélécharger ce fichier [Réservé aux membres club]197 octets
        • instr_2read.mmcTélécharger ce fichier [Réservé aux membres club]54 octets
        • instr_read.mmcTélécharger ce fichier [Réservé aux membres club]43 octets
        • instrs.mmcTélécharger ce fichier [Réservé aux membres club]199 octets
        • instrs2.mmcTélécharger ce fichier [Réservé aux membres club]99 octets
        • invalid-negativ-expression.mmcTélécharger ce fichier [Réservé aux membres club]65 octets
        • invalid-negativ-negativ-expression.mmcTélécharger ce fichier [Réservé aux membres club]62 octets
        • multicallfunc.mmcTélécharger ce fichier [Réservé aux membres club]66 octets
        • multicallfuncmulti.mmcTélécharger ce fichier [Réservé aux membres club]88 octets
        • negativ-expression.mmcTélécharger ce fichier [Réservé aux membres club]67 octets
        • negativ-value.mmcTélécharger ce fichier [Réservé aux membres club]61 octets
        • nested-instr.mmcTélécharger ce fichier [Réservé aux membres club]46 octets
        • nested-nested-instr.mmcTélécharger ce fichier [Réservé aux membres club]64 octets
        • no-do-in-while.mmcTélécharger ce fichier [Réservé aux membres club]60 octets
        • no-then-in-if.mmcTélécharger ce fichier [Réservé aux membres club]59 octets
        • positiv-value.mmcTélécharger ce fichier [Réservé aux membres club]61 octets
        • valid-negativ-negativ-expression.mmcTélécharger ce fichier [Réservé aux membres club]64 octets
        • vardecl.mmcTélécharger ce fichier [Réservé aux membres club]80 octets
      •   typechecking
        • bool-plus-bool.mmcTélécharger ce fichier [Réservé aux membres club]69 octets
        • callfunc-with-bad-type.mmcTélécharger ce fichier [Réservé aux membres club]109 octets
        • callfunc-with-multi-bad-type.mmcTélécharger ce fichier [Réservé aux membres club]128 octets
        • callfunc-with-multi-multi-bad-type.mmcTélécharger ce fichier [Réservé aux membres club]162 octets
        • callfunc-with-type.mmcTélécharger ce fichier [Réservé aux membres club]104 octets
        • func-call-func-declared-after.mmcTélécharger ce fichier [Réservé aux membres club]195 octets
        • if-string-cond.mmcTélécharger ce fichier [Réservé aux membres club]65 octets
        • string-sup-string.mmcTélécharger ce fichier [Réservé aux membres club]73 octets
        • while-string-cond.mmcTélécharger ce fichier [Réservé aux membres club]66 octets
      • checker.shTélécharger ce fichier [Réservé aux membres club]2 522 octets
    •   doc
      • DoxyfileTélécharger ce fichier [Réservé aux membres club]55 932 octets
    •   src
      • ASMGeneratorVisitor.ccTélécharger ce fichier [Réservé aux membres club]24 153 octets
      • ASMGeneratorVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 733 octets
      • ASMGeneratorVisitor.hxxTélécharger ce fichier [Réservé aux membres club]10 085 octets
      • BaseVisitor.ccTélécharger ce fichier [Réservé aux membres club]56 octets
      • BaseVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 932 octets
      • BaseVisitor.hxxTélécharger ce fichier [Réservé aux membres club]16 794 octets
      • Binder.ccTélécharger ce fichier [Réservé aux membres club]688 octets
      • Binder.hhTélécharger ce fichier [Réservé aux membres club]401 octets
      • BinderVisitor.ccTélécharger ce fichier [Réservé aux membres club]13 821 octets
      • BinderVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 289 octets
      • BindingPrinterVisitor.ccTélécharger ce fichier [Réservé aux membres club]11 386 octets
      • BindingPrinterVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 099 octets
      • Compiler.ccTélécharger ce fichier [Réservé aux membres club]7 920 octets
      • Compiler.hhTélécharger ce fichier [Réservé aux membres club]1 937 octets
      • Compiler.hxxTélécharger ce fichier [Réservé aux membres club]5 425 octets
      • Configuration.ccTélécharger ce fichier [Réservé aux membres club]317 octets
      • Configuration.hhTélécharger ce fichier [Réservé aux membres club]499 octets
      • Configuration.hxxTélécharger ce fichier [Réservé aux membres club]1 606 octets
      • ConvertToCppVisitor.ccTélécharger ce fichier [Réservé aux membres club]15 379 octets
      • ConvertToCppVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 203 octets
      • CreateAST.ccTélécharger ce fichier [Réservé aux membres club]29 209 octets
      • CreateAST.hhTélécharger ce fichier [Réservé aux membres club]5 154 octets
      • CreateAST.hxxTélécharger ce fichier [Réservé aux membres club]14 985 octets
      • Error.ccTélécharger ce fichier [Réservé aux membres club]860 octets
      • Error.hhTélécharger ce fichier [Réservé aux membres club]551 octets
      • ErrorHandler.ccTélécharger ce fichier [Réservé aux membres club]1 984 octets
      • ErrorHandler.hhTélécharger ce fichier [Réservé aux membres club]578 octets
      • Execution.ccTélécharger ce fichier [Réservé aux membres club]1 323 octets
      • Execution.hhTélécharger ce fichier [Réservé aux membres club]458 octets
      • ExecutionVisitor.ccTélécharger ce fichier [Réservé aux membres club]27 935 octets
      • ExecutionVisitor.hhTélécharger ce fichier [Réservé aux membres club]3 763 octets
      • Flyweight.hhTélécharger ce fichier [Réservé aux membres club]1 197 octets
      • Flyweight.hxxTélécharger ce fichier [Réservé aux membres club]5 499 octets
      • GenerateAST.ccTélécharger ce fichier [Réservé aux membres club]13 263 octets
      • GenerateAST.hhTélécharger ce fichier [Réservé aux membres club]2 744 octets
      • GenerateAST.hxxTélécharger ce fichier [Réservé aux membres club]1 031 octets
      • GenerateDotASTVisitor.ccTélécharger ce fichier [Réservé aux membres club]18 875 octets
      • GenerateDotASTVisitor.hhTélécharger ce fichier [Réservé aux membres club]4 893 octets
      • GenerateDotASTVisitor.hxxTélécharger ce fichier [Réservé aux membres club]1 688 octets
      • IVisitable.hhTélécharger ce fichier [Réservé aux membres club]322 octets
      • IVisitor.hhTélécharger ce fichier [Réservé aux membres club]3 612 octets
      • Lexer.ccTélécharger ce fichier [Réservé aux membres club]9 343 octets
      • Lexer.hhTélécharger ce fichier [Réservé aux membres club]1 720 octets
      • main.ccTélécharger ce fichier [Réservé aux membres club]4 781 octets
      • main.hhTélécharger ce fichier [Réservé aux membres club]85 octets
      • MakefileTélécharger ce fichier [Réservé aux membres club]2 015 octets
      • Makefile.depsTélécharger ce fichier [Réservé aux membres club]36 608 octets
      • Node.ccTélécharger ce fichier [Réservé aux membres club]569 octets
      • Node.hhTélécharger ce fichier [Réservé aux membres club]583 octets
      • NodeAffect.ccTélécharger ce fichier [Réservé aux membres club]1 388 octets
      • NodeAffect.hhTélécharger ce fichier [Réservé aux membres club]681 octets
      • NodeArgument.ccTélécharger ce fichier [Réservé aux membres club]1 596 octets
      • NodeArgument.hhTélécharger ce fichier [Réservé aux membres club]847 octets
      • NodeArguments.ccTélécharger ce fichier [Réservé aux membres club]1 521 octets
      • NodeArguments.hhTélécharger ce fichier [Réservé aux membres club]762 octets
      • NodeBoolean.ccTélécharger ce fichier [Réservé aux membres club]1 009 octets
      • NodeBoolean.hhTélécharger ce fichier [Réservé aux membres club]550 octets
      • NodeCallFunc.ccTélécharger ce fichier [Réservé aux membres club]2 175 octets
      • NodeCallFunc.hhTélécharger ce fichier [Réservé aux membres club]1 004 octets
      • NodeCompoundInstr.ccTélécharger ce fichier [Réservé aux membres club]1 161 octets
      • NodeCompoundInstr.hhTélécharger ce fichier [Réservé aux membres club]685 octets
      • NodeDeclaration.ccTélécharger ce fichier [Réservé aux membres club]1 150 octets
      • NodeDeclaration.hhTélécharger ce fichier [Réservé aux membres club]650 octets
      • NodeDeclarationBody.ccTélécharger ce fichier [Réservé aux membres club]1 493 octets
      • NodeDeclarationBody.hhTélécharger ce fichier [Réservé aux membres club]728 octets
      • NodeDeclarations.ccTélécharger ce fichier [Réservé aux membres club]1 576 octets
      • NodeDeclarations.hhTélécharger ce fichier [Réservé aux membres club]821 octets
      • NodeExit.ccTélécharger ce fichier [Réservé aux membres club]995 octets
      • NodeExit.hhTélécharger ce fichier [Réservé aux membres club]602 octets
      • NodeExpression.ccTélécharger ce fichier [Réservé aux membres club]1 077 octets
      • NodeExpression.hhTélécharger ce fichier [Réservé aux membres club]610 octets
      • NodeExpressions.ccTélécharger ce fichier [Réservé aux membres club]1 559 octets
      • NodeExpressions.hhTélécharger ce fichier [Réservé aux membres club]768 octets
      • NodeFactor.ccTélécharger ce fichier [Réservé aux membres club]3 057 octets
      • NodeFactor.hhTélécharger ce fichier [Réservé aux membres club]1 386 octets
      • NodeFunction.ccTélécharger ce fichier [Réservé aux membres club]2 776 octets
      • NodeFunction.hhTélécharger ce fichier [Réservé aux membres club]1 219 octets
      • NodeFunctions.ccTélécharger ce fichier [Réservé aux membres club]1 484 octets
      • NodeFunctions.hhTélécharger ce fichier [Réservé aux membres club]712 octets
      • NodeHeaderFunc.ccTélécharger ce fichier [Réservé aux membres club]1 875 octets
      • NodeHeaderFunc.hhTélécharger ce fichier [Réservé aux membres club]888 octets
      • NodeId.ccTélécharger ce fichier [Réservé aux membres club]1 856 octets
      • NodeId.hhTélécharger ce fichier [Réservé aux membres club]743 octets
      • NodeIdFunc.ccTélécharger ce fichier [Réservé aux membres club]1 849 octets
      • NodeIdFunc.hhTélécharger ce fichier [Réservé aux membres club]816 octets
      • NodeIds.ccTélécharger ce fichier [Réservé aux membres club]1 301 octets
      • NodeIds.hhTélécharger ce fichier [Réservé aux membres club]616 octets
      • NodeIf.ccTélécharger ce fichier [Réservé aux membres club]1 873 octets
      • NodeIf.hhTélécharger ce fichier [Réservé aux membres club]965 octets
      • NodeInstr.ccTélécharger ce fichier [Réservé aux membres club]4 086 octets
      • NodeInstr.hhTélécharger ce fichier [Réservé aux membres club]1 848 octets
      • NodeInstrs.ccTélécharger ce fichier [Réservé aux membres club]1 485 octets
      • NodeInstrs.hhTélécharger ce fichier [Réservé aux membres club]722 octets
      • NodeNumber.ccTélécharger ce fichier [Réservé aux membres club]946 octets
      • NodeNumber.hhTélécharger ce fichier [Réservé aux membres club]535 octets
      • NodeOperation.ccTélécharger ce fichier [Réservé aux membres club]1 989 octets
      • NodeOperation.hhTélécharger ce fichier [Réservé aux membres club]981 octets
      • NodePrint.ccTélécharger ce fichier [Réservé aux membres club]1 046 octets
      • NodePrint.hhTélécharger ce fichier [Réservé aux membres club]591 octets
      • NodeProgram.ccTélécharger ce fichier [Réservé aux membres club]1 916 octets
      • NodeProgram.hhTélécharger ce fichier [Réservé aux membres club]925 octets
      • NodeRead.ccTélécharger ce fichier [Réservé aux membres club]946 octets
      • NodeRead.hhTélécharger ce fichier [Réservé aux membres club]538 octets
      • NodeReturn.ccTélécharger ce fichier [Réservé aux membres club]1 418 octets
      • NodeReturn.hhTélécharger ce fichier [Réservé aux membres club]738 octets
      • NodeStringExpr.ccTélécharger ce fichier [Réservé aux membres club]1 069 octets
      • NodeStringExpr.hhTélécharger ce fichier [Réservé aux membres club]602 octets
      • NodeType.ccTélécharger ce fichier [Réservé aux membres club]963 octets
      • NodeType.hhTélécharger ce fichier [Réservé aux membres club]561 octets
      • NodeWhile.ccTélécharger ce fichier [Réservé aux membres club]1 456 octets
      • NodeWhile.hhTélécharger ce fichier [Réservé aux membres club]730 octets
      • Parser.ccTélécharger ce fichier [Réservé aux membres club]1 217 octets
      • Parser.hhTélécharger ce fichier [Réservé aux membres club]493 octets
      • PrettyPrinterVisitor.ccTélécharger ce fichier [Réservé aux membres club]15 451 octets
      • PrettyPrinterVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 248 octets
      • Scope.ccTélécharger ce fichier [Réservé aux membres club]58 octets
      • Scope.hhTélécharger ce fichier [Réservé aux membres club]1 149 octets
      • Scope.hxxTélécharger ce fichier [Réservé aux membres club]5 092 octets
      • SharedString.ccTélécharger ce fichier [Réservé aux membres club]927 octets
      • SharedString.hhTélécharger ce fichier [Réservé aux membres club]784 octets
      • SharedString.hxxTélécharger ce fichier [Réservé aux membres club]2 418 octets
      • Singleton.hhTélécharger ce fichier [Réservé aux membres club]230 octets
      • Singleton.hxxTélécharger ce fichier [Réservé aux membres club]349 octets
      • Symbol.ccTélécharger ce fichier [Réservé aux membres club]5 423 octets
      • Symbol.hhTélécharger ce fichier [Réservé aux membres club]1 229 octets
      • Symbol.hxxTélécharger ce fichier [Réservé aux membres club]489 octets
      • Traits.hhTélécharger ce fichier [Réservé aux membres club]1 068 octets
      • TypeChecker.ccTélécharger ce fichier [Réservé aux membres club]769 octets
      • TypeChecker.hhTélécharger ce fichier [Réservé aux membres club]447 octets
      • TypeCheckerVisitor.ccTélécharger ce fichier [Réservé aux membres club]17 795 octets
      • TypeCheckerVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 132 octets
      • TypeCheckingPrinterVisitor.ccTélécharger ce fichier [Réservé aux membres club]11 789 octets
      • TypeCheckingPrinterVisitor.hhTélécharger ce fichier [Réservé aux membres club]2 181 octets
      • TypedNode.ccTélécharger ce fichier [Réservé aux membres club]101 octets
      • TypedNode.hhTélécharger ce fichier [Réservé aux membres club]455 octets
      • TypedNode.hxxTélécharger ce fichier [Réservé aux membres club]689 octets
      • Utils.ccTélécharger ce fichier [Réservé aux membres club]4 623 octets
      • Utils.hhTélécharger ce fichier [Réservé aux membres club]1 961 octets
      • Utils.hxxTélécharger ce fichier [Réservé aux membres club]3 368 octets
      • Variable.ccTélécharger ce fichier [Réservé aux membres club]9 651 octets
      • Variable.hhTélécharger ce fichier [Réservé aux membres club]1 986 octets
    • AUTHORSTélécharger ce fichier [Réservé aux membres club]11 octets
    • auto_compile.shTélécharger ce fichier [Réservé aux membres club]1 844 octets
    • configureTélécharger ce fichier [Réservé aux membres club]2 346 octets
    • cubs.devTélécharger ce fichier [Réservé aux membres club]20 117 octets
    • MakefileTélécharger ce fichier [Réservé aux membres club]1 523 octets
    • READMETélécharger ce fichier [Réservé aux membres club]5 006 octets
    • stats.shTélécharger ce fichier [Réservé aux membres club]384 octets

Télécharger le zip


 Historique

21 février 2009 17:31:46 :
Ajout d'une documentation technique, trop lourde pour être jointe au zip.
22 février 2009 16:14:13 :
Ajout d'un fichier projet pour Dev-C++. Et fix d'un type uint en unsigned int. Compile maintenant sans problèmes sous windows. Ajout d'un lien vers les binaires.
11 mars 2009 20:33:25 :
Ajout d'un script: auto_compile.sh qui exécute les bonnes commande en fonction de l'extension. Remplacement de std::endl, par des std::nl (fait maison, juste pour démonstration). Remplacement des std::string de la classe Symbol, par des mystd::SharedString. Cette classe hérite d'une classe Flyweight générique, et évite une duplication inutile en mémoire de tokens similaires. Quelques petites retouches de code, mineures.

 Sources du même auteur

ALIGNER TEXTE CONSOLE

 Sources de la même categorie

CONSTRUCTION D'UNE AUTOMATE FINIS DETERMINISTE par skible
COMPILATEUR BF VERS BF-BYTECODE par Davy974
GESTIONNAIRE DE BIBLIOTHEQUE par eishtein
FICHIER ALBUM MUSICAL par imenouuuuuuuuuche
LOUISDU81 HTTP EDITOR par louisdu81

 Sources en rapport avec celle ci

COMPILATEUR BF VERS BF-BYTECODE par Davy974
Source avec Zip Source avec une capture IPSIM, UN SIMULATEUR DE MINI-PENTIUM par Msgbox
Source avec Zip TEMPLATES C/C++ POUR VS 2008 par BruNews
Source avec Zip Source avec une capture INJECTION DE DLL DANS N'IMPORTE QUEL PROCESS par krust
Source avec Zip Source avec une capture LIAISON D'UN MODULE .OBJ ASM À UN EXE C++ par yann_lo_san

Commentaires et avis

Commentaire de facdaar le 23/02/2009 18:48:28 10/10

Merci pour ce cours accéléré !

Commentaire de le_duche le 26/02/2009 16:58:15

Faire 1 + 2 + 3 n'est pourtant pas difficile du tout avec une grammaire LL1...

Commentaire de xtremejames183 le 03/03/2009 23:45:35 8/10

pas mal du tous , je voudrais savoir quelle type d'arbre binaire tu as utilise pour le parsing (splay/red-black,... tree) ?

Commentaire de CptPingu le 03/03/2009 23:50:33

Un simple AST. C'est à dire que j'ai associé à chaque noeud de ma grammaire une classe qui contient des pointeurs vers les noeuds de grammaire associés. Pour répondre à ta question: c'est un arbre général tout ce qu'il y a de plus classique (cf capture).

Commentaire de exar le 06/03/2009 10:12:18 9/10

Vraiment pas mal du tout !  Très instructif !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Recherche un compilateur en c [ par turlututu ] Help me!!!!! :0(Je cherche déseperement un compilateur KEIL ELEKTRONIK en C.Je posséde le compilateur C51 Compiler V3.4 sous dos mais j'en voudrait un Hors programmation... [ par NitRic ] Seulement une petite suggestion: Il serait bien d'indiquer dans les message(demande d'aide) quel compilateur on utilise... Pourquoi je dit ca:Allez vo (Hors Sujet) Petit coup de gueule [ par Jo ] Bonjour,Deajs je voudrai m'excuser d'utiliser le forum pour faire passer ce petit message, qui n'a rien a voir avec une demande d'aide ou de conseil d création d'un compilateur en langage c [ par fati fleur ] on veut créer un compilateur sous c et on veut le code source du compilateur Compilateur [ par vbseb ] Slt as tous, j'ecris car je suis debutant en c++, et j'aimerais savoir quel(s) est(ou sont) les meilleurs compilateurs.merci@+ Question de Compilateur et de compatibilité ! [ par Samoul ] Voila j'ai Visual C++ 6.0 Entreprise ce que je considère comme un très bon compilateur du moin si on se fie au prix! Mais j'ai quand meme un problème ECORE UN COUP DE GUEULE [ par Jo ] Salut,Oui !! encore un coup degueule, pourquoi cette fois ?Et bien tout simpelemtn pour la meme chose que la derniere fois, mon coup de gueulke est pa prob. compilateur c++ [ par error ] salut a tous je debute dans la programmation en c++ j'ai po mal de livres mais dans mes livre il ya la fonction #include &lt;iostream.h&gt; j'ai un pr Compilateur [ par thebigbang ] Bonjour a tous,Je suis encore nul en c++ et je voudrais avoir un renseignement ...Est ce que sont disponibles sur le net des simples compilateurs pour Nouveau compilateur [ par mmuller57 ] Je viens de découvrir un nouveau compilateur, c'est DM (Digital Mars) il gère le code DOS, Windows, et il permet aussi de programmer en Assembleur !Do


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales