Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ===== Compilation W en P-CODE ===== ^ Source W ^ p-code ^ Remarque ^ | begin [nom]\\ background [nom]| ''PROG / BACK\\ BEXC\\ VERS <num3>\\ INCL <nom_fic_source>\\ SRCL <num_ligne>\\ PNAM [nom]'' | première instruction en assembleur\\ l'offset de BEXC sera calculé par l'assembleur\\ \\ \\ \\ [nom] du programme est optionnel | | library([a[,b]]) | ''LIBR\\ BEXC\\ VERS <num3>\\ INCL <nom_fic_source>\\ PARM <a>\\ PARM <b>\\ SRCL <num_ligne>\\ '' | première instruction en assembleur\\ l'offset de BEXC sera calculé par l'assembleur\\ \\ \\ les paramètres [a[,b]] sont optionnels et variables | | except | ''SRCL <num_ligne>\\ EXCE'' | | | end | ''SRCL <num_ligne>\\ ENDP / ENDL'' | ENDP si PROG ou BACK, ENDL si LIBR | | sub <nom>([param1[,param2]]) | ''SRCL <num_ligne>\\ SUBR <nom>\\ BEXC\\ [PARM param1]\\ [PARM param2]'' | \\ adresse //ends// calculee par l'assembleur\\ adresse //except// calculée par l'assembleur | | endsub | ''SRCL <num_ligne>\\ ENDS'' | | | throw <num8> | ''SRCL <num_ligne>\\ THRW <num8>'' | | | catch | ''SRCL <num_ligne>\\ CATC'' | | | include %%"fichier%%"\\ include 'fichier' | ''SRCL <num_ligne>\\ INCL <fichier>\\ ... p-code du fichier ...\\ INCL'' | en assembleur, <fichier> sans les doubles-quotes/quotes \\ \\ \\ a la fin du traitement du fichier include | | part <num3> | ''SRCL <num_ligne>\\ PART <num3>'' | | | nop | ''SRCL <num_ligne>'' | | | declare x[,y] | ''SRCL <num_ligne>\\ DECL x\\ DECL y'' | nombre de déclarations variable | | loop\\ \\ ... p-code ...\\ break\\ \\ ... p-code ... \\ continue\\ \\ ... p-code ...\\ endloop | '':L\\ SRCL <num_ligne>\\ \\ SRCL <num_ligne>\\ JUMP :l\\ \\ SRCL <num_ligne>\\ JUMP :L\\ \\ SRCL <num_ligne>\\ JUMP :L\\ :l'' | :L et :l sont des marqueurs pour que l'assembleur calcule les adresse des sauts | | input ident1[.ident2][!ident3] | ''SRCL <num_ligne>\\ PVAR ident1\\ PVAH ident2\\ PVAI ident3\\ INPT'' | \\ Code assembleur pour une //Variable// | | return | ''SRCL <num_ligne>\\ RETN'' | | | returnon <expr> | ''SRCL <num_ligne>\\ <expr>\\ RETT'' | <expr> enchaîne les opérations sur la pile.\\ ''RETT'' dépile et si # 0 : //return// | | break | ''SRCL <num_ligne>\\ <expr>\\ JUMP :l :f'' | '':l'' si loop, '':f'' si for | | breakon <expr> | ''SRCL <num_ligne>\\ <expr>\\ JMPT :l :f'' | '':l'' si loop, '':f'' si for.\\ <expr> enchaîne les opérations sur la pile.\\ ''JMPT'' dépile et si # 0 : saut | | continue | ''SRCL <num_ligne>\\ <expr>\\ JUMP :L :F'' | '':L'' si loop, '':F'' si for | | continueon <expr> | ''SRCL <num_ligne>\\ <expr>\\ JMPT :L :F'' | '':L'' si loop, '':F'' si for.\\ <expr> enchaîne les opérations sur la pile.\\ ''JMPT'' dépile et si # 0 : saut | | do routine([x[,y[,z]]]) | ''SRCL <num_ligne>\\ CRAZ\\ <var z>\\ PSHA\\ <var y>\\ PSHA \\ <var x>\\ PSHA\\ <var routine>\\ CALL _'' | Appel //simple// d'une subroutine.\\ Les paramètres sont empilés //à l'envers//.\\ Chaque paramètre est un enchaînement de PVAR/PVAH/PVAI. | | invoke <module>&<fonction>([x[,y[,z]]]) | ''SRCL <num_ligne>\\ CRAZ\\ <var y>\\ PSHA\\ <var x>\\ PSHA\\ MODL <module>@<fonction>'' | <module> maxi 21 cars. <fonction> maxi 23 cars.\\ Maxi. 3 paramètres, chacun est un enchaînement de PVAR/PVAH/PVAI.\\ TODO invoke | | call <fonction>([x[,y]]) | ''SRCL <num_ligne>\\ CRAZ\\ <var y>\\ PSHA\\ <var x>\\ PSHA\\ CLIB <fonction>'' | Chaque paramètre est un enchaînement de PVAR/PVAH/PVAI.\\ <fonction> maxi 255 cars.\\ TODO call | | let <var> = <expr> | ''SRCL <num_ligne>\\ <expr>\\ <var>\\ POPV'' | <expr> enchaîne les opérations sur la pile\\ ou variable à affecter (PVAR/PVAH/PVAI)\\ ou new <classe>\\ <var> est un enchaînement de PVAR/PVAH/PVAI. | | echo / echonl <var> | ''SRCL <num_ligne>\\ <var>\\ WRIT / WRLN'' | <var> est un enchaînement de PVAR/PVAH/PVAI. | | echo / echonl "chaine" 'chaine' | ''SRCL <num_ligne>\\ PVAT\\ DSET "chaine"\\ WRIT / WRLN'' | TODO avec <expr> | | delet <var> | ''SRCL <num_ligne>\\ <var>\\ DELE'' | <var> est un enchaînement de PVAR/PVAH/PVAI. | | if <expr> then / else\\ ... p-code ...\\ \\ \\ \\ elseif <expr> then / else\\ ... p-code ...\\ \\ \\ \\ \\ else\\ ... p-code ...\\ \\ \\ endif | '':I\\ SRCL <num_ligne>\\ <expr>\\ JMPF :E / JMPT :E\\ \\ JUMP :e\\ E:\\ SRCL <num_ligne>\\ <expr>\\ JMPF :E / JMPT :E\\ \\ JUMP :e\\ E:\\ SRCL <num_ligne>\\ \\ :e\\ SRCL <num_ligne>'' | Les //elseif// et //else// ne sont pas obligatoires.\\ Dès qu'une clause //else// apparaît, d'autres //elseif// ou //else// ne sont pas autorisés.\\ \\ Les JMPF :E et JMPT :E sautent au __premier__ :E à suivre du même //niveau//. | | foreach <var1> in <var2> like <var3>\\ \\ \\ ... p-code ...\\ break\\ \\ ... p-code ... \\ continue\\ \\ ... p-code ...\\ endfor |''SRCL <num_ligne>\\ //TODO//\\ :F\\ \\ SRCL <num_ligne>\\ JUMP :f\\ \\ SRCL <num_ligne>\\ JUMP :F\\ \\ SRCL <num_ligne>\\ JUMP :F\\ :f'' | :F et :f sont des marqueurs pour que l'assembleur calcule les adresse des sauts | | class <name> = {<base>} | | | | precision <expr> | | | | setsep <expr>,<expr> | | | | <expr>\\ +\\ -\\ *\\ /\\ div\\ mod\\ abs\\ neg\\ int\\ frac\\ round\\ =\\ #\\ <\\ >\\ < =\\ > =\\ and\\ or\\ | \\ ''ADDN''\\ ''SBCN''\\ ''MULN''\\ ''DIVN''\\ ''DIVE''\\ ''MODN''\\ ''ABSN''\\ ''NEGN''\\ ''INTE''\\ ''FRAC''\\ ''ROUN''\\ ''COMP 1''\\ ''COMP 2''\\ ''COMP 3''\\ ''COMP 4''\\ ''COMP 5''\\ ''COMP 6''\\ ''COMP 7''\\ ''COMP 8''\\ | valeurs empilées | compilation.txt Dernière modification : 2026/02/22 10:46de root