Personnellement je ferai tout à l'intérieur d'une fermeture, comme l'évoquait lasher :
Je donne ici le squelette, à compléter bien sûr pour chaque token. Chaque fonction retournant unit (elle modifie l'environnement), et la fonction compile est récursive puisqu'elle pour traiter la liste des instructions jusqu'à la fin :
openCparseletreccompileoutdeclarations=(** Les fonctions terminales : ne dépendent pas d'un autre fonction de mise en forme *)letprint_operatorvar=function|M_MINUS->Printf.fprintfout"-%s"var|M_NOT->Printf.fprintfout"~%s"var|M_POST_INC->Printf.fprintfout"%s++"var|M_PRE_INC->Printf.fprintfout"++%s"var|M_POST_DEC->Printf.fprintfout"%s--"var|M_PRE_DEC->Printf.fprintfout"--%s"varandprint_predvar=function|S_MUL->()|S_DIV->()|S_MOD->()|S_ADD->()|S_SUB->()in(** Fonctions de mise en forme qui dépendent de celles déclarées ci-dessus *)(** Traite les déclarations *)letparse_declarationdeclarationloc=()(** Traite les fonctions *)andparse_functionlocstdeclarationscode=()in(** Point d'entrée du printer *)beginmatchdeclarationswith|[]->()|Cparse.CDECL(declaration,loc)::tl->parse_declarationdeclarationloc;compileouttl|Cparse.CFUN(loc,st,declarations,code)::tl->parse_functionlocstdeclarationscode;compileouttlend
[^] # Re: Méconnaissance
Posté par chimrod (site web personnel) . En réponse au journal Compilateur et Monad Reader. Évalué à 3.
Personnellement je ferai tout à l'intérieur d'une fermeture, comme l'évoquait lasher :
Je donne ici le squelette, à compléter bien sûr pour chaque token. Chaque fonction retournant unit (elle modifie l'environnement), et la fonction compile est récursive puisqu'elle pour traiter la liste des instructions jusqu'à la fin :