| Prochaine révision | Révision précédente |
| compilation [2025/12/19 19:54] – créée root | compilation [2026/08/02 12:32] (Version actuelle) – root |
|---|
| ===== Compilation W en P-CODE ===== | ===== 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 | | //En construction !!// |
| | 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'' | | | ^Source W^p-code^Remarque| |
| | end | ''SRCL <num_ligne>\\ ENDP / ENDL'' | ENDP si PROG ou BACK, ENDL si LIBR | | |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| |
| | 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 | | |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| |
| | endsub | ''SRCL <num_ligne>\\ ENDS'' | | | |except|''SRCL <num_ligne> \\ EXCE'' | | |
| | throw <num8> | ''SRCL <num_ligne>\\ THRW <num8>'' | | | |end|''SRCL <num_ligne> \\ ENDP / ENDL'' |ENDP si PROG ou BACK, ENDL si LIBR| |
| | catch | ''SRCL <num_ligne>\\ CATC'' | | | |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| |
| | 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 | | |endsub|''SRCL <num_ligne> \\ ENDS'' | | |
| | part <num3> | ''SRCL <num_ligne>\\ PART <num3>'' | | | |throw <num8>|''SRCL <num_ligne> \\ THRW <num8>'' | | |
| | nop | ''SRCL <num_ligne>'' | | | |catch|''SRCL <num_ligne> \\ CATC'' | | |
| | declare x[,y] | ''SRCL <num_ligne>\\ DECL x\\ DECL y'' | nombre de déclarations variable | | |include <nowiki>"fichier</nowiki>" \\ 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| |
| | 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 | | |part <num3>|''SRCL <num_ligne> \\ PART <num3>'' | | |
| | input ident1[.ident2][!ident3] | ''SRCL <num_ligne>\\ PVAR ident1\\ PVAH ident2\\ PVAI ident3\\ INPT'' | \\ Code assembleur pour une //Variable// | | |nop|''SRCL <num_ligne>'' | | |
| | return | ''SRCL <num_ligne>\\ RETN'' | | | |declare x[,y]|''SRCL <num_ligne> \\ DECL x \\ DECL y'' |nombre de déclarations variable| |
| | returnon <expr> | ''SRCL <num_ligne>\\ <expr>\\ RETT'' | <expr> enchaîne les opérations sur la pile.\\ ''RETT'' dépile et si # 0 : //return// | | |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| |
| | break | ''SRCL <num_ligne>\\ <expr>\\ JUMP :l :f'' | '':l'' si loop, '':f'' si for | | |input ident1[.ident2][!ident3]|''SRCL <num_ligne> \\ PVAR ident1 \\ PVAH ident2 \\ PVAI ident3 \\ INPT'' | \\ Code assembleur pour une //Variable// | |
| | 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 | | |return|''SRCL <num_ligne> \\ RETN'' | | |
| | continue | ''SRCL <num_ligne>\\ <expr>\\ JUMP :L :F'' | '':L'' si loop, '':F'' si for | | |returnon <expr>|''SRCL <num_ligne> \\ <expr> \\ RETT'' |<expr> enchaîne les opérations sur la pile. \\ ''RETT'' dépile et si # 0 : //return// | |
| | 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 | | |break|''SRCL <num_ligne> \\ <expr> \\ JUMP :l :f'' |'':l'' si loop, '':f'' si for| |
| | 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. | | |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| |
| | 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 | | |continue|''SRCL <num_ligne> \\ <expr> \\ JUMP :L :F'' |'':L'' si loop, '':F'' si for| |
| | 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 | | |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| |
| | 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. | | |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.| |
| | echo / echonl <var> | ''SRCL <num_ligne>\\ <var>\\ WRIT / WRLN'' | <var> 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| |
| | echo / echonl "chaine" 'chaine' | ''SRCL <num_ligne>\\ PVAT\\ DSET "chaine"\\ WRIT / WRLN'' | TODO avec <expr> | | |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| |
| | delet <var> | ''SRCL <num_ligne>\\ <var>\\ DELE'' | <var> est un enchaînement de PVAR/PVAH/PVAI. | | |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.| |
| | 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//. | | |echo / echonl <var>|''SRCL <num_ligne> \\ <var> \\ WRIT / WRLN'' |<var> est un enchaînement de PVAR/PVAH/PVAI.| |
| | 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 | | |echo / echonl "chaine" 'chaine'|''SRCL <num_ligne> \\ PVAT \\ DSET "chaine" \\ WRIT / WRLN'' |TODO avec <expr>| |
| | class <name> = {<base>} | | | | |delet <var>|''SRCL <num_ligne> \\ <var> \\ DELE'' |<var> est un enchaînement de PVAR/PVAH/PVAI.| |
| | precision <expr> | | | | |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//.| |
| | setsep <expr>,<expr> | | | | |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| |
| | free <var> | | | | |class <name> = {<base>}| | | |
| | <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 | | |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| |
| | |